功能
使⽤控制台实现经典的扫雷游戏
游戏可以通过菜单实现继续玩或者退出游戏
扫雷的棋盘是9*9的格子
默认随机布置10个雷
可以排查雷
如果位置不是雷,就显⽰周围有⼏个雷
如果位置是雷,就炸死游戏结束
把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束
分析
打印菜单
新建文件封装函数便于使用
void menu()
{
printf("**********************\n");
printf("****** 1.start *****\n");
printf("****** 0.exit *****\n");
printf("**********************\n");
}
设计棋盘
定义量
便于将9*9改为其他规格
#define heng 9
#define zong 9
#define henghang heng+2
#define zonglie zong+2
二维数组
因为需要在9*9的棋盘上布置雷的信息和排查雷,想到的就是创建⼀个9*9的数组来存放信息。
但不方便对边框部分进行特殊查雷,故需要用11*11数组
建立两个二维数组,一个用于放置雷,一个用来展示给玩家,在查找周围雷数量时因为雷定义为'1'避免在放置雷的数组中周围有一个雷将此数组'0'换为一导致后续计算雷的数量有歧义,故直接将周围雷数量变为字符型替换展示数组
//初始化数组
char b[henghang][zonglie] = { 0 };
char c[henghang][zonglie] = { 0 };
build_dilei(b, henghang, zonglie, '0');
build_dilei(c, henghang, zonglie, '*');
void build_dilei(char d[henghang][zonglie], int a, int b, char e)
{
int f, g;
for (f = 0; f < b; f++)
{
for (g = 0; g < a; g++)
{
d[g][f] = e;
}
}
}
放置地雷
//在主函数处将种子改变为时间戳,便于随机值的生成
srand((unsigned int)time(NULL));
void mailei(char d[henghang][zonglie], int a, int b)
{
int lei, x, y;
for (lei = 10; lei;)
{
x = rand() % 9 + 1;//%9得到0-9 再+1得到1-10
y = rand() % 9 + 1;
if (d[x][y] != '1')
{
d[x][y] = '1';
lei--;
}
}
}
后续补全