本帖最后由 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