You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

libgdx开发中flood fill算法仅消除右侧同色块无递归是什么原因?

问题核心原因

你的代码缺少对blockSprites[x][y]是否为null的前置判断,导致递归过程中触发空指针异常,直接中断了整个递归流程。只有先执行的右侧递归分支能跑完,剩下的左、上、下分支还没来得及执行就因为异常终止,所以只会出现右侧同色方块被消除的情况。

原理说明

你可以对应这个场景理解:假设点击的是最左侧的同色块,代码会先递归处理右侧所有相邻同色格子,当递归到某个格子需要回溯检查左侧已经被置为null的已处理格子时,会直接调用blockSprites[x][y].getColor(),触发空指针异常,整个递归栈直接崩溃停止,因此你只能看到右侧的方块被消除。

修复后代码

private static void floodfill(int x,int y, Color color) {   
        if (x>=10 || y>=15 || x<0 || y<0) {
            System.out.println("sap");
            return;
        }
        // 新增空判断,避免访问已消除的格子触发空指针
        if (blockSprites[x][y] == null) {
            return;
        }
        if (!blockSprites[x][y].getColor().equals(color)) {
            System.out.println("sas");
            return;
        }
        blockSprites[x][y]=null;
        
        floodfill(x+1,y,color); //right
        floodfill(x-1,y,color); //left
        floodfill(x,y-1,color); //down
        floodfill(x,y+1,color); //up    
    }

可选优化建议

调用floodfill时的入参color,建议直接从点击的方块实例取blockSprites[点击X坐标][点击Y坐标].getColor()传入,避免Color引用意外变化导致颜色匹配失效。

内容的提问来源于stack exchange,提问作者JellySword

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:06:07