Easyx如何实现扫雷游戏
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天给大家介绍一下Easyx如何实现扫雷游戏。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。代码:#include#in
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
关于网络安全的7人的小品
昌平电脑服务器回收
深圳易通网络技术有限公司
村民网络安全教育简报
软件开发毕业证
浅析计算机网络安全pdf下载
越秀区品质网络技术开发工艺
申汇海南互联网科技有限公司
gRPC中心服务器
金蝶运行加密服务器
软件开发公司制度汇编
江苏工业软件开发哪家便宜
中国网络安全蓝队
武汉数据中心服务器厂家供应
软件开发有含金量证书
吉林精益管理软件开发
北京在线创业网络技术有限公司
如何从网页复制股票数据库
网络技术改变医疗
达梦数据库支持的系统
常见的软件开发过程模块
2路服务器与4路服务器
数据库中drop怎么用
软件开发推广业务怎么样
商都县政府网络安全招标结果
数据库事务故障有哪两种
上海网络技术应用研究所年薪
滨州软件开发策略
电视网络安全传输
服务器一直没关机的游戏