代码链接
扫雷游戏/扫雷游戏 · 阿帆/test.c - 码云 - 开源中国 (gitee.com)
思路
1在地图上布置雷
2排查雷
1)如果是雷,就被炸死
2)如果不是雷,就显示这个坐标周围雷的个数
3我把所有非雷的位置找到,游戏结束。
目标
1建立一个9*9的数组来存放信息
2布置雷,是来放1,如果不是来放0
3文件设计
1)test.c完成对扫雷游戏的测试
2)game.c扫雷游戏函数的实现
3)game.h扫雷游戏函数的声明
设计
1打印一个简单的菜单
void menu()
{
printf("************************\n");
printf("**** 1. play ****\n");
printf("**** 0. exit ****\n");
printf("************************\n");
}
2初始化棋盘
InitBoard(mine, ROWS, COLS, '0');//'0'
InitBoard(show, ROWS, COLS, '*');//'*'
void InitBoard(char arr[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
//行
for (i = 0; i < rows; i++)
{
int j = 0;
for (j = 0; j < cols; j++)
{
arr[i][j] = set;
}
}
}
3放雷
*因为显示非雷九宫格区域内雷的个数和该区域是否为雷,会产生歧义,希望设置两个数组。一个存放雷的信息,一个存放排查出的雷的信息。
SetMine(mine, ROW, COL);
void SetMine(char arr[ROWS][COLS], int row, int col)
{
//布置10个雷
int count = EASY_COUNT;
while (count)
{
//布置雷
int x = rand()%row+1;//1~9
int y = rand()%col+1;//1~9
//布置成功一个雷,count--
if (arr[x][y] == '0')
{
arr[x][y] = '1';
count--;
}
}
}
4排查雷
*注意在mine数组里挖,在show数组里显示
*要判断玩家输入坐标是否在数组范围内
while (win < row * col - EASY_COUNT)
{
printf("请输入要排查的坐标:");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '1')
{
printf("很遗憾,你被炸死了\n");
DisplayBoard(mine, ROW, COL);
break;
}
else
{
//不是雷,就统计该坐标周围有几个雷
int n = GetMineCount(mine, x, y);
show[x][y] = n + '0';
DisplayBoard(show, ROW, COL);
win++;
}
}
else
{
printf("坐标非法,请重新输入\n");
}
}
5游戏成功条件
if (win == row * col - EASY_COUNT)
{
printf("恭喜你,排雷成功\n");
DisplayBoard(mine, ROW, COL);
}
6游戏难度变化
#define EASY_COUNT 10