21xrx.com
2024-12-22 22:43:47 Sunday
登录
文章检索 我的文章 写文章
易懂扫雷C++代码分享
2023-06-22 16:47:26 深夜i     --     --
扫雷 C++代码 简单易懂 分享 编程学习

扫雷是一款经典的单机游戏,在电脑程序设计方面也是一个不错的练手项目。今天,我想分享一下一个易懂的扫雷C++代码,供大家学习参考。

首先,我们需要定义一些需要用到的常量和变量:


const int maxn = 105;

const int dx[] = 0;

const int dy[] = -1;

char mine[maxn][maxn], ans[maxn][maxn];

int n, m, cnt;

其中,`maxn` 表示地图的大小,`dx` 和 `dy` 是用于遍历周围格子的数组,`mine` 存储地图,`ans` 存储玩家的答案,`n` 和 `m` 分别表示地图的行数和列数,`cnt` 表示玩家已经猜测到的雷的数量。

接下来是主函数部分:


int main() {

  cin >> n >> m; // 输入地图的行数和列数

  for (int i = 1; i <= n; ++i) {

    for (int j = 1; j <= m; ++j) {

      cin >> mine[i][j]; // 输入地图

      ans[i][j] = '*'; // 初始化玩家的答案

    }

  }

  while (true) {

    cout << "请输入要翻开的格子:";

    int x, y;

    cin >> x >> y;

    if (mine[x][y] == '*')

      cout << "你踩雷了 else {

      cout << "地图如下:" << endl;

      cnt++;

      dfs(x, y);

      print(); // 输出当前的答案

      if (cnt == n * m)

        cout << "你赢了

    }

  }

  return 0;

}

这里的 `while` 循环表示每一轮玩家可以翻开一个格子,根据玩家翻开的格子是否是雷来判断游戏是否结束。如果是雷,游戏结束;如果不是雷,就更新玩家的答案并继续游戏。当玩家猜测到所有没有雷的格子时,游戏结束。

其中,`dfs` 和 `print` 函数分别用于更新玩家的答案和输出当前的答案。这两个函数的实现如下:


void dfs(int x, int y) {

  ans[x][y] = mine[x][y];

  if (mine[x][y] == '0') {

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

      int nx = x + dx[i];

      int ny = y + dy[i];

      if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && ans[nx][ny] == '*') {

        dfs(nx, ny);

      }

    }

  }

}

void print() {

  for (int i = 1; i <= n; ++i) {

    for (int j = 1; j <= m; ++j) {

      cout << ans[i][j];

    }

    cout << endl;

  }

}

其中,`dfs` 函数采用的是深度优先搜索算法,用于翻开周围没有雷的格子。`print` 函数用于输出当前玩家的答案。

以上就是一个简单的扫雷实现,希望能够帮助大家学习C++编程。

  
  

评论区

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