Я изучал этот учебник по тетрису и наткнулся на функцию, которая удаляет строки и опускает строки на один уровень. Я вроде понимаю, что происходит с этими функциями, но некоторые части меня смущают. Я постараюсь объяснить как можно лучше, но вот ссылка на урок, если он вам нужен: http://javilop.com/gamedev/tetris-tutorial-in-c-platform-independent-сфокусированная-в-игровой-логике-для-начинающих/
Для меня это выглядит как функция, которая заставляет массив начинаться с последнего номера строки:
void Board::DeleteLine (int pY)
{
// Moves all the upper lines one row down
for (int j = pY; j > 0; j--)
{
for (int i = 0; i < BOARD_WIDTH; i++)
{
mBoard[i][j] = mBoard[i][j-1];
}
}
}
Затем есть функция, которая вызывает у меня проблемы, которую я объясню:
void Board::DeletePossibleLines ()
{
for (int j = 0; j < 20; j++)
{
int i = 0;
while (i < 10)
{
if (mBoard[i][j] != 1) break;
i++;
}
if (i == 10) DeleteLine (j);
}
}
Если вы не знакомы, идея состоит в том, чтобы удалить строку, полностью состоящую из 1
. Но if (mBoard[i][j] != 1) break;
остановит цикл, если первая строка не будет 1
. Как цикл достигнет 1
, находящегося где-то в середине массива mBoard[][]
, если break
не позволит ему сразу сделать что-либо возможное?
Я что-то упустил здесь? Это моя интерпретация этого. Может быть, кто-то видит то, чего не вижу я?
Изменить:
Спасибо за ответы, ценю.
bool Board::IsLineFull(int j) const
. Итак, цикл будет содержать толькоif (IsLineFull(j)) { DeleteLine(j); }
- person Jarod42   schedule 14.08.2014