无法在我的俄罗斯方块游戏(Java swing)中停止游戏

时间:2013-05-23 01:19:09

标签: java swing awt tetris

我正在使用Java制作一个俄罗斯方块游戏,当我们击中另一个已经落地的棋子时,我现在有点麻烦。我为每个tetromino形状都有单独的类。当currentPiece下降时,具有最低Y坐标和与当前电流相同的X值的形状被设置为currentPiece的停止点。问题是这件作品穿过了与currentPiece中心相邻的街区,为所有可能的形状和旋转编码是很繁琐的

有更好的方法吗? 基本上,我的问题是,如何处理俄罗斯方块的界限?

链接到我的java文件:http://goo.gl/Ms8Mj (原谅混乱)

每个块由一个值表表示,对于L形状,它是:

{0,0},{1,0},{0,1},{0,2}

“中间”区块被视为原点。我正在考虑制作一个2D布尔数组,如果一个位置被占用。

3 个答案:

答案 0 :(得分:4)

也许建立一个代表已经放置的碎片的二维视图。 例如。 (o代表空白点,x代表放置的片段)

|ooooo|
|oooox|
|ooxxx|
|xxxxx|

看看你的作品及其当前位置。模拟将其移动到需要去的位置,然后检查是否有任何x / y坐标重叠。如果是这样,那就无法移动到那里。

例如。如果你有一块(由y表示)向下移动

4|ooooo|
3|yyyox|
2|ooxxx|
1|xxxxx|
  12345

模拟yyy向下移动一个点。然后它占据(1,2),(2,2)和(3,2)。检查你的表示 - 3,2被占用,因此块不能移动到那里。这个逻辑应该(我认为)适用于任何放置板上的任何形状件。

答案 1 :(得分:2)

将您的行为逻辑与您的观点逻辑分开。

如果您将每个俄罗斯方块片段视为行为逻辑中的四个块,那么进行碰撞检测变得相当简单。没有部分可以检测到,因为块不能占用X和X + 1之间的某个空间。它总是一个或另一个。然而,一旦你检测到X + 1没有被占用并且该部分将继续下降,只需添加一个动画就可以使出现从一个空间移动到下一个空间动画完成的同时,逻辑指示作品已经下降了1。

答案 2 :(得分:0)

是的,知道图形停止位置的最佳方法是制作空盒和满箱的X射线(2-d布尔数组)。
但与此同时 - 您必须知道要检查的图形中的哪些块。如果您要将图形向下移动 - 您必须只检查图中的LOWER块。通过放入单独的类别 - 具有唯一水平值的块,并从那里 - 确定哪些具有最低垂直值来做到这一点。 对于直观表示,请检查this