Java中的俄罗斯方块克隆,移动一块时出界?

问题描述 投票:1回答:2

我正在尝试写一个俄罗斯方块克隆。我的电路板是一个10x20的整数数组,其中0表示没有瓷砖,1-7表示特定颜色的瓷砖。它不断被翻译成图形解释。我的形状是4x4整数数组。我刚刚意识到,虽然4x4的所有形状使得一些事情变得更容易,但是当左右移动一块时也会产生问题。假设我们得到了我的形状:

0010
0010
0010
0010

现在,如果我将它移动到左墙,则总会有两个单位长的间隙,因为0不能移动到主板阵列之外。允许1s移动到左墙而不会导致越界异常的最简单方法是什么?

java indexoutofboundsexception tetris
2个回答
4
投票

使用你描述的方法,简单地避免获得IndexOutOfBoundsException的一种方法是将你的板扩展为18 x 24而不是10 x 24,然后写入额外的代码,如果有任何1的话,不会让你左/右移动一个块在对象数组中,离开网格的中间10个方格。通过将这个“填充”添加到网格中,可以避免异常,并且仍然可以实现。

我希望这种方法对你有意义。如果不是,我可以提供更多伪代码驱动的答案,但我希望你能得到这个想法。 (如果您有任何疑问,请发表评论。)

BTW,@ asylias非常好。在开始实施之前有一个好的设计/计划是很重要的,以避免像这样的道路颠簸。它具有经验,所以继续练习,你会得到它的立场。

注意:正如尼克在评论中指出的那样,另一种方法是在移动任何阵列之前简单地检查是否有1离开网格。这当然是可能的(并且可以说是更优雅/简单的解决方案),尽管可能有点难以做到。


0
投票

您需要一种检测与边界和现有碎片碰撞的方法。

你可能会在每件上都有一个固定的手柄,你也会有一个X和Y offest,表示它沿着网格向下移动时的位置。

要停止一个移出界限的棋子,循环移动棋子的4 * 4矩阵,对于设置为1的位,只需检查以确保X位置+ X偏移> = 0且<= 9且Y位置> = 0且<= 19如果这些检查中的任何一个失败,那么您的工件将移动到板阵列的限制范围之外,因此请根据需要停止更改为x或y offest。

通过板块阵列转换块矩阵中设置位的坐标,还可以检查并确定您的块与块中已有的块相撞。

当一块旋转时我应该进行这些碰撞检查。

© www.soinside.com 2019 - 2024. All rights reserved.