本帖最后由 X836696023 于 2020-12-9 15:03 编辑 
如何获取玩家脚下"岛屿"(与大地以AIR隔绝开的空中方块(不知道该怎么表达了233~))的所有Block实例?
如下图所示,玩家站在那堆STONE上获取这7个STONE方块(不包含AIR)。

如何获取玩家脚下"岛屿"(与大地以AIR隔绝开的空中方块(不知道该怎么表达了233~))的所有Block实例?
如下图所示,玩家站在那堆STONE上获取这7个STONE方块(不包含AIR)。
递归
获取脚下方块——方块的相邻非空气方块——(方块的相邻非空气方块)的 方块的相邻非空气方块——...
注意控制递归层数,否则堆栈溢出
获取脚下方块——方块的相邻非空气方块——(方块的相邻非空气方块)的 方块的相邻非空气方块——...
注意控制递归层数,否则堆栈溢出
 本帖最后由 X836696023 于 2020-12-10 01:35 编辑 
我使用了递归,但是出现刷屏报错。
实际上我测试的时候就1个方块,都能造成栈溢出。
不知道我哪里写错了。


复制代码
暮色胡萝卜 发表于 2020-12-9 15:35
递归
获取脚下方块——方块的相邻非空气方块——(方块的相邻非空气方块)的 方块的相邻非空气方块——... ...
我使用了递归,但是出现刷屏报错。
实际上我测试的时候就1个方块,都能造成栈溢出。
不知道我哪里写错了。


-     fun checkBlock(original: Block, prev: BlockFace? = null): Map<Location, Block> {
 
-         val map = mutableMapOf<Location, Block>()
 
-         for (blockFace in BlockFace.values()) {
 
-             if (blockFace == BlockFace.SELF) continue
 
-             if (prev != null && blockFace == prev.oppositeFace) continue
 
-             val block: Block = original.location.block.getRelative(blockFace)
 
-             if (block.type != Material.AIR) {
 
-                 map[block.location] = block
 
-                 map.putAll(checkBlock(block, blockFace))
 
-             }
 
-         }
 
-         return map
 
- }
 本帖最后由 暮色胡萝卜 于 2020-12-10 01:41 编辑 
你似乎没排除已有方块的情况
方块A传方块B,方块B回传方块A
X836696023 发表于 2020-12-10 01:31
我使用了递归,但是出现刷屏报错。
实际上我测试的时候就1个方块,都能造成栈溢出。
不知道我哪里写错了。 ...
你似乎没排除已有方块的情况
方块A传方块B,方块B回传方块A
X836696023 发表于 2020-12-10 10:57
应该怎样正确排除。
我上面代码尝试用排除对面方块,但仍然失败。
调用树中判断map中是否已包含location