失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言实现可视化 运用EasyX实现拼图+文字解谜+迷宫+猜数游戏

C语言实现可视化 运用EasyX实现拼图+文字解谜+迷宫+猜数游戏

时间:2023-12-06 19:19:05

相关推荐

C语言实现可视化 运用EasyX实现拼图+文字解谜+迷宫+猜数游戏

C语言实现可视化,运用EasyX实现拼图+文字解谜+迷宫+猜数游戏(文字解谜游戏:梦境寻踪)

文字解谜游戏:梦境寻踪前言一,游戏展示二,关于EasyX如何实现展示图片与鼠标操作三,EasyX如何做一个句柄窗口,即交互窗口四,EasyX播放音乐(BGM),循环播放五,C语言运用EasyX做一个拼图游戏六,C++语言运用EasyX做一个迷宫游戏七,C语言运用EasyX做一个猜数游戏八,部分代码展示九,完整代码十,要点

文字解谜游戏:梦境寻踪

开发语言:C语言

开发工具:vs+EasyX

开发人员:杨富超,王昊,孟桐冰,郭宇

故事部分:孟桐冰,郭宇

代码部分:杨富超,王昊

CSDN源码下载:梦境寻踪源码

如有疑问,欢迎留言

给初学者:关于VS怎么安装EasyX

EasyX文档:EasyX函数文档

前言

这个是用了1周左右的休闲时间,来和四个同学完成的,感觉EasyX确实适合C语言初学者学习,做做小游戏,芜湖,终于结尾了,第一个小游戏,nice

大学以后可以记忆挺深的一个事了。

一,游戏展示

头文件

#include<graphics.h>// 引用图形库头文件#include<stdio.h> #include<stdlib.h>#include<conio.h> //InputBox,MessageBox#include<time.h> //随机种子 #include<mmsystem.h> //bgm#include<windows.h>//bgm#include "maze.h" //迷宫#pragma comment(lib,"winmm.lib") //bgm

二,关于EasyX如何实现展示图片与鼠标操作

展示图片原理分享:展示图片EasyX做的很简单,首先,先用IMAGE定义一个图片的变量,然后给变量赋值。

运用函数:IMAGE,initgraph,loadimage,putimage

U1S1这几个函数开始后陌生,后面用着就熟悉了

代码:

#include <graphics.h>#include <conio.h>//头文件IMAGE start//定义变量int main(){initgraph(1366, 700);//定义窗口大小长,宽loadimage(&start, L"picture\\start.jpg");//赋值操作,把路径的图片赋值给start(之前定义的变量)putimage(0, 0, &start);//从x=0,y=0,开始展示start赋值的图片,即picture\\start.jpg}

鼠标操作原理:先定义1块长宽确定的窗口,再通过x,y坐标确定鼠标位置。

运用函数:MOUSEMSG,FlushMouseMsgBuffer,MouseHit ,msg.uMsg,WM_LBUTTONDOWN,注意看EasyX官网文档介绍

/*下面进行鼠标交互*/MOUSEMSG msg;//定义变量,保存鼠标消息FlushMouseMsgBuffer();// 清空鼠标消息缓冲区,避免无效鼠标信息带入到正式判断中while (true) // 主循环,循环监听鼠标信息{while (MouseHit())//监听鼠标信息;当有鼠标消息的时候执行,可检测连续的鼠标信息{msg = GetMouseMsg();//获取鼠标消息if (WM_LBUTTONDOWN == msg.uMsg)//判断鼠标信息;鼠标左键按下{if (msg.x > 460 && msg.x < 820 && msg.y > 600 && msg.y < 635)//鼠标点击特定区域,即按钮所在区域{Background_1();//调用介绍背景函数}}}}}

三,EasyX如何做一个句柄窗口,即交互窗口

运用函数:InputBox,MessageBox,

注意:要用wchar_t 定义字符串,具体介绍看下官网的函数文档

InputBox:交互窗口,用户可以输入信息。

MessageBox:信息提醒窗口,展示信息。

代码:

wchar_t s1[50];InputBox(s1, 20, _T("请输入猜测的数字"), _T("Guess"), 0, 0, false);MessageBox(NULL, _T("恭喜您猜测正确,金币数加500"), _T("Guess"), MB_OKCANCEL | MB_SETFOREGROUND);

四,EasyX播放音乐(BGM),循环播放

运用函数:mciSendString

注意:

_T(“open+空格+路径+alias+变量名(可变)”),0,0,0

TEXT(“play+空格+变量名+repeat”),0,0,0

如果不加repeat,那么只播放一遍,加上repeat,会循环播放,

路径是不允许存在空格的

头文件为:

#include<mmsystem.h> //bgm

#include<windows.h> //bgm

#pragma comment(lib,“winmm.lib”) //bgm

代码:

mciSendString(_T("open notangry.mp3 alias music"), 0, 0, 0);mciSendString(TEXT("play music repeat"), 0, 0, 0);

五,C语言运用EasyX做一个拼图游戏

注意:需要用的图片在我的CSDN源码里面

3X3拼图,是有一半几率不能拼出来的,涉及高数知识,不细讲,

但是有算法可以解决,我的代码是运用了这个算法的,不难,很简单

代码:

#include<graphics.h>// 引用图形库头文件#include<stdio.h> #include<stdlib.h>#include<conio.h> //InputBox,MessageBox#include<time.h> //随机种子 #include<mmsystem.h> //bgm#include<windows.h>//bgm#include "maze.h" //迷宫#pragma comment(lib,"winmm.lib") //bgm/*全局变量*/# define IMA_HEIGHT 699 //拼图图片的长# define IMA_WIDTH 699//拼图图片的宽# define SIZE 233 //拼图图片大小# define ROW (IMA_HEIGHT/SIZE)# define COL (IMA_WIDTH/SIZE)int y = 0;//拼图判断IMAGE image;IMAGE image1;IMAGE img[ROW * COL];void JigsawGame(){srand((unsigned)time(NULL));GameInit();//分割图片MixImg();//打乱图片while (1){DrawMap();GamePlay();GameDone();if (y == 1){break;}}}void GameInit(){loadimage(&image, L"picture\\pintu.jpg", IMA_HEIGHT, IMA_WIDTH);loadimage(&image1, L"picture\\pintu2.jpg", IMA_HEIGHT, IMA_WIDTH);putimage(699, 0, &image1);SetWorkingImage(&image); //这个函数用于设定当前的绘图设备。设定image为绘图窗口int n = 0;for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){getimage(&img[n++], j * SIZE, i * SIZE, SIZE, SIZE);//得到分割的区域;}}SetWorkingImage(NULL); //把窗口设置为当前的绘图工作区,为默认绘图窗口,即默认,相当于重开//将最后一块图片换成空格图片loadimage(&img[ROW * COL - 1], L"blank.jpg", SIZE, SIZE);//空白n = 0;for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){arr[i][j] = n;n++;}}}void DrawMap(){for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){putimage(j * SIZE, i * SIZE, &img[arr[i][j]]);}}}void GamePlay(){int Blank_i, Blank_j;//空白图片的列,行坐标;int Mouse_i, Mouse_j;//鼠标的列,行坐标;for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++){if (arr[i][j] == ROW * COL - 1){Blank_i = i;Blank_j = j;}}}MOUSEMSG msg = {0 };//定义一个鼠标消息;msg = GetMouseMsg();switch (msg.uMsg){case WM_LBUTTONDOWN://获取点击图片的坐标;Mouse_i = msg.y / SIZE;Mouse_j = msg.x / SIZE;if (Mouse_i == Blank_i && Mouse_j == Blank_j - 1 ||Mouse_i == Blank_i && Mouse_j == Blank_j + 1 ||Mouse_j == Blank_j && Mouse_i == Blank_i - 1 ||Mouse_j == Blank_j && Mouse_i == Blank_i + 1){arr[Blank_i][Blank_j] = arr[Mouse_i][Mouse_j];arr[Mouse_i][Mouse_j] = ROW * COL - 1;}else if (msg.x > 1139 && msg.x < 1329 && msg.y > 116 && msg.y < 170){JigsawGame();}break;}}void MixImg(){// 0~ROW*COL-1的数;int a[ROW * COL - 1];int i, j;for (i = 0; i < ROW * COL - 1; i++){int n = rand() % (ROW * COL - 1);for (j = 0; j < i; j++){if (a[j] == n) {i--;break;}}if (j >= i)a[i] = n;}int cnt = 0;for (i = 0; i < ROW * COL - 1; i++)for (j = i + 1; j < ROW * COL - 1; j++){if (a[i] > a[j])//排除空白块0cnt++;}if (cnt % 2)//奇排列则无解{MixImg();}int n = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){arr[i][j] = a[n];arr[ROW - 1][COL - 1] = ROW * COL - 1;n++;}}}void GameDone(){int i, j;int n = 0;int count = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){if (arr[i][j] == n){count++;}n++;}}if (count == ROW * COL){y = 1;}}

六,C++语言运用EasyX做一个迷宫游戏

EasyX做一个迷宫游戏

代码:

#include<graphics.h> #include <vector>#include <stack>#include<conio.h>using std::stack;// 使用STL的栈using std::vector;// 使用STL的数组容器// 游戏信息#define WIN_WIDTH1366// 窗口的宽度(单位:像素)#define WIN_HEIGHT700// 窗口的高度(单位:像素)// !!注:由于随机生成算法的原因,地图宽高只能为奇数#define GAME_WIDTH21// 地图的宽度(单位:块)#define GAME_HEIGHT21// 地图的高度(单位:块)#define WALL1// 墙壁的数字标记#define GROUND0// 地面的数字标记#define FILLSTATE2// 加油站的数字标记#define ENDPOS3// 终点的数字标记#define MAXVIEW5.0// 最大的视野#define MINVIEW1// 最小的视野#define FILLNUM10// 加油站的数量#define DARKTIME8// 视野下降1图块所需的时间// 全局变量列表intg_BlockSize;// 块大小intg_GameMap[GAME_HEIGHT][GAME_WIDTH];// 地图(宽高单位为块)POINTg_EndPos;// 终点位置POINT g_PlayerPos;// 玩家在地图上的位置POINTg_CameraPos;// 摄像机(屏幕左上角)在地图上的位置IMAGEg_MapImage;// 地图的图片(由于地图是固定的,在不改变缩放的情况下只需要绘制一次)doubleg_ViewArray;// 视野UINTg_BeginTime;// 游戏开始时的时间UINTg_LastFillTime;// 上次为油灯加油的时间void initGame();// 初始化游戏void endGame();// 结束游戏void draw();// 绘制函数bool upDate();// 数据更新函数void absDelay(int delay);// 绝对延迟bool canMove(POINT pos);// 判断某个位置是否可以移动void computeCameraPos();// 计算摄像机在地图上的位置void rePaintMap();// 重绘地图void drawWall(POINT pos);// 绘制墙壁图块的函数void drawGround(POINT pos);// 绘制地面图块的函数void drawFillState(POINT pos);// 绘制油灯图块的函数void drawEndPos(POINT pos);// 绘制终点void drawPlayer();// 绘制人物的函数void drawView();// 绘制视野int maze(){initGame();while (1){if (!upDate()) break;// 更新draw();// 绘制absDelay(16);// 绝对延迟 16 毫秒,控制每秒 60 帧}endGame();return 0;}void initGame(){g_BlockSize = 32;// 初始图块大小为 32 个像素srand(GetTickCount());// 初始化随机数生成// 初始化间隔室for (int i = 0; i < GAME_HEIGHT; i++){for (int j = 0; j < GAME_WIDTH; j++){if (i % 2 == 0 || j % 2 == 0)// 奇数行奇数列设为墙壁g_GameMap[i][j] = WALL;elseg_GameMap[i][j] = GROUND;}}// 随机生成地图(使用深度优先遍历)stack<POINT> stepStack;// 步骤栈vector<POINT> stepPoint;// 四周的点POINT nowPoint;// 当前步的所在点stepStack.push({1,1 });// 写入初始点 (1,1) 作为起点nowPoint = {1,1 };g_GameMap[1][1] = 0xFFFF;// 标记这个点while (!stepStack.empty())// 只要步骤栈不空就继续循环{// 得到四周的点POINT tempPoint;for (int i = -1; i <= 1; i += 2){tempPoint = {nowPoint.x,nowPoint.y + i * 2 };// 计算点// 判断坐标是否合法if (tempPoint.x >= 0 && tempPoint.x <= GAME_WIDTH - 1 &&tempPoint.y >= 0 && tempPoint.y <= GAME_HEIGHT - 1 &&g_GameMap[tempPoint.y][tempPoint.x] != 0xFFFF){stepPoint.push_back(tempPoint);}tempPoint = {nowPoint.x + i * 2 ,nowPoint.y };// 计算点// 判断坐标是否合法if (tempPoint.x >= 0 && tempPoint.x <= GAME_WIDTH - 1 &&tempPoint.y >= 0 && tempPoint.y <= GAME_HEIGHT - 1 &&g_GameMap[tempPoint.y][tempPoint.x] != 0xFFFF){stepPoint.push_back(tempPoint);}}// 根据周围点的量选择操作if (stepPoint.empty())// 如果周围点都被遍历过了{stepStack.pop();// 出栈当前点if (!stepStack.empty())nowPoint = stepStack.top();// 更新当前点}else{stepStack.push(stepPoint[rand() % stepPoint.size()]);// 入栈当前点g_GameMap[(nowPoint.y + stepStack.top().y) / 2][(nowPoint.x + stepStack.top().x) / 2] = 0;// 打通墙壁nowPoint = stepStack.top();// 更新当前点点g_GameMap[nowPoint.y][nowPoint.x] = 0xFFFF;// 标记当前}stepPoint.clear();// 清空周围点以便下一次循环}// 清洗标记点for (int i = 0; i < GAME_HEIGHT; i++){for (int j = 0; j < GAME_WIDTH; j++){if (g_GameMap[i][j] == 0xFFFF)g_GameMap[i][j] = 0;}}// 随机生成加油站的位置for (int i = 0; i < FILLNUM; i++){POINT fillPoint = {rand() % GAME_WIDTH,rand() % GAME_HEIGHT };// 保证在空地生成加油站while (g_GameMap[fillPoint.y][fillPoint.x] != GROUND)fillPoint = {rand() % GAME_WIDTH,rand() % GAME_HEIGHT };// 标记油灯g_GameMap[fillPoint.y][fillPoint.x] = FILLSTATE;}g_GameMap[GAME_HEIGHT - 2][GAME_WIDTH - 2] = ENDPOS;// 标记终点g_EndPos = {GAME_WIDTH - 2,GAME_HEIGHT - 2 };// 确定终点位置g_ViewArray = MAXVIEW;// 初始视野是最大的g_BeginTime = GetTickCount();// 开始计时g_LastFillTime = GetTickCount();// 油灯加油的时间rePaintMap();// 绘制地图g_PlayerPos = {g_BlockSize * 3 / 2,g_BlockSize * 3 / 2 };// 初始化人的位置computeCameraPos();// 计算摄像机的位置initgraph(WIN_WIDTH, WIN_HEIGHT);// 初始化画布setbkmode(TRANSPARENT);// 设置背景为透明BeginBatchDraw();// 开始缓冲绘制}void endGame(){EndBatchDraw();// 结束缓冲绘制}void draw(){// 清空设备cleardevice();// 绘制视野drawView();// 绘制人drawPlayer();// 绘制时间TCHAR timeStr[256];int loseTime = GetTickCount() - g_BeginTime;// 计算流失的时间_stprintf_s(timeStr, _T("找碎片已用时:%02d:%02d"), loseTime / 1000 / 60, loseTime / 1000 % 60);settextcolor(RGB(140, 140, 140));outtextxy((WIN_WIDTH - textwidth(timeStr)) / 2, 3, timeStr);FlushBatchDraw();// 刷新屏幕}bool upDate(){POINT nextPos = g_PlayerPos;// 下一个位置// 计算下一个位置if (GetKeyState(VK_UP) & 0x8000)nextPos.y -= 2;if (GetKeyState(VK_DOWN) & 0x8000)nextPos.y += 2;if (GetKeyState(VK_LEFT) & 0x8000)nextPos.x -= 2;if (GetKeyState(VK_RIGHT) & 0x8000)nextPos.x += 2;// 如果下一个位置不合法if (!canMove(nextPos)){if (canMove({g_PlayerPos.x, nextPos.y }))// y 轴移动合法nextPos = {g_PlayerPos.x, nextPos.y };else if (canMove({nextPos.x, g_PlayerPos.y }))// x 轴移动合法nextPos = {nextPos.x, g_PlayerPos.y };else// 都不合法nextPos = g_PlayerPos;}// 如果是油灯则更新时间if (g_GameMap[nextPos.y / g_BlockSize][nextPos.x / g_BlockSize] == FILLSTATE)g_LastFillTime = GetTickCount();// 如果是终点则通关else if (g_GameMap[nextPos.y / g_BlockSize][nextPos.x / g_BlockSize] == ENDPOS){FlushBatchDraw();return false;}g_PlayerPos = nextPos;// 更新位置computeCameraPos();// 计算摄像机的位置// 根据时间缩减视野static unsigned int lastTime = GetTickCount();int loseTime = GetTickCount() - g_LastFillTime;// 计算流失的时间g_ViewArray = MAXVIEW - loseTime / 1000.0 / DARKTIME;// 每一段时间油灯的照明力会下降一个图块if (g_ViewArray < MINVIEW) g_ViewArray = MINVIEW;// 处理鼠标消息MOUSEMSG mouseMsg;// 鼠标信息int lastBlockSize = g_BlockSize;// 保存原本的大小while (MouseHit()){mouseMsg = GetMouseMsg();if (mouseMsg.uMsg == WM_MOUSEWHEEL)// 滚轮消息{g_BlockSize += mouseMsg.wheel / 120;}}// 如果没有滚轮消息就退出if (lastBlockSize == g_BlockSize) return true;// 处理滚轮消息if (g_BlockSize >= 10 && g_BlockSize <= 50)// 块大小没有达到极限值{// 保证缩放后的地图不会比窗口小if (GAME_WIDTH * g_BlockSize < WIN_WIDTH ||GAME_HEIGHT * g_BlockSize < WIN_HEIGHT)g_BlockSize = lastBlockSize;rePaintMap();// 重绘地图// 重新计算玩家在地图上的位置POINT mapPos = {g_PlayerPos.x / lastBlockSize,g_PlayerPos.y / lastBlockSize };// 计算在地图上的位置g_PlayerPos.x = mapPos.x * g_BlockSize + g_BlockSize / 2;// 计算映射后的位置g_PlayerPos.y = mapPos.y * g_BlockSize + g_BlockSize / 2;// 计算映射后的位置computeCameraPos();// 重新计算摄像机位置}// 保证图块不会过大和过小if (g_BlockSize < 10) g_BlockSize = 10;if (g_BlockSize > 50) g_BlockSize = 50;return true;}void absDelay(int delay){static int curtime = GetTickCount();static int pretime = GetTickCount();while (curtime - pretime < delay){curtime = GetTickCount();Sleep(1);}pretime = curtime;}bool canMove(POINT pos){// 只要外接矩形的四个顶点不在墙壁内就必定合法returng_GameMap[(pos.y - 3) / g_BlockSize][(pos.x - 3) / g_BlockSize] != WALL &&g_GameMap[(pos.y + 3) / g_BlockSize][(pos.x + 3) / g_BlockSize] != WALL &&g_GameMap[(pos.y - 3) / g_BlockSize][(pos.x + 3) / g_BlockSize] != WALL &&g_GameMap[(pos.y + 3) / g_BlockSize][(pos.x - 3) / g_BlockSize] != WALL;}void computeCameraPos(){// 以人物位置为中心计算摄像机的理论位置g_CameraPos.x = g_PlayerPos.x - WIN_WIDTH / 2;g_CameraPos.y = g_PlayerPos.y - WIN_HEIGHT / 2;// 防止摄像机越界if (g_CameraPos.x < 0)g_CameraPos.x = 0;if (g_CameraPos.y < 0)g_CameraPos.y = 0;if (g_CameraPos.x > GAME_WIDTH * g_BlockSize - WIN_WIDTH)g_CameraPos.x = GAME_WIDTH * g_BlockSize - WIN_WIDTH;if (g_CameraPos.y > GAME_HEIGHT * g_BlockSize - WIN_HEIGHT)g_CameraPos.y = GAME_HEIGHT * g_BlockSize - WIN_HEIGHT;}void rePaintMap(){g_MapImage.Resize(GAME_WIDTH * g_BlockSize, GAME_HEIGHT * g_BlockSize);// 重置地图图片大小SetWorkingImage(&g_MapImage);// 设置地图图片为当前工作图片for (int i = 0; i < GAME_HEIGHT; i++){for (int j = 0; j < GAME_WIDTH; j++){switch (g_GameMap[i][j]){case WALL:drawWall({j * g_BlockSize,i * g_BlockSize });// 绘制墙壁break;case FILLSTATE:drawFillState({j * g_BlockSize,i * g_BlockSize });// 绘制加油站break;case GROUND:drawGround({j * g_BlockSize,i * g_BlockSize });// 绘制地面break;case ENDPOS:drawEndPos({j * g_BlockSize,i * g_BlockSize });break;}}}SetWorkingImage();// 复位工作图片}void drawWall(POINT pos){setfillcolor(RGB(254, 109, 19));solidrectangle(pos.x, pos.y, pos.x + g_BlockSize, pos.y + g_BlockSize);}void drawGround(POINT pos){setfillcolor(RGB(255, 255, 255));solidrectangle(pos.x, pos.y, pos.x + g_BlockSize, pos.y + g_BlockSize);}void drawFillState(POINT pos){drawGround(pos);// 绘制圆角矩形pos.x += g_BlockSize / 5;pos.y += g_BlockSize / 5;setfillcolor(RGB(252, 213, 11));solidroundrect(pos.x, pos.y, pos.x + g_BlockSize / 5 * 3, pos.y + g_BlockSize / 5 * 3, g_BlockSize / 8, g_BlockSize / 8);}void drawEndPos(POINT pos){drawGround(pos);// 绘制圆角矩形pos.x += g_BlockSize / 5;pos.y += g_BlockSize / 5;setfillcolor(RGB(87, 116, 48));solidroundrect(pos.x, pos.y, pos.x + g_BlockSize / 5 * 3, pos.y + g_BlockSize / 5 * 3, g_BlockSize / 8, g_BlockSize / 8);}void drawPlayer(){setfillcolor(RGB(252, 213, 11));solidcircle(g_PlayerPos.x - g_CameraPos.x, g_PlayerPos.y - g_CameraPos.y, 3);}void drawView(){// 锁定视野HRGN viewArr;int r = int(g_BlockSize * g_ViewArray + 0.5);// 计算视野半径POINT orgin = g_PlayerPos;orgin.x -= g_CameraPos.x;// 计算在屏幕上的位置orgin.y -= g_CameraPos.y;// 计算在屏幕上的位置viewArr = CreateEllipticRgn(orgin.x - r, orgin.y - r, orgin.x + r, orgin.y + r);// 创建一个圆形的区域setcliprgn(viewArr);// 锁定区域// 绘制地图putimage(0, 0, WIN_WIDTH, WIN_HEIGHT, &g_MapImage, g_CameraPos.x, g_CameraPos.y);// 删除区域DeleteObject(viewArr);// 消除区域setcliprgn(NULL);}

七,C语言运用EasyX做一个猜数游戏

EasyX做一个猜数游戏

不难,简单,加上文章开头的头文件,还有需要的图片,注意路径要正确

代码:

void Guess(){wchar_t s1[50];wchar_t s[20];loadimage(&guess, L"picture\\guess.jpg");putimage(0, 0, &guess);MOUSEMSG msg;//定义变量,保存鼠标消息FlushMouseMsgBuffer();// 清空鼠标消息缓冲区,避免无效鼠标信息带入到正式判断中while (true) // 主循环,循环监听鼠标信息{while (MouseHit())//监听鼠标信息;当有鼠标消息的时候执行,可检测连续的鼠标信息{msg = GetMouseMsg();//获取鼠标消息if (WM_LBUTTONDOWN == msg.uMsg)//判断鼠标信息;鼠标左键按下{if (msg.x > 1000 && msg.x < 1200 && msg.y > 70 && msg.y < 130)//鼠标点击特定区域,即ENTER按钮所在区域{money = money - 200;int m = rand() % 100;int n;_itow_s(m, s, 10, 10);//int 转换成 wchar_tfor (n = 0; n < 7; n++){InputBox(s1, 20, _T("请输入猜测的数字"), _T("Guess"), 0, 0, false);int x = _wtoi(s1);//wchar_t 转换成 intif (x == m){MessageBox(NULL, _T("恭喜您猜测正确,金币数加500"), _T("Guess"), MB_OKCANCEL | MB_SETFOREGROUND);money = money + 700;break;}else{if (x > m)MessageBox(NULL, _T("数字猜测大了"), _T("Guess"), MB_OKCANCEL | MB_SETFOREGROUND);elseMessageBox(NULL, _T("数字猜测小了"), _T("Guess"), MB_OKCANCEL | MB_SETFOREGROUND);}}if (n == 7)MessageBox(NULL, _T("不好意思,您5次都没猜对,金币数扣200"), _T("Guess"), MB_OKCANCEL | MB_SETFOREGROUND);}if (msg.x > 1010 && msg.x < 1200 && msg.y > 460 && msg.y < 525)//鼠标点击特定区域,即ENTER按钮所在区域{Adult_background1();}}}}}

八,部分代码展示

#include<graphics.h>// 引用图形库头文件#include<stdio.h> #include<stdlib.h>#include<conio.h> //InputBox,MessageBox#include<time.h> //随机种子 #include<mmsystem.h> //bgm#include<windows.h>//bgm#include "maze.h" //迷宫#pragma comment(lib,"winmm.lib") //bgm/*全局变量*/# define IMA_HEIGHT 699 //拼图图片的长# define IMA_WIDTH 699//拼图图片的宽# define SIZE 233 //拼图图片大小# define ROW (IMA_HEIGHT/SIZE)# define COL (IMA_WIDTH/SIZE)int num = 0;//记录碎片个数,初始化为0int money = 1000;//记录金币个数,初始化为1000int sum = 2;//赌场商店最多可以买的碎片个数int x1 = 1;//每个猜数游戏只能获得一次碎片int x2 = 1;//每个猜数游戏只能获得一次碎片int x3 = 1;//每个猜数游戏只能获得一次碎片int m = 1;//迷宫只能获得一次碎片int y = 0;//拼图判断/*定义图片*/IMAGE start;//开始IMAGE start_button;IMAGE background1;//背景1IMAGE background2;//背景2IMAGE background3;//背景3IMAGE background4;//背景4IMAGE background5;//背景5IMAGE background6;//背景6IMAGE time1;//时空选择IMAGE childbackground;//童年背景IMAGE youthbackground;//青春背景IMAGE adultbackground;//成年背景IMAGE adultbackground1;//商店与猜数IMAGE shop;IMAGE guess;IMAGE get;IMAGE jigsawGame;IMAGE image;IMAGE image1;IMAGE img[ROW * COL];IMAGE game1;IMAGE game2;IMAGE game3;IMAGE end1;IMAGE end1_1;IMAGE end1_2;IMAGE end2;IMAGE end2_1;IMAGE end2_2;IMAGE end3;int arr[ROW][COL];bool State = false;void Welcome();//开始界面 void Get();//获得碎片成功的界面void Background_1();//介绍背景void Background_2();void Background_3();void Background_4();void Background_5();void Background_6();void Time();//时空选择void Childhood_background();//童年时期背景void Youth_background();//青春期背景void Adult_background();//成年时期背景void Adult_background1();//商店与猜数游戏void Shop();//商店函数void Guess();//猜数游戏void JigsawGame();//拼图游戏void GameInit();//初始化游戏void DrawMap();//画地图void GamePlay();//玩游戏:1、鼠标点击图片2、点击与空白相邻的图片时,会和空白图片交换;void MixImg(); //打乱图片顺序;void GameDone();//完成游戏void Game1();//文字猜谜游戏1;void Game2();//文字猜谜游戏2;void Game3();//文字猜谜游戏3;void End();//结局

九,完整代码

文字解谜游戏:梦境寻踪

提取码:yfc6

说明:图片都是用ps自己制作的,切不可更改图片命名,否则会导致程序无法运行,因为图片命名和代码要保持一致。

十,要点

1、创建项目:新建-项目-空项目-右键“源文件”-添加-新建项-C++文件

2、编码字符集:unicode字符集

3.将图片资源直接导入到所命名的文件夹中,注意不要将图片打包文件夹后再放入,要直接将图片导入对应文件夹。

4.程序中要多次用到图形库的函数,建议刚接触的初学者查看EasyX安装时附带的官方帮助文档,也可以参考我分享的源代码。但是考虑到帮助文档内容较少,对函数的用法介绍较少,下面分享一个关于EasyX图形库详细函数用法介绍的文档。

EasyX文档

提取码:yfc6

如果觉得《C语言实现可视化 运用EasyX实现拼图+文字解谜+迷宫+猜数游戏》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。