在数组上存储Piece对象 - java俄罗斯方块教程

时间:2011-03-15 10:15:02

标签: java arrays enums tetris

我刚接触Java,我找到了创建Java Tetris游戏的好教程。

我没有导师或导师帮我这个 - 我一直在寻找一个年龄:( 所以目前我自学java和PHP:)

无论如何,我找到http://zetcode.com/tutorials/javagamestutorial/tetris/

的网站

有人可以从教程中解释这种方法是如何工作的吗?

Tetrominoes shapeAt(int x, int y) { return board[(y * BoardWidth) + x]; }

我知道它会从Paint()方法中调用

for (int i = 0; i < BoardHeight; ++i) {
 for (int j = 0; j < BoardWidth; ++j) {
     Tetrominoes shape = shapeAt(j, BoardHeight - i - 1);
     if (shape != Tetrominoes.NoShape)
         drawSquare(g, 0 + j * squareWidth(),
                    boardTop + i * squareHeight(), shape);
 }
}

据我所知 - 它在电路板的每个方块上循环,并确定板[]阵列上是否存在形状(Enum)。

我只是需要有人向我解释这部分是如何描绘掉掉在木板底部的所有形状或形状的残留物?

如何在board []数组中记住所有正方形?

谢谢

1 个答案:

答案 0 :(得分:2)

简单地说,board数组是一个单维数组,可以记住每个方块上的形状。虽然它是单维的,但它的排列方式是第一行先行,然后是第二行,等等。所以在这样的3x5板上:

A B C
D E F
G H I
J K L
M N O

数组将board[0]包含A的形状,board[3]将包含D等。

重要的是要注意,它实际上并没有记住每个方块的整个形状 - 只是那里有形状。因此,当形状下降到底部时,每个单独的正方形都停留在板阵列中,即使它所表示的部分形状被移除的线擦除。删除一条线实际上只是将数组的第一部分“向下”移动以覆盖要移除的行,并清除顶行的元素(到Tetrominoes.NoShape)。