21xrx.com
2024-09-20 06:32:50 Friday
登录
文章检索 我的文章 写文章
扫雷游戏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++编程,不妨尝试着自己实现一下吧!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复