В настоящее время я пишу тетрис на C ++, и я на последней стадии, мне нужно удалить строку, когда она заполнится. Когда кусок падает, он сохраняется в логическом массиве Сетка [20] [10]. Например, я проверяю, какая строка заполнена (или правда), если это я вызываю метод deleteRow, где N это номер строки:
void Grid::deleteRow(int n)
{
for (j = 0; j < WIDTH; j++)
{
grid[n][j] = false;
}
}
После удаления строки я вызываю метод moveRowDown:
void Grid::moveRowDown()
{
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
grid[i+1][j]=grid[i][j];
}
}
}
Так что этот метод не работает, и все части исчезают. Я знаю, что мне не хватает логики. Спасибо за помощь в продвижении!
Они исчезают, потому что вы копируете 1-ую пустую строку во 2-ю, затем в 3-ю и т. Д.
Вам нужно переписать свой первый цикл в Grid :: moveRowDown (), чтобы он работал снизу стакана:
for (i = HEIGHT-2; i>=0; i--)
Других решений пока нет …