2016-04-18 13 views
0

Ich schreibe gerade ein Tetris in C++ und ich bin auf der letzten Stufe, ich muss eine Zeile löschen, wenn es voll ist. Sobald ein Stück fällt, wird es in einem booleschen Array gespeichert Gitter [20] [10]. Zum Beispiel ich heraus, welche Zeile voll ist (oder wahre), wenn es nenne ich eine Methode deleteRow, wo n eine Anzahl von Zeilen ist:Tetris verschieben 2D-Array

void Grid::deleteRow(int n) 
{ 
    for (j = 0; j < WIDTH; j++) 
    { 
    grid[n][j] = false; 
    } 
} 

Sobald die Zeile gelöscht wird Ich nenne eine Methode moveRowDown:

void Grid::moveRowDown() 
{ 
    for (i = 0; i < HEIGHT; i++) 
    { 
    for (j = 0; j < WIDTH; j++) 
    { 
     grid[i+1][j]=grid[i][j]; 
    } 
    } 
} 

So funktioniert diese Methode nicht, und alle Teile verschwinden. Ich weiß, dass mir die Logik fehlt. Danke für die Hilfe im Voraus!

Antwort

1

Sie verschwinden, weil Sie erste leere Zeile 2. kopieren und dann auf 3. und usw. Sie benötigen eine erste Schleife in Grid :: moveRowDown neu zu schreiben() aus dem Boden eines Glases zu arbeiten:

for (i = HEIGHT-2; i>=0; i--) 
+0

Es funktioniert! Ich verstehe die Logik jetzt! Vielen Dank für Ihre Zeit! Vielen Dank! –

+1

Betrachten Sie auch einen ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) von Zeilen anstelle eines 2D-Arrays. Vektor macht praktisch die ganze Arbeit für Sie. – user4581301