Easyx如何实现扫雷游戏
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,今天给大家介绍一下Easyx如何实现扫雷游戏。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。代码:#include#in
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
无线网络技术农业领域
几个酒店组数据库
jason 数据库
密押服务器
智能互联网络技术大专
小学网络安全与保密预案
服务器检查上一次请求时间
数据库基础 vf
服务器上安装什么浏览器
湖北盛大网络技术股份有限公司
怎么找到第二个dhcp服务器
在服务器上找不到目录路径
网络安全电子小报没有水印
我的世界点赞最少的服务器
阿里巴巴一共有多少服务器
数据库维保方案
软件开发公司都有哪些岗位
大学生怎样实现网络安全
电脑软件开发价格
陕西工会网络安全
四川成都网络技术公司
山东移动软件开发岗
税务系统网络安全知识宣传文化
保卫网络安全战斗口号
网络安全主动预警
服务器的管理口有什么用
如家开房记录数据库
网络安全出境存储条例
公司电脑需要服务器么
r730服务器设置方法