21xrx.com
2025-06-26 16:13:54 Thursday
文章检索 我的文章 写文章
扫雷游戏C++代码数组实现
2023-07-05 01:35:29 深夜i     --     --
扫雷游戏 C++代码 数组实现

扫雷游戏是一种非常经典的游戏,也是C++编程学习过程中非常好的练手项目。本文将介绍如何使用数组来实现一个简单的扫雷游戏。

1. 布局棋盘

在扫雷游戏中,一般都是以矩形的形式来布局棋盘。我们可以使用二维数组来表示棋盘,每个元素代表一个方格,其中数字0表示方格未被翻开,数字1表示方格已翻开,数字2表示方格被标记为雷。

const int ROW = 10;
const int COL = 10;
int board[ROW][COL] = {0};

上面的代码定义了一个10x10的棋盘,并初始化为0。

2. 随机生成雷

扫雷游戏中最重要的一步就是随机生成雷。我们可以使用rand()函数来生成随机数,然后根据一定的比例来控制生成雷的数量。

const int MINES = 10;
int mineCount = 0;
srand(time(NULL)); // 初始化随机数生成器
while (mineCount < MINES)
{
  int row = rand() % ROW;
  int col = rand() % COL;
  if (board[row][col] == 0)
  {
    board[row][col] = -1// -1表示这个方格是雷
    mineCount++;
  }
}

上面的代码会在10x10的棋盘上随机生成10个雷。

3. 计算每个方格周围的雷数

生成雷之后,我们需要计算每个方格周围的雷数。如果一个方格不是雷,则它的值应该表示周围有多少个雷。

for (int i = 0; i < ROW; i++)
{
  for (int j = 0; j < COL; j++)
  {
    if (board[i][j] != -1// 如果不是雷
    {
      int count = 0;
      for (int r = -1; r <= 1; r++)
      {
        for (int c = -1; c <= 1; c++)
        {
          if (i + r >= 0 && i + r < ROW && j + c >= 0 && j + c < COL && board[i+r][j+c] == -1)
          {
            count++;
          }
        }
      }
      board[i][j] = count;
    }
  }
}

上面的代码会遍历整个棋盘,如果一个方格不是雷,则遍历它周围的8个方格,统计有多少个方格是雷,最后把这个数字赋值给这个方格。

4. 游戏主循环

游戏主循环中,我们可以使用两个嵌套的循环来遍历整个棋盘,然后根据玩家的输入来进行相应的操作。

bool gameOver = false;
while (!gameOver)
{
  // 打印棋盘
  printBoard(board, ROW, COL);
  // 玩家输入
  int x, y, choice;
  printf("Enter row and column: ");
  scanf("%d %d", &x, &y);
  printf("1. open 2. flag 3. unflag\n");
  scanf("%d", &choice);
  // 根据玩家的选择进行相应的操作
  if (choice == 1) // 翻开方格
  {
    if (board[x][y] == -1) // 触雷
    {
      printf("Game over!\n");
      board[x][y] = -2; // 标记为已触雷
      gameOver = true;
    }
    else
    {
      openSquare(board, ROW, COL, x, y); // 翻开相邻的方格
      if (isWinner(board, ROW, COL, MINES)) // 判断是否胜利
      {
        printf("You win!\n");
        gameOver = true;
      }
    }
  }
  else if (choice == 2) // 标记为雷
  {
    board[x][y] = 2;
  }
  else if (choice == 3) // 取消标记
  {
    board[x][y] = 0;
  }
}

上面的代码中,printBoard()函数用于打印棋盘,openSquare()函数用于翻开周围的方格,isWinner()函数用于判断是否胜利。

5. 总结

以上就是使用数组来实现一个简单的扫雷游戏的全部过程。如果你想深入学习C++编程,不妨尝试着自己实现一下吧!

  
  

评论区