实现思路:
1.定义两个字符型数组
mine 用来存放电脑随机布的雷,show 用来向玩家展示游戏的界面。
2.布置雷
用rand()随机产生合法的坐标,需要注意的是:例如 rand()%10它产生的随机数是0-9而不是0-10。
3.保证第一步 不会被炸死
这里我采用指针的方法,在布雷的时候提前设置指针,在第一次遇到雷,用指针改变它。
4.排查雷,若坐标周围没雷则实现展开
这个目标我认为是最难的,一开始一点头绪都没有,再看过很多人的博客之后,才明白这里需要用到递归的思想。
布雷和保证第一次不被炸死代码
void setMines(char mine[ROW][COL], int row, int col,int MINES,int* x_p,int* y_p)
{
while (MINES>0)
{
int x = rand() % (row - 2) + 1;
int y = rand() % (col - 2) + 1;
if (mine[x][y] == '0')
{
mine[x][y] = '1';
MINES--;
}
}
int i = 0;
int j = 0;
for (i = 1; i < row - 1; i++)
{
for (j = 1; j < col - 1; j++)
{
if (mine[i][j] == '0')
{
*x_p = i;
*y_p = j;
break;
}
}
}
}
if (times == 80)
{
mine[x][y] = '0';
mine[*x_p][*y_p] = '1';
}
若坐标周围没雷则实现展开代码
void openBoard(char mine[ROW][COL], char show[ROW][COL], int x, int y)
{
if (mineCount(mine, x, y) == '0')
{
show[x][y] = '0';
int i = 0;
int j = 0;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (show[i][j] == '*')
openBoard(mine, show