12 Easyx扫雷游戏

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<easyx.h>#include<mmsystem.h>
#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全部初始化为0memset(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;//只有执行了这里的代码,才成功设置了雷 -1i++;}}//把以雷为中心的九宫格数据都+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,会有一个bugif ((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 8putimage(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<ROW&&c>=0&&c<COL)			//没越界&& map[r][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 赢了返回 1
int 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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12903.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 实现弹球游戏

一&#xff0c;知识点。 1&#xff0c;如何自定义View&#xff0c;以及重写它的onDraw方法. 2&#xff0c;Intent实现界面跳转。 3&#xff0c;线程的使用。 4&#xff0c;弹出框框的使用。 二&#xff0c;具体实现代码。 MainLayout文件&#xff1a; <?xml version&…

扫雷游戏问题

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

psychoPy下载避雷

直接使用命令行&#xff1a;pip install psychopy 下载会遇到两个文件无法下载&#xff0c;需要手动到网上下载&#xff0c;至于那两个文件叫什么&#xff0c;已经不记得了。 接下来是尝试了很多种方法&#xff0c;成功安装的一个&#xff01; 进入官网 https://www.psychopy…

避雷针如何惹怒别人的?

History of the Lightning Rod: How the Lightning Rod was Invented and Terrified & Offended People闪电的驯服者&#xff1a;电学的历史 01 避雷针 一、前言 避雷针仅仅是一个通过电线连接到地下的金属棒&#xff0c;那它为何能够吓到和惹怒别人的呢&#xff1f;  在K…

如何实现精致扫雷游戏(可扩散可标记)---保姆级教程

目录 思路&#xff1a; main函数内容&#xff1a; 创建“双子”数组&#xff1a; 初始化数组&#xff1a; 打印棋盘&#xff1a; 布置雷&#xff1a; 排查雷&#xff1a; 初阶&#xff1a; 大致过程&#xff1a; 如何统计周围雷的个数&#xff1a; 判断是否赢得游戏…

【强化学习】玩转Atari-Pong游戏

如果您感觉项目还不错&#xff0c;请您点个fork支持一下&#xff0c;谢谢qwq 玩转Atari-Pong游戏 Atari: 雅达利&#xff0c;最初是一家游戏公司&#xff0c;旗下有超过200款游戏&#xff0c;不过已经破产。在强化学习中&#xff0c;Atari游戏是经典的实验环境之一&#xff0c;…

如何用计算机编辑游戏,编辑教你用iPad玩转电脑游戏之RPG篇

今天中关村游戏网要给大家带来的并不是几大又几大&#xff0c;盘点有盘点啥的。今天要给大家带来一些特别的东西&#xff1b;同学们你们一定要Hold住不要大喊大叫啊~。 iPad作为现代生活中的高科技产物已经越来越普及了&#xff0c;当然ISO的游戏也并非少数。但有了这些游戏你就…

保姆级教学—扫雷游戏的实现

扫雷的目录 扫雷游戏选择初始化棋盘布置雷打印棋盘排查雷完整代码呈现 结尾 扫雷 整个游戏的实现分为五个部分&#xff1a; 游戏选择初始化棋盘布置雷打印棋盘排查雷 在文章的最后会有完整的代码呈现 游戏选择 首先是游戏选择部分&#xff0c;你可以在此选择是否开始游戏 …

[Moonlight内网串流教程] IPAD超简易操作版 - 安卓苹果通用

超简易进行串流教程 使用设备&#xff1a;ipad Air 3 、有Nvidia显卡的普通Windows笔记本。 Windows系统准备工作 1、打开Nvidia GeForce Experience&#xff0c;如果没有就去下载一个。 2、进入C:\ProgramData\NVIDIA Corporation\Downloader\latest 3、将里面的setup.exe右…

iPad 3g版完美实现打电话功能(phoneitipad破解)

看到这个标题&#xff0c;有的同学可能吐槽&#xff0c;iPad 用来打电话&#xff0c;多雷人啊&#xff0c;人家apple设计的时候没加电话功能是故意这样做的。 不过这次真的有这样的需求&#xff0c;一台测试用的iPad 1 3G版的机器&#xff0c;放进去了一张3G电话卡&#xff0c;…

大学军训板报计算机学院,大学生军训黑板报素材

大学生军训黑板报素材 大学生军训黑板报有哪些呢&#xff1f;我们不妨一起来参考下范文吧&#xff01;希望对您有所帮助&#xff01;以下是小编为您搜集整理提供到的大学生军训黑板报素材内容&#xff0c;希望对您有所帮助&#xff01;欢迎阅读参考学习&#xff01; 大学生军训…

军训计算机电气专业解说词,你的军训有我陪伴

9月3日&#xff0c;湖南大学2018级新生军训开始了。这一天天气如以往一样&#xff0c;闷热难耐&#xff0c;但是对于电气与信息工程学院电自1801班学生助理张之亮来说却是难忘的一天。 就在中午十二点左右&#xff0c;张之亮同学接到了一个紧急电话&#xff1a;电自1801班的黄天…

计算机网络军训口号,军训口号霸气口号(精选60句)

军训口号霸气口号(精选60句) 下面是小编帮大家整理的军训口号霸气口号(精选60句)&#xff0c;供大家参考借鉴&#xff0c;希望可以帮助到有需要的朋友。 军训口号霸气口号1 1、流血流汗不流泪&#xff0c;掉皮掉肉不掉队。 2、一连口号&#xff1a;铁血一连&#xff0c;彰显军颜…

计算机系军训口号四句霸气,军训口号 四句 霸气

军训口号 四句 霸气 掉皮掉肉不掉队&#xff0c;流血流汗不流泪 继承人民军队光荣传统和优良作风为民族复兴刻苦学习 发扬集体主义和革命英雄主义精神为祖国富强立志成才 磨练顽强的斗志&#xff0c;培养吃苦的精神&#xff0c;锤炼良好的品质 服从命令听从指挥团结互助争创佳绩…

计算机学院军训口号大全团队,关于霸气押韵的军训口号大全

关于霸气押韵的军训口号大全 导语&#xff1a;《现代汉语词典》中说&#xff0c;口号是“供口头呼喊的有纲领性和鼓动作用的简短句子”。马克思主义哲学认为&#xff0c;物质决定意识&#xff0c;意识对物质具有能动作用。口号作为意识的表现形式之一&#xff0c;是对当时社会政…

计算机网络军训口号,霸气押韵的16字军训口号(精选50句)

霸气押韵的16字军训口号(精选50句) 人是靠梦想活下来的,也是靠梦想活下去的,军训是锻炼我们的.意识形态。下面和小编一起来看霸气押韵的16字军训口号(精选50句),希望有所帮助! 1、军中骄子,校园精英;铿锵四连,勇往直前。 2、天骄十六,不懈追求;勇往直前,争创一流。 3…

计算机系统军训口号,有气势的军训口号(精选50条)

有气势的军训口号(精选50条) 在日常学习、工作和生活中&#xff0c;大家都听说过或者使用过一些比较经典的口号吧&#xff0c;口号的作用是便于“造势”&#xff0c;形成一种氛围。你知道什么样的口号才能称之为经典吗&#xff1f;以下是小编帮大家整理的有气势的军训口号(精选…

计算机系军训口号四句霸气,军训口号四句霸气

军训口号四句霸气 军训口号四句霸气的有哪些?以下是小编收集的关于《军训口号四句霸气》的文章&#xff0c;欢迎借鉴参考! 篇一&#xff1a;军训口号四句霸气 风云XX&#xff0c;军中骄子&#xff0c;校园精英&#xff0c;谁与争风。 军鹰XX&#xff0c;翱翔九天&#xff0c;搏…

大学军训板报计算机学院,军训主题黑板报内容

【军训主题黑板报内容】军之魂 置身军旅&#xff0c;信念不可缺少&#xff0c;按照某种说法&#xff0c;此种信念即时人们口口相传的“军魂”——“军之魂”。 “狭路相逢勇者胜&#xff0c;遇敌必亮剑。”此堪为“军魂”之一。对于“军魂”二字&#xff0c;我想&#xff0c;若…

计算机网络军训口号,计算机专业军训口号

1. 争当训练标兵&#xff0c;共创先进连队。 2. 不经历风雨 &#xff0c;怎么见彩虹。 3. 同心同德求实创新齐育桃李芳天下&#xff0c;自律自强奋发进取共添德艺馨未来。 4. 团结一心&#xff0c;努力拼搏。 5. 明德尚行&#xff0c;矢志报国&#xff0c;磨砺青春&#xff0c;…