纪录自己,所以注释和解释相比较不够详细
首先分成三个文件来做(两个源文件和一个头文件)
Main文件 game文件 和头文件head
main文件是用来引用game文件中实现功能的函数以及游戏大纲,game文件实现各个函数的功能。头文件则用作为声明,可以把需要调用和定义的库和常量写在头文件当中,再用需要调用的文件引用头文件即可。
头文件中的定义
对头文件的引用
#include "(头文件名)",即可
Main文件也是这样。
Main文件中main为主函数,里面是游戏前界面的流程和进入
menu函数内容
game函数
头文件
以下皆是在 game文件中实现
elementary函数负责初始化两个数组,第一个arr数组初始为字符串0,让展示出去第二个数组show为9×9的棋盘,内容是 *
bomb函数实现布雷(注释部分是展示arr数组,只是方便当时做调试)
play为实现玩家输入坐标到扫雷中扫雷或注释雷以及返回数值判断是否踩雷或继续
接下来便是展示以及统计玩家是否扫雷胜利 show和judge
而扫雷中最重要的效果是展开雷以及统计雷展示
使用函数递归实现,考率到死循环,让被计算过的位置若是周边一圈没有雷便赋值为空格,使递归判断并且玩家看起来舒适。
效果:
函数实现 Count统计周围八格雷的个数,Arr实现递归
char Count(char arr[Rows][Cols], char show[Rows][Cols],int inp, int inp2)
{
return (arr[inp - 1][inp2 - 1] + arr[inp - 1][inp2] + arr[inp - 1][inp2 + 1] + arr[inp][inp2 - 1]
+ arr[inp][inp2 + 1] + arr[inp + 1][inp2 - 1] + arr[inp + 1][inp2] + arr[inp + 1][inp2 + 1])-(8*'0');
}
(这里加八倍百分零 需了解ascall码表)
Arr函数
void Arr(char arr[Rows][Cols], char show[Rows][Cols], int x, int y)
{
if (Count(arr, show, x, y) != 0 )
{
show[x][y] = Count(arr, show, x, y) + '0';
}
else if (Count(arr, show, x, y) == 0 && x >= 1 && x <= 9 && y >= 1 && y <= 9 && show[x][y] != ' ')
{
show[x][y] = ' ';
int i = 0;
int j = 0;
for (int i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
Arr(arr,show, i, j);
}
}
}
else
{
return ;
}
}