1,介绍
如图,扫雷一开始会给我们一块充满方块的方形棋盘,里面埋了些雷。
玩家可以通过点击鼠标左键掀开棋盘的格子。若如果这个格子中没有雷,这个格子被掀开后会如图显示周围八格得地雷之和。
如图,便说明这个格子周围存在一个雷。
若这个格子中有雷,便会爆炸,判定玩家输掉游戏。
2,基本流程
1.创建棋盘
2.初始化棋盘
3.打印棋盘
4.让用户掀格子,或标记
5.判断输赢
3,实现
1.创建棋盘
创建两个二维数组
一个用来存放雷的位置
另一个用来展示棋盘上用户掀开后的数字及用户的标记
这里我考虑到以后需要计算一格中周围八格的地雷数量之和,而边界的一圈周围没有八格,若想避免越界就需要牺牲时间进行判断。所以我选择让棋盘数组的行列=棋盘真实行列+2然后在初始化时将雷盘四周行列初始化为无雷状态,并且在设置雷的时候避开四周行列,一次来规避届时的越界判断需求。
#define RROW 9
#define RCOL 9
#define ROW RROW +2
#define COL RCOL +2
char ShowBoard[ROW][COL] = { 0 };
char MineBoard[ROW][COL] = { 0 };
2.初始化棋盘
void InitBoard(char Board[ROW][COL],int row,int col,char inition)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
Board[i][j] = inition;
}
}
}
DisplayBoard(ShowBoard, RROW, RCOL);
DisplayBoard(MineBoard, RROW, RCOL);
3,生成雷
定义雷的数量,方便后期调试修改
#define MineNum 10
//雷的数量
4,展示棋盘
void DisplayBoard(char Board[ROW][COL], int row, int col)
{
int i, j;
printf("**********扫雷**********\n");
for (j = 0; j <= col; j++)
{
printf(" %d ",j);
}
printf("\n");
for (i = 1; i < row; i++)
{
printf("\n\n %d ",i);
for (j = 1; j < col; j++)
{
printf(" %c ", Board[i][j]);
}
}
printf("\n");
}
DisplayBoard(ShowBoard, RROW, RCOL);
DisplayBoard(MineBoard, RROW, RCOL);
5,玩家操作部分
普通扫雷中分为左右键让玩家选择标记或掀棋盘,这里用让玩家输入数字的方式进行代替。
printf("请选择您是要标记还是要排雷\n1.排雷\n2.标记或取消标记雷的位置\n");
int input;
scanf("%d", &input);
switch (input)
{
case 1:
//掀开棋盘
break;
case 2:
//标记
break;
}
1)标记
当玩家标记满所有雷且无雷处未被标记时,游戏胜利。
为了便于在雷被标记后统计正确的被标记次数ÿ