Easyx如何实现扫雷游戏
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天给大家介绍一下Easyx如何实现扫雷游戏。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。代码:#include#in
千家信息网最后更新 2025年01月23日Easyx如何实现扫雷游戏
今天给大家介绍一下Easyx如何实现扫雷游戏。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。
代码:
#include#include #include #include #include #pragma comment(lib, "winmm.lib") #define ROW 10 //定义行列的常量#define COL 10 #define MineNum 10 //雷的数量#define ImgSize 40 //图片的尺寸 //定义图片资源IMAGE imgs[12];void loadResource(){ for (int i = 0; i < 12; i++) { char imgPath[50] = { 0 }; sprintf_s(imgPath, "./images/%d.jpg", i); loadimage(&imgs[i], imgPath, ImgSize, ImgSize); }} bool isfirst = true; //是不是第一次进来 //函数声明void show(int map[][COL]);void init(int map[][COL]);void draw(int map[][COL]);void mouseMsg(ExMessage* msg, int map[][COL]);void boomBlank(int map[][COL], int row, int col);int judge(int map[][COL], int row, int col);int main(){ //创建窗口 initgraph(400, 400/*,EW_SHOWCONSOLE*/); //播放开始音乐 mciSendString("open ./images/start.mp3 alias bgm", NULL, 0, NULL); mciSendString("play bgm", NULL, 0, NULL); //扫雷地图 int map[ROW][COL] = {0}; init(map); //游戏主循环 while (true) { //处理消息 ExMessage msg; while (peekmessage(&msg, EM_MOUSE)) { switch (msg.message) { case WM_LBUTTONDOWN: //鼠标左键和右键点击 case WM_RBUTTONDOWN: mouseMsg(&msg, map); int ret = judge(map,msg.y/ImgSize, msg.x / ImgSize); //点击之后判断 if (ret == -1) { draw(map); int select = MessageBox(GetHWnd(), "你这么牛,怎么输了呢?敢再来一把吗?", "low B!", MB_OKCANCEL); if (select == IDOK) //再来一把 { //重新初始化 init(map); } else //退出 { exit(0); } } else if(ret == 1) { } system("cls"); printf("judege:%d\n", ret); show(map); break; } } draw(map); } //show(map); getchar(); return 0;} void show(int map[][COL]){ for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { printf("%2d ", map[i][k]); } printf("\n"); }}//初始化数据void init(int map[][COL]){ loadResource(); //设置随机数种子 srand((unsigned)time(NULL)); //把map全部初始化为0 memset(map, 0, sizeof(int) * ROW * COL); //随机设置十个雷 用-1表示 for (int i = 0; i < MineNum; ) { //数组的有效下标 [0,9] int r = rand() % ROW; int c = rand() % COL; if (map[r][c] == 0) { map[r][c] = -1; //只有执行了这里的代码,才成功设置了雷 -1 i++; } } //把以雷为中心的九宫格数据都+1,雷除外 for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { //找到雷,并遍历雷所在的九宫格 if (map[i][k] == -1) { for (int r = i-1; r <= i+1; r++) { for (int c = k-1; c <= k+1; c++) { //对周围的数据加1,会有一个bug if ((r >= 0 && r < ROW && c >= 0 && c < COL) && map[r][c] != -1) { ++map[r][c]; } } } } } } //加密格子 for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { map[i][k] += 20; } }}//绘制void draw(int map[][COL]){ //贴图,根据map里面的数据,贴对应的图片 for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { if (map[i][k]>=0 && map[i][k]<=8) //[0,8] { int index = map[i][k]; //0 1 2 3 4 5 6 7 8 putimage(k * ImgSize, i * ImgSize, &imgs[index]); // } else if (map[i][k] == -1) { putimage(k * ImgSize, i * ImgSize, &imgs[9]); } else if (map[i][k] >= 19 && map[i][k] <= 28) { putimage(k * ImgSize, i * ImgSize, &imgs[10]); } else if(map[i][k] >= 39) //-1 + 20 +20 { putimage(k * ImgSize, i * ImgSize, &imgs[11]); } } }}//鼠标操作数据void mouseMsg(ExMessage* msg,int map[][COL]){ //先根据鼠标点击的坐标求出对应的数组的下标 int r = msg->y / ImgSize; int c = msg->x / ImgSize; //左键打开格子 if (msg->message == WM_LBUTTONDOWN) { //什么时候能够打开,没有打开的时候就打开 if (map[r][c]>=19 && map[r][c]<=28) { //这个函数只能播放wav格式 PlaySound("./images/click.wav", NULL, SND_ASYNC | SND_FILENAME); map[r][c] -= 20; boomBlank(map, r, c); //检测一下是不是空白格子,是,炸开 isfirst = true; } } //右键标记格子 else if (msg->message == WM_RBUTTONDOWN) { PlaySound("./images/rightClick.wav", NULL, SND_ASYNC | SND_FILENAME); //是否能够标记:如果没有打开就能标记 if (map[r][c] >= 19 && map[r][c] <= 28) { map[r][c] += 20; } else if(map[r][c]>=39) { map[r][c] -= 20; } }}//点击空白格子,连环爆开周围的所有空白格子还有数字 row col 是当前点击的格子void boomBlank(int map[][COL],int row,int col){ //判断row col位置是不是空白格子 if (map[row][col] == 0) { for (int r = row-1; r <= row+1; r++) { for (int c = col-1; c <= col+1; c++) { if ((r>=0&&r =0&&c
=19 && map[r][c]<=28) //没有打开 { //每一次调用都会播放一下 if (isfirst) { PlaySound("./images/search.wav", NULL, SND_ASYNC | SND_FILENAME); isfirst = false; } map[r][c] -= 20; boomBlank(map, r, c); } } } } return;}//游戏结束条件 输了返回-1 没结束返回0 赢了返回 1int judge(int map[][COL],int row ,int col){ //点到了雷,结束 输了 if (map[row][col] == -1 || map[row][col] == 19) { return -1; } //点完了格子,结束 赢了 点开了100 - 10 = 90 个格子 int cnt = 0; for (int i = 0; i < ROW; i++) { for (int k = 0; k < COL; k++) { //统计打开的格子的数量 if (map[i][k] >= 0 && map[i][k] <= 8) { ++cnt; } } } if (ROW*COL - MineNum == cnt) { return 1; } return 0;}
以上就是Easyx如何实现扫雷游戏的全部内容了,更多与Easyx如何实现扫雷游戏相关的内容可以搜索之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下!
格子
扫雷
数据
内容
图片
文章
空白
鼠标
下标
九宫
代码
数组
时候
更多
标记
不错
有效
成功
位置
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
有关互联网科技的图片
彩票服务器设置在外国安全吗
自己的数据库
校园网络安全风险隐患排查报告
网络安全审计公告
软件开发人员必备壁纸
天津通勤人员数据库
服务器 sas sata 支持
服务器维修电源需要停机吗
互联网的高科技产品
excel图谱添加数据库
网络安全截获属于被动攻击的是
数据库写入上限
苹果6数据库开不了怎么办
数据库的数据内容个人基本信息表
vf建立数据库的步骤
创小青网络技术有限公司
麦块我的世界服务器
电脑本地数据库建设
你的网络安全是
阿尔法家拆单软件无法连接服务器
怎么查询石器时代服务器数据库
河北承德服务器
慧桥通信网络技术培训中心
我的世服务器ip
网络安全中专可以就业吗
网络安全论文结语
bdscgps时钟服务器
ACD碳谱数据库安装
西藏第三方软件开发定制大概费用