c++ - 扫雷邻居数

标签 c++ minesweeper neighbours

我正在尝试复制 Minesweeper,但我遇到了计算邻居是地雷的问题。这似乎是一件很容易实现的事情,但出于某种原因,我并没有在任何地方都得到想要的结果。我有一个代表每个图 block 的一维整数数组。考虑到它可能具有可变的网格大小,我想要一种方法来分别获取瓷砖的每个邻居。这是我的代码的样子:

int num = 0;

if (i + 1 < 16 && graph[i + 1] == -1)
    num++;
if (i - 1 >= 0 && graph[i - 1] == -1)
    num++;
if (i + 3 < 16 && graph[i + 3] == -1)
    num++;
if (i - 3 >= 0 && graph[i - 3] == -1)
    num++;
if (i + 4 < 16 && graph[i + 4] == -1)
    num++;
if (i - 4 >= 0 && graph[i - 4] == -1)
    num++;
if (i + 5 < 16 && graph[i + 5] == -1)
    num++;
if (i - 5 >= 0 && graph[i - 5] == -1)
    num++;

return num;

而且对于最左边和最右边的图 block ,我没有得到我想要的结果。有时最下面和最上面的瓷砖也有问题。我的代码使用固定大小为 4x4(int[16]) 的网格(显然我称之为图 :))。

提前致谢。

最佳答案

您的条件不正确。如果玩家位于网格的右边缘,则 i-3 将位于网格的左侧。

要解决这个问题,您可以添加额外的检查以查看您是否处于优势地位。例如

if (i - 3 >= 0 && (i+1) % 4 > 0 && graph[i - 3] == -1)
    num++;

您需要对大多数其他 if 语句进行类似检查(+/- 4 除外)。

关于c++ - 扫雷邻居数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676206/

相关文章:

c++ - 管理磁盘上许多 GB 的数据,直接访问

c++ - 打印给定类型名称的模板

java - 在 PaintComponent() 内创建时,JTextField 出现在 2 个位置

java - vector 卷积 - 计算相邻元素的索引

用于在多维数组中查找相邻值的 C++ 数据结构

c++ - 读取文件并将其存储在 C++ 中的 protected 变量中

c++ - gdb - 防止在捕获/重新抛出情况下丢失回溯

java - 如何使用 JMenuItem 重置 JFrame(重启游戏)?

c++ - 扫雷,我怎么知道有多少个0挨着?

algorithm - 如何找到二维矩阵中的 Blob 数?