俄罗斯方块在Java中克隆,移动片段时越界?

时间:2018-08-30 12:29:49

标签: java indexoutofboundsexception tetris

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

0010
0010
0010
0010

现在,如果我将其移至左墙,则始终会有两个单位的长间隙,因为0不能移至主板阵列之外。允许1移到左侧墙而又不引起越界异常的最简单方法是什么?

2 个答案:

答案 0 :(得分:4)

使用您描述的方法,一种简单地避免获得IndexOutOfBoundsException的方法是将您的开发板扩展为18 x 24而不是10 x 24,然后编写不包含以下内容的其他代码:如果对象数组中有任何1离开网格的中间10个正方形,则可以让您向左/向右移动一个块。通过将此“填充”添加到网格中,可以避免出现异常,并且仍然应该能够实现。

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

顺便说一句,@ assylias很好。在开始实施某些事情之前,要有一个良好的设计/计划,这一点很重要,这样可以避免类似的颠簸。它带有经验,所以继续练习,您将掌握其中的窍门。

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

答案 1 :(得分:0)

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

您可能在每个棋子上都有一个固定的手柄,并且还会有一个X和Y偏离该棋子,以指示该棋子沿着网格向下移动的位置。

要停止棋子越界,请遍历移动棋子的4 * 4矩阵,对于设置为1的位,只需检查 如果其中任何一项检查失败,则确保X位置+ X偏移量> = 0和<= 9,Y位置> = 0和<= 19 那么您的棋子就会超出板卡阵列的限制,因此请停止将x或y更改为适当的值。

将棋子矩阵中设置的位的坐标与棋盘阵列进行转换,还可以检查棋子是否与棋盘中已有的瓷砖发生碰撞。

我应该想到,当一块旋转得很好时,您应该进行这些碰撞检查。