21xrx.com
2024-12-22 21:42:39 Sunday
登录
文章检索 我的文章 写文章
C++扫雷游戏代码(数组实现)
2023-07-09 11:35:52 深夜i     --     --
C++ 扫雷 游戏 代码 数组实现

扫雷是一款经典的游戏,在我们的日常生活中非常流行,不仅可以解除压力,而且可以锻炼我们的思维能力。如果你想练习编码技巧,那么也可以尝试写一款扫雷游戏。下面是一份使用C++语言实现的扫雷游戏代码。

在开始编写这个游戏之前,我们需要理解一些基本的规则。扫雷游戏的核心是一个矩阵,其中每个方格可能表示一个地雷、一个数字或者是一个空格。当你点击一个方格时,如果它是地雷,你就会输掉游戏;如果它是空格,你就可以继续点击周围的方格,直到你点击到一个数字,数字会告诉你它周围的地雷数量。如果你成功地找出了所有的地雷,那么你就赢得了游戏。

为了实现这个游戏,我们需要使用一个二维数组,其中每个元素表示一个方格的状态。下面是一个示例数组:

int board[10][10];

在这个数组中,如果一个元素的值为-1,表示它是一个地雷;如果它的值为0,表示它是一个空格;如果它的值为1-8,表示它周围的地雷数量。当玩家点击一个方格时,我们需要检查它的状态,如果它是一个地雷,游戏结束;否则我们需要修改它的状态,如果它是一个空格,我们就需要递归调用一个函数,检查它周围的方格。

下面是一个完整的C++扫雷游戏代码:


#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

const int BOARD_SIZE = 10;

const int NUM_MINES = 10;

int board[BOARD_SIZE][BOARD_SIZE];

void initBoard() {

 // 初始化矩阵

 for (int i = 0; i < BOARD_SIZE; i++) {

  for (int j = 0; j < BOARD_SIZE; j++) {

   board[i][j] = 0;

  }

 }

 // 赋予矩阵一定数量的地雷

 int num_mines = 0;

 while (num_mines < NUM_MINES) {

  int x = rand() % BOARD_SIZE;

  int y = rand() % BOARD_SIZE;

  if (board[x][y] != -1) {

   board[x][y] = -1;

   num_mines++;

  }

 }

 // 填充数字

 for (int i = 0; i < BOARD_SIZE; i++) {

  for (int j = 0; j < BOARD_SIZE; j++) {

   if (board[i][j] == -1)

    continue;

   

   int count = 0;

   for (int k = i - 1; k <= i + 1; k++) {

    if (k < 0 || k >= BOARD_SIZE)

     continue;

    

    for (int l = j - 1; l <= j + 1; l++) {

     if (l < 0 || l >= BOARD_SIZE)

      continue;

     

     if (board[k][l] == -1) {

      count++;

     }

    }

   }

   board[i][j] = count;

  }

 }

}

void printBoard() {

 for (int i = 0; i < BOARD_SIZE; i++) {

  for (int j = 0; j < BOARD_SIZE; j++) {

   if (board[i][j] == -1) {

    cout << "* ";

   } else {

    cout << board[i][j] << " ";

   }

  }

  cout << endl;

 }

}

bool isWin() {

 for (int i = 0; i < BOARD_SIZE; i++) {

  for (int j = 0; j < BOARD_SIZE; j++) {

   if (board[i][j] == 0)

    return false;

   

  }

 }

 return true;

}

void play() {

 while (!isWin()) {

  int x, y;

  cout << "请输入你要选择的位置坐标:";

  cin >> x >> y;

  if (board[x][y] == -1)

   cout << "你输了!" << endl;

   return;

  

  if (board[x][y] == 0) {

   board[x][y] = -2;

   for (int i = x - 1; i <= x + 1; i++) {

    if (i < 0 || i >= BOARD_SIZE)

     continue;

    

    for (int j = y - 1; j <= y + 1; j++) {

     if (j < 0 || j >= BOARD_SIZE)

      continue;

     

     if (board[i][j] == 0) {

      board[i][j] = -2;

     } else if (board[i][j] > 0) {

      board[i][j] = -board[i][j];

     }

    }

   }

  } else if (board[x][y] > 0) {

   board[x][y] = -board[x][y];

  }

  printBoard();

 }

 cout << "你赢了!" << endl;

}

int main() {

 srand(time(NULL)); // 设置随机数种子

 initBoard(); // 初始化矩阵

 printBoard(); // 打印矩阵

 play(); // 开始游戏

 return 0;

}

这份代码使用了三个函数,`initBoard()`用于初始化矩阵,`printBoard()`用于打印当前矩阵状态,`play()`用于开始游戏。在`play()`中,我们使用一个循环来不停地询问用户选择的方格位置,当用户输掉游戏或者赢得游戏时,循环会终止。

最后,我们需要注意的是,这份代码只是C++扫雷游戏的一个基本实现,如果你想让它变得更加完整和充满挑战,那么你需要增加更多的功能,例如计时、到达不同难度级别时改变地雷的个数等等。但是,如果你刚刚接触扫雷游戏编程,这份代码应该可以为你提供一个良好的起点。

  
  

评论区

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