C语言小游戏之扫雷
一.游戏介绍
看到这张图片,相信很多小伙伴都非常熟悉,很多小伙伴都玩过扫雷这个小游戏,扫雷是一款益智类游戏,在放松娱乐的同时可以锻炼各位小伙伴的智商。
游戏规则:如上图,玩家需要在不被炸死的前提下找出图中雷的位置,若能找出所有雷,则游戏胜利,若不幸踩到雷则被炸死。
注:先介绍程序实现的主要功能,后文会有完整代码
二.游戏步骤及实现的功能
(一) 游戏步骤
- 程序开始执行时玩家需要选择是否开始游戏,输入1则游戏开始,输入0则退出游戏
- show地图出现后玩家开始选择进行选择,输入1则开始选择区域,输入2则可以标记自己认为是雷的区域,输入3则可以取消原先被标记的区域
- 当所有非雷区域全部被排出来后则游戏胜利
//遍历show地图,以便判断最后的胜利
int Travel(char show[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
int win = 0;
for (i = 1; i <= row; i++)
{
for (j = 1; j <= col; j++)
{
if (show[i][j] == '*' || show[i][j] == '!')
{
win++;
}
}
}
return win;
}
以下为效果图:
(二)实现的功能
- 初始化雷盘
- 打印雷盘
- 随机布置雷
- 玩家开始排雷
- 防止玩家第一次被雷炸死.
- 统计所选位置周围八个位置中雷的个数
- 递归拓展已选位置周围的区域
- 标记雷及取消标记
1.初始化雷盘
初始化雷盘时需要构造两个二维数组,一个数组(mine数组)里面是存放雷的,用于实现各种功能,另一个数组(show数组)是给玩家操作时看的,看不到雷的具体位置。
由于需要统计每个位置周围八个区域中雷的个数,在统计最边缘的位置时为了利于功能的实现,在初始化雷盘时构建的二维数组mine数组的行和列比show数组多两行两列。
//初始化雷盘
//主函数中函数的调用
//Initboard(mine, ROWS, COLS,'0');
//Initboard(show, ROWS, COLS, '*');
void Initboard(char board[ROWS][COLS], int rows, int cols,char set)
{
int i = 0, j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
board[i][j] = set;
}
}
}
初始化雷盘时,mine数组全部初始化为字符‘0’,show数组全部初始化为字符‘*’。
2.打印雷盘
玩家需要通过打印出的show数组雷盘进行游戏,打印雷盘时将行号和列号全部打印出来有利于玩家进行操作
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0, j = 0;
//打印列号
for (i = 0; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d ", i)