这是一个演示图像:



有8x8块,其中有一些随机的红色块。当用户选择它们时,它们上方的所有块都会掉落。我想找到一种以较小的复杂度进行模拟的最佳方法。

for (int i = 0; i < 8; i++)
  for (int j = 0; j < 8; j++) {
     if (currentBlock == blank) {
        while((currentBlock.pos.x - 8) >= 0) {
           aboveBlock = (currentBlock.pos.x - 8);
           replace(currentBlock,aboveBlock);
        }
     }


但是我认为这根本不是一个完美的算法。谁能帮我?请。非常感谢你。

最佳答案

如果可以保留所有已移除块的位置,则可以避免遍历所有运动场以查找需要放置的位置。

另外,您可以实现一个递归方法,该方法在较高位置调用自身,直到到达顶部为止。

//Called on an empty block
Drop(int x, int y) {
    if (y > 0) {
        aboveBlock = (currentBlock.pos.x - 8)
        replace(currentBlock,aboveBlock);
        Drop(x,y-1);
    }
}


只需在玩家移动清除的最底端位置调用Drop()

07-24 15:45