news 2026/8/10 3:28:14

扫雷游戏实现来了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
扫雷游戏实现来了

扫雷游戏的设计和分析:(使用软件:visual studio2022)

1、实现在控制台实现扫雷游戏

2、游戏开始界面可以用简易菜单制作,实现玩游戏和退出游戏

3、扫雷的棋盘格是9×9的格子

4、布置十个雷

5、排查雷

1、如果排查的坐标是雷,显示你被炸死了

2、如果排查的作坐标不是雷,显示周围雷的个数

3、当雷全部排查完毕,显示恭喜你排雷成功

游戏界面:

设计思路:当我们存放雷的信息,和排查雷的信息定义成一个数组的话,很容易起冲突,所以这里定义两个数组来存放信息,这样就不会冲突了。把雷的个数存放在9×9的棋盘格里。一个用来存放雷的信息,一个用来统计排查雷的信息。这里我用字符0表示不是雷,用字符1表示雷。因为在使用数字的话,会造成冲突,例如:用1来表示雷,那么在统计雷周围的个数时就会发成冲突。所以这里用字符1来代替雷。

如下图,为了防止数组溢出,造成越界访问,在实际棋盘的时候设置成11×11扩发一圈如下图,这样就不会出现上述问题。在排查到不是雷的时候,统计周围的8个坐标相加计算出周围有多少个雷。

游戏开始界面:

游戏实现:(代码中小编也添加了很多注释哦~)

#define _CRT_SECURE_NO_WARNINGS 1 #define count_t 10 #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 //库函数头文件调用 #include <stdio.h> #include <stdlib.h> #include <time.h> //初始化棋盘 void Initborad(char arr[ROWS][COLS], int row, int col, char set); //打印棋盘 void printboard(char arr[ROWS][COLS], int row, int col); //布置雷在mine数组里面 void placemine(char arr[ROWS][COLS], int row, int col); //排查雷 void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col); void Initborad(char arr[ROWS][COLS], int row, int col, char set) { int i = 0; //输出行 for (i = 0; i < row; i++) { int j = 0; //输出列 for (j = 0; j < col; j++) { arr[i][j] = set; } } } void printboard(char arr[ROWS][COLS], int row, int col) { int i = 0; printf("************扫雷***********\n"); //输出行 //在9×9的棋盘格上显示行的坐标 for (i = 0; i <= row; i++) { printf("%d ", i); } printf("\n"); for (i = 1; i <= row; i++) { printf("%d ", i);//显示9×9棋盘格的列的坐标 int j = 0; //输出列 for (j = 1; j <= col; j++) { printf("%c ", arr[i][j]); } printf("\n"); } printf("************扫雷***********\n"); } void placemine(char arr[ROWS][COLS], int row, int col) { int count = count_t; while (count) { //定义整型变量x为行,y为列 //布置雷的坐标,必须在1到9行,1到9列 int x = rand() % row + 1; int y = rand() % col + 1; //判断要布置雷的坐标是不是没有布置过,字符0为不是雷,字符1表示是雷,当坐标不是雷的时候,才可以布置雷 if (arr[x][y] == '0') { arr[x][y] = '1'; count--; } } } static int countmine(char mine[ROWS][COLS], int x, int y) { //计算输入x和y坐标,周围坐标的雷的个数,以x,y坐标表示中心点,周围8个坐标 return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0'); } void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; //用来判断什么时候循环结束 int win = 0; //判断win小于row乘col的值减去雷的个数,也就是说当win小于81-雷的个数时证明还没排查完 while (win < row * col -count_t) { printf("请输入要排查雷的坐标>"); scanf("%d %d", &x, &y); //判断x和y的坐标是否合法合规,在游戏给的坐标范围内 if (x >= 1 && x <= row && y >= 1 && y <= col) { //如果输入的坐标内是雷,则被炸死游戏结束 if (mine[x][y] == '1') { printf("很遗憾你被炸死了!\n"); //把雷的个数放在show中显示 printboard(mine, ROW, COL); break; } //如果输入的坐标不是雷,统计周围雷的个数 else { //统计周围雷的个数 int count = countmine(mine, x, y); //ASCLL码表中数字0加上字符0得到的是字符0 show[x][y] = count + '0'; //把周围的mine数组的雷显示在show数组里面 printboard(show, ROW, COL); win++; } } else { printf("坐标非法,请重新输入!\n"); } } //判断win等于row乘col的值减去雷的个数,也就是说当win等于81-雷的个数时证明拍雷成功结束 if (win == row * col - count_t) { printf("恭喜你排雷成功!\n"); printboard(mine, ROW, COL); } } void play_mine() { //定义两个字符类型的二维数组,一个用来存放雷的信息,一个用来统计排查雷的信息 char mine[ROWS][COLS]; char show[ROWS][COLS]; //初始化棋盘 //mine数组里存放字符0 //show数组里存放字符* Initborad(mine, ROWS, COLS, '0'); Initborad(show, ROWS, COLS, '*'); //打印棋盘 printboard(show, ROW, COL); //布置雷在mine数组里面 placemine(mine, ROW, COL); //printboard(mine, ROW, COL); //排查雷 findmine(mine, show, ROW, COL); } //打印简易游戏菜单 void play() { printf("********** 扫雷 *********\n"); printf("******************************\n"); printf("********** 1.play *********\n"); printf("********** 0.exit *********\n"); printf("******************************\n"); } int main() { int input = 0; //生成随机数 srand((unsigned int)time(NULL)); do { play(); printf("请选择开始游戏的按键>"); scanf("%d", &input); switch (input) { case 1: play_mine(); break; case 0: printf("退出游戏!\n"); break; default: printf("输入错误,请重新输入\n"); } } while (input); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:32:55

计算无人机巡逻覆盖地块数Java题解

问题描述 一块地用一个从 0 开始索引的二维二进制矩阵 block 表示,其中 0 表示空闲地块,1 表示放有障碍物的地块。在每个测试用例中,地的左上角永远是空闲的。一架无人机面向右侧,从左上角开始巡逻。无人机将一直前进,直到抵达的边界或遇到障碍物地块时,无人机将会顺时针…

作者头像 李华
网站建设 2026/7/14 15:32:56

phpColors 项目推荐

phpColors 项目推荐 【免费下载链接】phpColors A series of methods that let you manipulate colors. Just incase you ever need different shades of one color on the fly. 项目地址: https://gitcode.com/gh_mirrors/ph/phpColors 项目基础介绍和主要编程语言 ph…

作者头像 李华
网站建设 2026/7/14 15:32:55

【笔试题】Java实现格式化 Unix 时间戳

以东八区时间为例,用Java语言实现。 法一:使用内置的SimpleDateFormat类和Date类 import java.text.SimpleDateFormat; import java.util.Date; public

作者头像 李华
网站建设 2026/7/14 15:32:57

mapbox 从入门到精通 - 目录

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录一、&#x1f340;总目录1.1 ☘️ mapbox基础1.2 ☘️ …

作者头像 李华
网站建设 2026/7/14 15:32:56

BiliDownloader_GUI安装与配置指南

BiliDownloader_GUI安装与配置指南 【免费下载链接】biliDownloader_GUI B站视频下载程序&#xff0c;BiliBili视频下载器&#xff0c;支持下载B站视频、交互\互动视频&#xff0c;支持下载区域限制视频资源。Bili Downloader GUI Program for Stable.&#x1f60a; 项目地址…

作者头像 李华
网站建设 2026/7/14 15:32:53

node.native核心组件探秘:HTTP服务器实现原理与实战

node.native核心组件探秘&#xff1a;HTTP服务器实现原理与实战 【免费下载链接】node.native 项目地址: https://gitcode.com/gh_mirrors/no/node.native node.native是一个基于C的高性能HTTP服务器框架&#xff0c;它通过整合libuv和http-parser两大核心组件&#xf…

作者头像 李华