相信大家都有玩过扫雷游戏吧,今天我们来用C语言程序来实现这样一个小游戏!
目录
一、游戏规则
在给定的棋盘中,随机生成雷,玩家随机点击一个格子,格子中显示数字,该数字就是周围雷的个数的总数。玩家需要通过此方法排查出雷,直到所有雷排查完毕或者踩雷,游戏结束!
在这个程序中,我们暂定棋盘为9×9宫格,随机生成10个雷(后期如果想改变可以直接改)。
布置雷时,我们可以用‘ 0 ’来表示这个位置没有雷,用‘ 1 ’来表示这个位置是有雷的(用“1”来表示雷是为了更好的统计雷的个数)
二、基本思路
1.棋盘的设置:此游戏应该有两个棋盘:一个是玩家可见的,一个是玩家不可见的。雷应该放在不可见的棋盘上。
2.棋盘的初始化:可见的棋盘用“ * ”初始化打印,而不可见的棋盘用“ 0 ”初始化。
3.雷的布置:随机生成一个数,将该位置给成“ 1 ”。
4.统计雷的个数:计算周围元素并相加
5.进行排雷:直到碰到雷或者排完雷为止,游戏结束!
三、代码实现
1.菜单目录和玩家进入游戏提示
main函数中,因为游戏不只可以玩一次,玩家可以控制玩多少次。这里我们设置 “ 1 ” 为进入游戏,而“ 0 ”为退出游戏。因此这里应该运用到do-while语句和switch-case语句。
void menu()//菜单实现
{
printf("***********************\n");
printf("***** 1.play ******\n");
printf("***** 0.exit ******\n");
printf("***********************\n");
}
int main() {
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();//游戏菜单
printf("请输入:");
scanf("%d", &input);//玩家输入是否进行游戏
switch (input)
{
case 1:
game();//输入“1”则进入游戏
break;
case 0:
printf("游戏结束!");//输入“0”则退出游戏
break;
default:
printf("输入有误!请重新输入.");//输入1 0之外的提示输入错误
break;
}
} while (input);
2. 编写游戏
这里我们用game()函数来封装。game()函数中应该包含:棋盘的初始化、雷的布置、排雷判断、打印棋盘。
void game()
{
char mine[ROWS][COLS] = { 0 };//定义二维数组隐藏棋盘
char show[ROWS][COLS] = { 0 };//定义二维数组隐藏棋盘
Initboard(mine, ROWS, COLS,'0');//初始化隐藏棋盘
Initboard(show, ROWS, COLS, '*');//初始化可视棋盘
Setmine(mine, ROW, COL);//布置雷
Displayboard(show, ROW, COL);//打印可视棋盘
Findmine(mine, show, ROW, COL);//排查雷,判断,最后出结果
}
3.初始化棋盘
定义char set可以不用创建两个函数来初始化两个棋盘,只需要传入 “ * ” ,“ 0 ”。
void Initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
int i;
int j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
4.布置雷
定义两个随机数,并将其坐标变成 “ 1 ” 。
void Setmine(char mine[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
while (count)
{