Java: Frage zu Arrays
2006-07-14 05:10
Wolf
Moin!
Ich habe ein Tetris geschrieben. Es funktioniert auch super - bis auf ein Problem:
Wenn der aktuelle fallende Stein auf die liegenden Steine auftrifft, spinnt es manchmal. Der Fehler tritt sehr selten auf.
Der fallende Stein ist im Wesentlichen ein java.lang.Boolean[4][4]. Das Feld beinhaltet ein java.lang.Boolean[y][x] lyingStones, das die liegenden Steine und die leeren Felder darstellt; die Abmessungen des Feldes sind einstellbar.
Wenn nun folgender Code ausgeführt wird…
Selten heißt nach (bei meinen Tests) mindestens 50 neuen fallenden Steinen. Es ist bisher bei jedem Stein, in allen möglichen Spalten und in diversen Zeilen passiert. Hier war es ein S und einer der Bricks war schon hinzugefügt.
Nun meine Frage: Ich füge Brick per Brick des fallenden Steines den liegenden Steinen hinzu. Vom einen zum anderen Hinzufügen ist plötzlich eine ganze Spalte voll mit liegenden Steinen! Was läuft da schief?
Wer mehr Code haben will, fragt bitte :)
Danke im Voraus!
Edit for clarity:
Der Code sieht insgesamt so aus:
Ich habe ein Tetris geschrieben. Es funktioniert auch super - bis auf ein Problem:
Wenn der aktuelle fallende Stein auf die liegenden Steine auftrifft, spinnt es manchmal. Der Fehler tritt sehr selten auf.
Der fallende Stein ist im Wesentlichen ein java.lang.Boolean[4][4]. Das Feld beinhaltet ein java.lang.Boolean[y][x] lyingStones, das die liegenden Steine und die leeren Felder darstellt; die Abmessungen des Feldes sind einstellbar.
Wenn nun folgender Code ausgeführt wird…
lyingStones[yV][xV]=Boolean.TRUE;
…wobei yV und xV Positionen der einzelnen 'Bricks' vom fallenden Stein auf dem Feld entsprechen, passiert selten und unnachvollziehbar Folgendes:
Before adding 11, 21 for 2, 1
0123456789ABCDEF
····················0
····················1
····················2
····················3
····················4
····················5
····················6
····················7
····················8
····················9
····················10
····················11
····················12
····················13
····················14
····················15
····················16
····················17
····················18
····················19
····················20
···········OO·······21
··········#O········22
··········#·········23
········#·###·······24
········#####·······25
········#####·······26
········#######·····27
········#######·###·28
········#######·###·29
········###########·30
··##····############31
··####··############32
··####··############33
·###################34
·###################35
·########·##########36
·###################37
·###################38
·###################39
After adding 11, 21 for 2, 1
0123456789ABCDEF
···········#········0
···········#········1
···········#········2
···········#········3
···········#········4
···········#········5
···········#········6
···········#········7
···········#········8
···········#········9
···········#········10
···········#········11
···········#········12
···········#········13
···········#········14
···········#········15
···········#········16
···········#········17
···········#········18
···········#········19
···········#········20
···········#O·······21
··········#O········22
··········#·········23
········#·###·······24
········#####·······25
········#####·······26
········#######·····27
········#######·###·28
········#######·###·29
········###########·30
··##····############31
··####··############32
··####··############33
·###################34
·###################35
·########·##########36
·###################37
·###################38
·###################39
Selten heißt nach (bei meinen Tests) mindestens 50 neuen fallenden Steinen. Es ist bisher bei jedem Stein, in allen möglichen Spalten und in diversen Zeilen passiert. Hier war es ein S und einer der Bricks war schon hinzugefügt.
Nun meine Frage: Ich füge Brick per Brick des fallenden Steines den liegenden Steinen hinzu. Vom einen zum anderen Hinzufügen ist plötzlich eine ganze Spalte voll mit liegenden Steinen! Was läuft da schief?
Wer mehr Code haben will, fragt bitte :)
Danke im Voraus!
Edit for clarity:
Der Code sieht insgesamt so aus:
/**
* The active model can't move down anymore, so it becomes part of the lying stones
*/
private void setLyingStones() {
System.out.println("Before checking\n"+field.toString());
Boolean[][] lyingStones = field.getLyingStones();
EntityModel e = field.getActiveModel();
// Go through each of the active model's bricks
for (int x = 0; x < e.getSideSize(); x++) {
for (int y = 0; y < e.getSideSize(); y++) {
// When there's a brick at this coordinate..
if(e.getAt(x,y).booleanValue()){
int xV=x+field.getActiveModelBaseX();
int yV=y+field.getActiveModelBaseY();
System.out.println("Before adding "+
xV+", "+yV+" for "+x+", "+y+"\n"+field.toString());
lyingStones[yV][xV]=Boolean.TRUE;
System.out.println("After adding "+
xV+", "+yV+" for "+x+", "+y+"\n"+field.toString());
}
}
}
numberOfSpawns++;
}
Edit2: Der Rückgabewert der Methode ist irgendwie beim Korrigieren und C&P untergegangen [img]http://www.fb18.de/gfx/12.gif[/img]