免费自助建站系统哪个好,万网注册的域名怎么建设网站,代网站备案费用吗,网站seo关键词排名查询目录 一.思路 1.成果展示 2.思路 二.具体操作 1.创建棋盘 2.初始化雷 3.布置雷 4.打印 5.排除雷 三.代码实现 1.test.c文件 2.thunder.h文件 3.thunder.c文件 Hello#xff0c;大家好#xff0c;今天我们来实现扫雷游戏#xff0c;希望这一篇博客能给带给大家一…目录 一.思路 1.成果展示 2.思路 二.具体操作 1.创建棋盘 2.初始化雷 3.布置雷 4.打印 5.排除雷 三.代码实现 1.test.c文件 2.thunder.h文件 3.thunder.c文件 Hello大家好今天我们来实现扫雷游戏希望这一篇博客能给带给大家一些收获。 一.思路 1.成果展示 在真正开始讲解之前我们先来看一下我的成果展示
屏幕录制 2024-07-03 165322-CSDN直播 2.思路 我们先来讲解一下扫雷游戏的思路这个思路就是和我们在完游戏时候的那个思路时一模一样的就是排除雷简单来说就是我们给定一个位置看这个位置是不是雷如果我们不幸选中的这个位置就刚好是一个雷的话那么我们就被炸死了反之如果这个位置不是雷的话那么相应的我们就要统计一下这个位置旁边与这个位置相邻的位置中雷的个数。 二.具体操作 1.创建棋盘 实际上就是创建框架就是创建如下面所示的一个棋盘。 我们首先要创建一个如上图一样的类似于棋盘一样的框架要制作这个框架其实是很简单的就是建立一个二维数组就可以了将数组中的所有的元素均设置成 * 就可以了。这里我们在创建框架的时候需要注意一件事情就必须要创建两个一模一样的二维数组大家不妨看一看我们上面的那个游戏思路如果这个位置是雷我们就死了反之就要在这个位置上写上周围的所有位置的雷的数目总和。为了区分有雷和无雷我们将有雷的位置赋值1无雷的位置赋值为0那么这样的话我们在玩游戏的过程中出现了1的话我们是无法知道这个位置是雷还是说这个位置不是雷周围总共有1个雷如果我们只是使用一个二维数组的话是无法明白这个出现的1的含义的会让我们产生歧义。因此我们在这里要使用两个一模一样的数组来实现我们呈现在屏幕上面的棋盘样式就是上面的那幅图所示由于 * 符号属于字符因此我们要建立一个字符数组但是如果按照我们上面所说的那样的话一个数组是int类型另一个数组是char类型这样写的话有一点点麻烦为了统一我们这里将两个数组均写成是char类型的。 2.初始化雷 通过上面的思路我们可知我们建立了两个char类型的数组我们接下来就要进行初始化操作了在进行初始化操作之前我们首先要知道创建的两个数组是干什么的一个数组是用来布置雷的我们为了方便将雷使用字符 1 来表示不是雷的位置使用字符 0 来表示这个数组我们不可以展示出来因为这个数组中存放的是雷的分布情况另一个数组就是我们要展示出来的数组是用来显示我们要查的这个位置又没有雷的存在。
我们将不展示出来的这个数组命名为mine数组如下图所示 mine数组我们在进行初始化的时候将这个数组中的所有的元素全部初始化为字符 0 通过我们上面的解释我们可知 0 代表的是要排查的这个位置没有雷。
我们将展示出来的这个数组命名为show数组如下图所示 show数组我们在进行初始化的时候将这个数组中的所有元素全部初始化为 * 我们这个数组是作为展示的一个数组因此我们不能暴露里面的雷的放置情况。 3.布置雷 我们的雷的布置这一操作是在mine数组中进行的我们的棋盘是采用的是 9 * 9实现的我们这里在布置是只布置10个雷就i可以了我们是要在这个棋盘中去进行雷的布置的因此不能超过这个棋盘的范围这里我们要使用一个函数就是 rand( ) 函数下面是关于这个函数的链接大家可以去了解一下这个函数可以随机生成一个随机数
rand - C Referencehttps://legacy.cplusplus.com/reference/cstdlib/rand/?kwrand我们可以通过这个函数来确定雷的位置使用这个函数我们就可以得到两个值xy作为坐标来确定一个地址这个地址必须在mine函数的范围之内将这个地址赋值为字符 1 利用循环创建10个雷。 4.打印 我们在进行打印这一操作的时候就是将mine数组和show数组中的各个元素均打印到屏幕上即可这里使用for循环最后有代码。 5.排除雷 前面的几步都是我们的准备操作这一步才是我们玩游戏的步骤我们给定一个坐标位置去判断这个位置是否有雷判断这一步操作是在mine数组中判断的雷的分布是在mine数组中的若mine数组中这个位置是字符 1 的话就说明我们碰到雷了反之若mine数组中这个位置是字符 0 的话我们就要去统计一下这个位置周围的位置的雷的个数然后将这个个数转化为字符赋值给show数组中的这个相同的位置为了方便观看我们这里将show数组在打印到屏幕上就可以了这里还要有一个结束条件就是我们将所有的雷全部都排完之后我们就扫雷成功了因此我们还要定义一个变量来表示我们找到的非雷位置的个数用这个变量来表示雷有没有被扫完。 三.代码实现 1.test.c文件
#includethunder.h
void menu()
{printf(********************\n);printf(**** 1.play ****\n);printf(**** 0.exit ****\n);printf(********************\n);
}
void game()
{char mine[COWS][COLS] { 0 };char show[COWS][COLS] { 0 };// 初始化雷Initebroad(mine, COWS, COLS, 0);Initebroad(show, COWS, COLS, *);// 布置雷Setmine(mine, COW, COL);// 打印Displaydroad(mine, COW, COL);Displaydroad(show, COW, COL);// 排除雷Findmine(mine, show, COW, COL);
}
void test()
{int input 0;srand((unsigned int)time(NULL));do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(游戏结束退出游戏\n);break;default:printf(输入错误请重新输入\n);}} while (input);
}
int main()
{test();return 0;
} 2.thunder.h文件
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestdlib.h
#includetime.h
#includestring.h
#define COW 9
#define COL 9
#define COWS COW2
#define COLS COL2
#define mount 10
void Initebroad(char arr[COWS][COLS], int cows, int cols, char set);
void Setmine(char arr[COWS][COLS], int cow, int col);
void Displaydroad(char arr[COWS][COLS], int cows, int cols);
void Findmine(char mine[COWS][COLS], char show[COWS][COLS], int cow, int col); 3.thunder.c文件
#includethunder.h
void Initebroad(char arr[COWS][COLS], int cows, int cols, char set)
{for (int i 0; i cows; i){for (int j 0; j cols; j){arr[i][j] set;}}
}
void Setmine(char arr[COWS][COLS], int cow, int col)
{int count mount;while (count 0){int x rand() % cow 1;int y rand() % col 1;if (arr[x][y] 0){arr[x][y] 1;count--;}}
}
void Displaydroad(char arr[COWS][COLS], int cow, int col)
{ printf(------开始游戏-----\n);for (int i 0; i col; i) {printf(%d ,i);}printf(\n);for (int i 1; i cow; i){printf(%d ,i);for (int j 1; j col; j){printf(%c , arr[i][j]);}printf(\n);}
}
//static这个关键字可以保证这个函数只能在当前.c文件中使用其他的文件使用不了。
static int Getminecount(char arr[COWS][COLS], int x, int y)
{int count 0;for (int i x - 1; i x 1; i){for (int j y - 1; j y 1; j){count arr[i][j] - 0;}}return count;
}
void Findmine(char mine[COWS][COLS], char show[COWS][COLS], int cow, int col)
{int x 0, y 0;int win 0;while (win cow * col - mount)//确保雷全部被排完。{ printf(请输入要排查的坐标位置\n);scanf(%d %d, x, y);if (x 1 x cow y 1 y col){if (show[x][y] *){if (mine[x][y] 1){printf(很遗憾您被炸死了\n);Displaydroad(show, COW, COL);break;}else{// 当程序进行到这里时就说明要排查的当前位置不是雷那么就要统计周围一圈的雷的个数。int count Getminecount(mine, x, y);show[x][y] count 0;Displaydroad(show, COW, COL);win;}}else{printf(这个位置您已经排查过了请另排查一个\n);}}else{printf(输入的坐标不存在请重新输入\n);}}if (win cow * col - mount){printf(恭喜您排雷成功\n);Displaydroad(mine, COW, COL);}
} OK以上就是我们对于扫雷游戏的全部讲解了希望能对大家有所收获感谢大家的支持。