Хранение объектов Piece в массиве - Java Tetris Tutorial - PullRequest
0 голосов
/ 15 марта 2011

Я просто новичок в Java, и я нашел этот хороший учебник по созданию Java Tetris Game.

У меня нет наставника или наставника, который бы помог мне с этим - я искал одного целую вечность :( так что в настоящее время я самостоятельно изучаю 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 [].

Мне просто нужно, чтобы кто-то объяснил мне, как эта часть рисует все формы или остатки фигур, которые были сброшены на дно доски?

А как все поля запоминаются в массиве board []?

Спасибо

1 Ответ

2 голосов
/ 15 марта 2011

Проще говоря, массив board - это одномерный массив, который запоминает, какая форма на каждом квадрате.Несмотря на то, что он одномерный, он устроен так, что первый ряд идет первым, затем второй ряд и т. Д. Итак, на доске 3х5, например:

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

Массив будет таким, что board[0]содержать форму в A, board[3] будет содержать D и т. д.

Важно отметить, что на самом деле не запоминается целая форма для каждого квадрата - только то, что там было вида формы,Таким образом, по мере того как фигуры опускаются на дно, каждый отдельный квадрат остается в массиве досок, даже если часть представленной фигуры стирается удаленной линией.Удаление строки на самом деле просто включает смещение первой части массива «вниз», чтобы перезаписать удаляемую строку, и очистку элементов верхнего ряда (до Tetrominoes.NoShape).

...