(c语言)数组和函数的实践:扫雷游戏 思路与逻辑
前言
这是本人第一篇博客,更多的是对现阶段c语言学习的一个总结,相当于一篇笔记,代码以及博客文章都存在着很大的不足,望各位大佬指出,本人一定及时纠正并加以补充,愿共同进步!
目录
一:扫雷游戏的基本逻辑
二:游戏的分析与设计
1.分文件编写
2.创建菜单
3.创建棋盘
4.显示棋盘
一:扫雷游戏的基本逻辑
想必大家都有接触过扫雷游戏

我们要想用代码实现一款扫雷游戏,首先便要理清这款游戏的逻辑。
1.一张地图,且地图上有一定数量的雷,在此我们设置地图为9*9,一共有10个雷。
2.游玩方式:如果位置是雷,就炸死了。游戏失败。
如果不是雷,会统计该坐标周围雷的个数,并通过数字显示出来
如果成功找到所有非雷的位置。游戏胜利。
二:游戏的分析与设计
🚀1.分文件编写
不同功能的函数封装到不同的文件中。 一个.c文件和一个.h文件被称为一个模块。 开发C程序时,稍微大型的项目就需要使用多文件开发(模块化编程)。 当代码量较大功能较复杂时,单一文件程序会使得文件非常巨大,代码量非常大,成千上万行的代码在一个文件中不便于修改和维护,因此需要将不同的功能模块放在不同的文件中。
🥦好处:
1.程序更加简洁明了
2.利于小组团队共同完成项目
3.便于进行调试
🚀2.创建菜单
便于进行后续操作
void menu()
{
printf("--------------------------\n");
printf("--------------------------\n");
printf("---------1.play-----------\n");
printf("---------2.quit-----------\n");
printf("--------------------------\n");
printf("--------------------------\n");
}
用do…while循环实现菜单使用,switch语句进行菜单选择
int main()
{
int input = 0;
do
{
menu();
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
Sweepmine();
break;
case 2:
printf("欢迎您下次游玩!");
break;
deafault:
break;
}
} while (input);
return 0;
}
🚀3.创建棋盘
由于考虑到边缘有雷的情况,防止访问出界棋盘应制作9+2=11大小的规格
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 |
0 |
0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ||
| 0 | 0 | 0 |
先创建数组

注:由于行,列使用频率较高 在game.h中进行宏定义

🍉数组1 初始化 使其全部填充“*”视为遮挡、
🍉数组2 初始化 使其全部填充0,视为无雷,后续填充1作为雷
初始化 函数

🚀4.显示棋盘
我们很容易利用for循环实现对棋盘的打印,为方便后续的体验以及游玩,我们也可以先打印序号,建立一个平面直角坐标系。

棋盘打印效果如下:

🚀5.布置雷
要想生成雷,我们先利用生成指定范围的随机数的道理生成两个介于1~9的数字,作为埋雷的坐标,并进行替换。
生成随机坐标,并将坐标位置替换为1。

注:进入while循环每设置一个雷,count减一,直到雷设置完毕跳出循环。
🍉 调用rand()需要srand()
🚀6.排查雷
输入坐标,可以设置输入坐标范围以确保坐标在棋盘范围内否则重新输入,判断棋盘范围内坐标是否重复输入,若未重复输入判断是否踩雷,.若踩雷”炸死“游戏结束,放入while循环,若雷没有排查完持续循环,若所有雷被排查出则排雷成功。
void CheckMine(char arr1[ROWS][COLS],char arr2[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int win = 0;
while (win = 1 && x = 1 && y <= col)
{
if (mine[x][y] != '*')
{
printf("输入坐标重复,请重新输入\n");
}
else if (board[x][y] == '1')
{
printf("很遗憾,你被炸死了\n");
break;
}
else
{
//不是雷,就统计x,y坐标周围有几个雷
int c = Display(mine, x, y);
board[x][y] = c + '0';
Show(board, ROW, COL);
win++;
}
}
else
{
printf("输入坐标错误,请重新输入\n");
}
}
if (win == ROW*COL-10)
{
printf("排雷成功\n");
Show(board, ROW, COL);
}
}
统计坐标的方法如下:
因为坐标内输入的是字符‘0’,所以统计出个坐标数‘1’之和减去‘0’及为周围雷数
int CheckMine(char arr1[ROWS][COLS], int x, int y)
{
return arr1[x + 1][y] + arr1[x - 1][y] + arr1[x][y + 1]
+ arr1[x][y - 1] + arr1[x + 1][y + 1] + arr1[x - 1][y - 1]
+ arr1[x + 1][y - 1] + arr1[x - 1][y + 1]-(8*'0');
}
游戏即可正常运行
三:总结与反思
此扫雷小游戏属于简化版,并不能做到像WINDOWS系统自带的扫雷游戏那样。代码也有更多提升的地方以上是本篇文章的全部内容了,如果这篇文章对你有些许帮助你的点赞,收藏,评论都是对我最大的支持与鼓励,另外文章的不足之处也希望大佬们能给我一点小小的建议,我会努力的检查并改进。感谢你的阅读。
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/1ce8c352d7.html
