摘要:扫雷最原始的版本可以追溯到年一款名为方块的游戏。两年后,汤姆安德森在的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。年,微软公司的罗伯特杜尔和卡特约翰逊两位工程师在系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。
行吧,开始了
#include#include//包含图形库头文件#define ROW 9 //行#define COL 9 //列 共81个格子#define MINE_NUM 18//雷的数量#define IMG_SIZE 40
void GameInit(){ //1,创建窗口 一行有九张图片每张图片40px, initgraph(IMG_SIZE*ROW, IMG_SIZE*COL,SHOWCONSOLE); //加载图片(赋值) load加载 第一个参数,存储图片的变量 错误:字符集问题 for (int i = 0; i < 12; i++) { char file[20] = ""; sprintf(file, "./image/%d.jpg", i); loadimage(&img[i], file, IMG_SIZE, IMG_SIZE); } //布雷 for (int i = 0; i < MINE_NUM; ) { //排除辅助区 int row = rand() % ROW+1;//0-8 1-9 int col = rand() % COL+1; if (mine[row][col] == 0) { mine[row][col] = 9; i++; } } //雷所在的九宫格,要加1(雷除外) for (int i = 1; i < ROW+1; i++) { for (int k = 1; k < COL+1; k++) { if (mine[i][k] == 9) { //遍历雷的九宫格 细心 for (int a = i - 1; a <= i + 1; a++) { for (int b = k - 1; b <= k + 1; b++) { //非雷的格子加1 if (mine[a][b] != 9) { mine[a][b]++; } } } } } } //加密 开始时全部为掩码图 for (int i = 1; i < ROW + 1; i++) { for (int k = 1; k < COL + 1; k++) { mine[i][k] += 20; } }}
void MouseEvent(){ //检测是否有鼠标消息 if (MouseHit()) { //获取鼠标消息,坐标,左键还是右键 MOUSEMSG msg = GetMouseMsg(); //把坐标转化成数组下标 openr = msg.y / IMG_SIZE+1; openc = msg.x / IMG_SIZE+1; //判断是左键还是右键 switch (msg.uMsg) { case WM_LBUTTONDOWN: //如果格子没有打开,就打开格子,否则不做处理 if (mine[openr][openc] > 9) { mine[openr][openc] -= 20; OpenNull(openr,openc); num++; } break; case WM_RBUTTONDOWN: //标记 if (mine[openr][openc] > 9 && mine[openr][openc] <= 29) { mine[openr][openc] += 20; } else { mine[openr][openc] -= 20; } break; } }}
//递归打开所有空白,以及空白周围的数字void OpenNull(int row,int col){ //点击的是空白才能打开 if (mine[row][col] == 0) { for (int i = row - 1; i <= row + 1; i++) { for (size_t k = col-1; k <= col+1; k++) { //如果为空或者不是雷就打开 if ((mine[i][k] == 20 || mine[i][k] != 29)&& mine[i][k]>9) { mine[i][k] -= 20; num++; OpenNull(i, k); } } } }}
void Jude(){ //判断输 if (mine[openr][openc] == 9) { int isok = MessageBox(GetHWnd(), "是否继续!", "点到雷了", MB_OKCANCEL); if (isok == IDOK) { mine[openr][openc] += 20; } else { exit(666); } } //判断赢 if (num == ROW*COL - MINE_NUM) { int isok = MessageBox(GetHWnd(), "是否继续!", "点到雷了", MB_OKCANCEL); if (isok == IDOK) { num = 0; GameInit(); } else { exit(666); } }}
int main(){ GameInit(); show(); //循环处理游戏逻辑 while (1) { MouseEvent(); GameDraw(); Jude(); } getchar(); return 0;}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123179.html
摘要:如果觉得安装太慢,还可以加入国内镜像下载我比较习惯用豆瓣的。之前的文章有讲过滴常用源镜像清华阿里云中国科技大学华中理工大学山东理工大学豆瓣在里输入打包成的命令。 导语 这篇文章是我之前很想写的,但是拖到了今天! 咳咳咳......主要是有粉丝让我安排一下!宠粉.jpg 很多新手小伙伴儿是...
摘要:如果觉得安装太慢,还可以加入国内镜像下载我比较习惯用豆瓣的。之前的文章有讲过滴常用源镜像清华阿里云中国科技大学华中理工大学山东理工大学豆瓣在里输入打包成的命令。 导语 这篇文章是我之前很想写的,但是拖到了今天! 咳咳咳......主要是有粉丝让我安排一下!宠粉.jpg 很多新手小伙伴儿...
摘要:上一期咱们用语言实现了三子棋的小游戏语言实现三子棋今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是玩扫雷的高手。 上一期咱们用C语言实现了三子棋的小游戏 C语言实现三子棋 今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是...
摘要:条消息语言入门三子棋语言实现详细版的博客博客条消息语言入门三子棋语言实现详细版的博客博客我们将雷盘初始化为统一的符号。 目录 1.原理简介 2.分布目标及代码实现 3.总结 1.原理简介 首先我们需要一个空的雷盘,在其中随机埋入十枚雷,当我们排这颗雷时,若此位置为雷,则游戏失败,若不...
阅读 2615·2023-04-25 15:15
阅读 1290·2021-11-25 09:43
阅读 1550·2021-11-23 09:51
阅读 1065·2021-11-12 10:36
阅读 2864·2021-11-11 16:55
阅读 934·2021-11-08 13:18
阅读 695·2021-10-28 09:31
阅读 2015·2019-08-30 15:47