【问题标题】:Discovering a region with no mines on minesweeper在扫雷艇上发现一个没有地雷的地区
【发布时间】:2017-04-03 17:14:51
【问题描述】:

我是这个页面的新手,希望能得到一些帮助,基本上我在 Java 上做一个扫雷游戏,但它有一个功能问题:发现没有地雷和没有数字的区域,就像在 windows 上的游戏中一样,当您单击一个位置并出现所有单元格时。我试过 make recursive 但我不能,有帮助吗?

对不起代码,原文是西班牙语,但我尝试制作一个伪代码: Matriz = 多维数组(扫雷) min 和 max 返回索引 min 和 max 进行迭代(8 个 sorroud 单元格)

private void discoverWitheCell(int x, int y) {
    if(matriz[x][y].getdiscovered() == false){
        matriz[x][y].setDiscovered(true);
    }
    else{
        if(matriz[x][y].getNumberOfMinesArround() == 0){
            for(int i=min(x);i<max(x);i++)
                for(int j=min(y);j<max(y);j++)
                    discoverWhiteCell(i,j);
        }
    }
}

【问题讨论】:

  • 递归应该通过触发它的 8 个邻居来工作。也许您可以分享您的代码,以便我们进一步提供帮助?
  • 完成了,真的很抱歉我的英语不好:c

标签: java recursion minesweeper


【解决方案1】:

这里的代码不多,但我觉得你在倒退。

抱歉,我不是 Java 演讲者,所以我猜测其中的一些语法。请注意,这可能会超出范围 - 就我个人而言,我会在地图周围添加一层空单元格,这样我就无需担心边界检查。

private void ClickSquare(int x, int y)
{
   // Did the user click an already exposed square?  If so, ignore
   if (matriz[x][y].getDiscovered()) return;
   matriz[x][y].SetDiscovered(true);
   if (matriz[x][y].getNumberOfMinesAround != 0) return;
   // If empty, click all the neighbors
   for (int xloop = x - 1; xloop <= x + 1; xloop++)
       for (int yloop = y - 1; yloop <= y + 1; yloop++)
           ClickSquare(xloop, yloop);
}

我相信你发现的测试搞砸了,你的版本似乎能够进入无限(直到堆栈溢出)递归,就好像邻居也是零一样,它会回到原来的单元格。我的版本通过仅处理尚未处理的单元格来停止此递归。

【讨论】:

  • 你怎么知道它被处理了?
  • @Farengar 我不明白你的问题。我是说我会将打开的辅助单元格视为被点击。单元格打开代码不应该关心谁调用它。
  • 好吧好吧,我试试你的c版:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多