gpt4 book ai didi

java - Bubble Shooter 游戏中的 Flood-Fill 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:56 25 4
gpt4 key购买 nike

我在玩泡泡射击游戏。当我用相同颜色的射击泡泡击中泡泡时,我必须删除泡泡,然后我尝试使用洪水填充算法搜索我应该删除哪个泡泡。当射手泡泡碰到另一个泡泡时,我有一个错误:

Exception in thread "Thread-1" java.lang.StackOverflowError

我对 Flood-Fill 算法的实现:

public void floodFill(int disX, int disY){
//up
if(tab[disX][disY - 1] != null){
if (tab[disX][disY - 1].c == tab[disX][disY].c){

floodFill(disX, disY - 1);
tab[disX][disY - 1] = null;
}
}
//right
if(tab[disX + 1][disY] != null){
if (tab[disX + 1][disY].c == tab[disX][disY].c){
floodFill(disX + 1, disY);
tab[disX + 1][disY] = null;
}
}
//left
if(tab[disX - 1][disY] != null){
if (tab[disX - 1][disY].c == tab[disX][disY].c){
floodFill(disX - 1, disY);
tab[disX - 1][disY] = null;
}
}
//down
if(tab[disX][disY +1] != null){
if (tab[disX][disY +1].c == tab[disX][disY].c){
floodFill(disX, disY + 1);
tab[disX][disY + 1] = null;
}
}
}

气泡上下左右自碰。

你知道我做错了什么吗?

最佳答案

因为您仅在 递归调用该方法之后才将 tab 中的位置标记为 null,这意味着它永远不会到达它实际标记的阶段一个地方为空。它会匹配其中一个条件,然后再次调用自己,然后它会匹配其中一个条件,并再次调用自己。它永远不会达到任何可以阻止它的地步。

最好将当前位置tabc的值作为参数传递给该方法,这样就可以标记为null 您继续搜索之前。例如:

public void floodFill(int disX, int disY, int currentColor){
//up
if(tab[disX][disY - 1] != null){
if (tab[disX][disY - 1].c == currentColor ){
tab[disX][disY - 1] = null;
floodFill(disX, disY - 1, currentColor);
}
}
...
}

关于java - Bubble Shooter 游戏中的 Flood-Fill 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com