- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用洪水填充来清理扫雷游戏中的开放区域。我做了一个简单的洪水填充函数,但我不断收到堆栈溢出错误代码
public void revealEmpty(int givenIndex){
if(buttons.get(givenIndex).isEnabled())
open(givenIndex);
if(gm.surroundingbombs(givenIndex)==0){
if(gridsize>givenIndex+gridwidth)
revealEmpty(givenIndex+gridwidth);
if(gridsize>givenIndex+gridwidth+1)
revealEmpty(givenIndex+gridwidth+1);
if(gridsize>givenIndex+gridwidth-1)
revealEmpty(givenIndex+gridwidth-1);
if(gridsize<givenIndex-gridwidth)
revealEmpty(givenIndex-gridwidth);
if(gridsize<givenIndex-gridwidth+1)
revealEmpty(givenIndex-gridwidth+1);
if(gridsize<givenIndex-gridwidth-1)
revealEmpty(givenIndex-gridwidth-1);
if(gm.rightEdge(givenIndex,gridwidth)){//checks if the button pressed is on the right edge
revealEmpty(givenIndex+1);
}
if(gm.leftEdge(givenIndex,gridwidth)){//checks if the button pressed ison the left edge
revealEmpty(givenIndex-1);
}
}
else{
return;
}
}
这是用于“打开”网格中的单元格的代码
public void open(int Bindex){
Font f = new Font("Arial", Font.BOLD, 26);//font for the buttons
Font f2 = new Font("Arial", Font.BOLD, 15);//font for the move tracker
if(gm.surroundingbombs(Bindex)!=0){
buttons.get(Bindex).setBorder(BorderFactory.createBevelBorder(1, Color.LIGHT_GRAY, Color.DARK_GRAY));
buttons.get(Bindex).setIcon(null);
if(gm.surroundingbombs(Bindex)!=0)
buttons.get(Bindex).setText(Integer.toString(gm.surroundingbombs(Bindex)));
if(small)
buttons.get(Bindex).setFont(f2);
else
buttons.get(Bindex).setFont(f);
buttons.get(Bindex).setBorderPainted(true);
buttons.get(Bindex).setEnabled(false);
buttons.get(Bindex).setContentAreaFilled(true);
buttons.get(Bindex).setBackground(Color.LIGHT_GRAY);
}
else
buttons.get(Bindex).setBorder(BorderFactory.createBevelBorder(1, Color.LIGHT_GRAY, Color.DARK_GRAY));
buttons.get(Bindex).setIcon(null);
buttons.get(Bindex).setBorderPainted(true);
buttons.get(Bindex).setEnabled(false);
buttons.get(Bindex).setContentAreaFilled(true);
buttons.get(Bindex).setBackground(Color.LIGHT_GRAY);
}
我对它的工作原理有一些了解,特别是我跟踪访问过的单元格的方式不起作用,但我对此一无所知。
最佳答案
这里的问题是您检查所有周围的 JButton
,无论它们是否已经显示。要修复递归调用,请尝试更改if
语句以包围整个代码。像这样:
public void revealEmpty(int givenIndex){
if(buttons.get(givenIndex).isEnabled()) { //If statement opens here
open(givenIndex);
if (gm.surroundingbombs(givenIndex) == 0) {
if (gridsize > givenIndex + gridwidth)
revealEmpty(givenIndex + gridwidth);
if (gridsize > givenIndex + gridwidth + 1)
revealEmpty(givenIndex + gridwidth + 1);
if (gridsize > givenIndex + gridwidth - 1)
revealEmpty(givenIndex + gridwidth - 1);
if (gridsize < givenIndex - gridwidth)
revealEmpty(givenIndex - gridwidth);
if (gridsize < givenIndex - gridwidth + 1)
revealEmpty(givenIndex - gridwidth + 1);
if (gridsize < givenIndex - gridwidth - 1)
revealEmpty(givenIndex - gridwidth - 1);
if (gm.rightEdge(givenIndex, gridwidth)) {//checks if the button pressed is on the right edge
revealEmpty(givenIndex + 1);
}
if (gm.leftEdge(givenIndex, gridwidth)) {//checks if the button pressed ison the left edge
revealEmpty(givenIndex - 1);
}
} else {
return;
}
} else { //And ends here
return;
}
}
根据您提供的信息,我不能 100% 确定这是否会解决您的问题,因此请检查并告诉我它是否有效。
关于java - Minesweeper flood-fill 不断收到堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456702/
我几天前刚刚学习 Java,并开始编写扫雷游戏。问题是,当我尝试级联周围的 block 并显示 block (空白或数字取决于相邻炸弹的数量)时,我的递归失败并给出堆栈溢出错误。我的代码如下: pub
题目地址:https://leetcode.com/problems/minesweeper/description/ 题目描述 Let's play the minesweeper game (
为了练习,我正在遵循扫雷教程,但在将每个方格周围的炸弹数量相加时,它不会计算右侧的炸弹,而且我不完全确定问题是什么。我尝试过重新启动、在多个编译器中打开它、移动它,但什么也没有。我查了又查,没有发现任
我想用鼠标左键单击打开图 block 并用鼠标右键单击标记它们。我阅读并尝试了很多,但不知何故无法使其正常工作。 private class Tile extends StackPane {
我开始学习Python,我只是从一个简单的例子开始。问题是计算表格中每个位置附近的地雷数。考虑下面的输入文件: 4 4 *... .... .*.. .... 3 5 **... ..... .*..
我必须用 C 重新创建一个简单版本的游戏“雷区”,但我无法计算棋盘上某个位置附近有多少地雷。我的一段代码遍及整个阵列(板)搜索地雷。当它找到地雷时,它应该在地雷周围的所有地点加起来+1。我的代码只适用
我目前正在研究一个扫雷程序,我需要一些帮助来揭示其中的邻居。目前我的程序可以做的事情如下 1 是被选中的按钮,线条是我需要的填写。目前选中的按钮周围的按钮是我可以填写的内容。 如有必要,我可以发布代码
我正在尝试使用 Minesweeper 作为示例应用程序来学习逆向工程。我找到了 MSDN article在一个简单的 WinDbg 命令上,它显示了所有的地雷,但它很旧,没有详细解释,也不是我想要的
我正在编写 MineSweeper 并在 GridLayout 上使用 JButton。行数和列数是由用户输入的,因此设置固定大小可能会导致一些问题。 如何在不设置面板固定大小的情况下删除按钮之间的空
到目前为止,我得到的是一个 .in 文件,它将创建 100 个数组,后面是棋盘上有多少个“地雷”,然后每个“地雷”有 2 个数字,代表它们将被放置在数组上的位置。这是针对我的初学者 C 类(class
我正在尝试使用洪水填充来清理扫雷游戏中的开放区域。我做了一个简单的洪水填充函数,但我不断收到堆栈溢出错误代码 public void revealEmpty(int givenIndex){
我是 Java 初学者,最终我想为我正在为高级项目制作的机器人创建代码。我计划让机器人按照指定的模式搭建多米诺骨牌,然后将其推倒。我首先需要编写一个程序,允许我选择要放置在网格上的多米诺骨牌。然后我计
我正在做 codefight 的挑战:扫雷。 描述: 我的代码如下: def minesweeper(matrix): for x in range(len(matrix)):
我试图在 UVa ( http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sho
您好,我正在尝试解决编程挑战 PC/UVa ID:110102/10189,称为 C 语言的扫雷器。示例输入和输出: input|output ------------ 4 4 | *... |*1
我是一名优秀的程序员,十分优秀!