A
abcde
Gast
Hallo,
ich versuche gerade Tetris zu programmieren. Beim drehen der Steine tritt der Fehler auf, dass nur ein teil der Felder tatsächlich gedreht wird.
Mein Code zum drehen der Felder:
Beim ausführen wird folgende Ausgabe produziert:
0600 // Ursprünglicher Stein
0600
0660
0000
0000 // Gedrehter Stein sollte eigentlich so aussehen: 0000
0660 // 0666
0660 // 0600
0000 // 0000
0300 // Ursprünglicher Stein
0330
0030
0000
0000 // Gedrehter Stein sollte eigentlich so aussehen: 0000
0030 // 0033
0330 // 0330
0000 // 0000
0600 // Ursprünglicher Stein
0600
0660
0000
0000 // Gedrehter Stein Linksdrehung funktioniert
0060
6660
0000
Mein gedanklicher Ansatz:
Zeile Spalte Linksgedreht Rechtsgedreht
0 / 0 3 / 0 0 / 3
1 / 0 3 / 1 0 / 2
2 / 0 3 / 2 0 / 1
3 / 0 3 / 3 0 / 0
Linksdrehung
alte Spalte und neue Zeile müssen 3 ergeben. Alte Zeile entspricht neuer Spalte ( Funktioniert)
Rechtsdrehung
Alte Spalte entspricht neuer Zeile. Alte Zeile und neue Spalte müssen 3 ergeben.
Sieht jemand den Fehler?
ich versuche gerade Tetris zu programmieren. Beim drehen der Steine tritt der Fehler auf, dass nur ein teil der Felder tatsächlich gedreht wird.
Mein Code zum drehen der Felder:
Java:
/**
* Das den Spielstein enthaltende Feld wird um 90 ° gedreht Der Methode muss
* mitgelteilt werden, ob nach rechts oder links gedreht werden soll.
*
* @param direction
* true heißt nach rechts drehen, false heißt nach links drehen
*/
public void rotate(boolean direction) {
GeneralStone rotatedStone = this.copy();
printStoneField();
for (int column = 0; column < 4; column++) {
int newx = 0;
if (!direction)// Linksdrehung
newx = 3 - column;
for (int row = 0; row < 4; row++) {
if (direction) // Rechtsdrehung
{
int newColumn = 3 - row;
// Der neue y Wert entspricht dem alten x Wert
rotatedStone.stoneField[column][newColumn] = stoneField[row][column];
} else
// Linksdrehung
// Der neue x Wert entspricht dem alten y Wert
rotatedStone.stoneField[newx][row] = stoneField[row][column];
}
}
if (rotatedStone.isTheSpaceForThisStoneEmpty())
stoneField = rotatedStone.stoneField;
printStoneField();
}
Beim ausführen wird folgende Ausgabe produziert:
0600 // Ursprünglicher Stein
0600
0660
0000
0000 // Gedrehter Stein sollte eigentlich so aussehen: 0000
0660 // 0666
0660 // 0600
0000 // 0000
0300 // Ursprünglicher Stein
0330
0030
0000
0000 // Gedrehter Stein sollte eigentlich so aussehen: 0000
0030 // 0033
0330 // 0330
0000 // 0000
0600 // Ursprünglicher Stein
0600
0660
0000
0000 // Gedrehter Stein Linksdrehung funktioniert
0060
6660
0000
Mein gedanklicher Ansatz:
Zeile Spalte Linksgedreht Rechtsgedreht
0 / 0 3 / 0 0 / 3
1 / 0 3 / 1 0 / 2
2 / 0 3 / 2 0 / 1
3 / 0 3 / 3 0 / 0
Linksdrehung
alte Spalte und neue Zeile müssen 3 ergeben. Alte Zeile entspricht neuer Spalte ( Funktioniert)
Rechtsdrehung
Alte Spalte entspricht neuer Zeile. Alte Zeile und neue Spalte müssen 3 ergeben.
Sieht jemand den Fehler?