这是一个演示图像:
有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()