0

我刚接触 Java,我发现了这个创建 Java 俄罗斯方块游戏的好教程。

我没有导师或导师来帮助我 - 我一直在寻找一个 :( 所以目前我正在自学 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);
 }
}

据我了解 - 它在棋盘的每个方格处循环并确定是否有一个形状(枚举)存储在 board[] 数组中。

我只需要有人向我解释这部分是如何绘制所有形状的,或者是形状的剩余部分,已经掉到了板子的底部?

以及如何在 board[] 数组中记住所有方块?

谢谢

4

1 回答 1

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)。

于 2011-03-15T10:20:21.340 回答