我正在用Java开发俄罗斯方块游戏,当他们碰到另一个已经着陆的棋子时,使当前棋子停止有点麻烦。每个Tetromino形状都有单独的类别。当currentPiece下降时,将Y坐标最低且与电流相同的X值的形状设置为currentPiece的停止点。问题在于,棋子会经过与currentPiece中心相邻的块,并且为所有可能的形状和旋转编码很繁琐

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

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

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

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


“中间”块被视为原点。我正在考虑制作2D布尔数组,以了解是否有人在使用某个位置。

最佳答案

也许建立一个2D视图来表示已经放置的部分。
例如。 (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已被占用,因此块无法在那里移动。 (我认为)此逻辑应适用于任何放置板上的任何形状的块。

09-17 06:58