前言
本篇博客主要介绍如何使用C语言实现扫雷游戏。
一、游戏规则
在一张ROW行COL列的地图上存在MINE_COUNT个地雷。玩家输入坐标翻开格子,若没有踩雷,则计算此格子周围8个格子的地雷总数,并将此格子的星号用数字代替。若数字为0,则继续递归计算与此格子相邻的4个格子周围的地雷情况(即自动展开)。若踩雷,则游戏结束。当地图上的数字与星号之和等于格子总数时,判定为玩家胜利。宏定义如下:
#define ROW 9
#define COL 9
#define MINE_COUNT 10
二、游戏流程
1.初始化地图
为了简化逻辑,初始化两张地图,一张是展示给玩家的地图,一张是地雷的分布地图。初始化两个字符型数组,第一个数组中的元素全部赋为“*”,第二个数组中的元素全部赋为“0”。给定一个随机数种子进行“布雷”,使用循环语句将MINE_COUNT个雷随机放在第二个数组中,用“1”表示。若某个位置已经有雷了,则跳过,产生下一个随机位置。代码如下:
void init(char gameMap[ROW][COL], char mineMap[ROW][COL]){
srand((unsigned int)time(0));
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
gameMap[i][j] = '*';
}
}
for (int i = 0; i < ROW; i++){
for (int j = 0; j < COL; j++){
mineMap[i][j] = '0';
}
}
int n = 0;
while (n < MINE_COUNT){
int row = rand() % ROW;
int col = rand() % COL;
if (mineMap[row][col] != '1'){
mineMap[row][col] = '1';
n++;
}
else{
continue;
}
}
}
地图初始化完毕之后,定义一个openedBlocksCount整型变量,赋值为0,用于计数已经翻开