FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Java: Frage zu Arrays

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…
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]

Re: Java: Frage zu Arrays 2006-07-14 10:15
Wolf
Okay, hat sich erledigt. Das Problem war, dass zuviele Klassen auf der gleichen Instanz des Bewegungsprozessors&#153; rumgewurschtelt haben. Dann kann sowas natürlich mal vorkommen.

Re: Java: Frage zu Arrays 2006-07-14 12:19
Wolf
Ach so, das Ganze heißt Tetrismus, ist in Java mit Hilfe von LWJGL programmiert. Texturen, Sound, Konfigurationsdialoge und Netzwerkfähigkeit stehen noch aus.

Hier ein Screenshot (bisschen verkackt gespielt):

[img]http://img145.imageshack.us/img145/3355/tetrismused1.th.jpg[/img]

Wenn es vorzeigbarer ist, kümmer ich mich vielleicht auch um so Firlefanz wie Webstart… Mal sehen.

Re: Java: Frage zu Arrays 2006-07-14 14:07
Fred
Ah, die Konkurrenz schläft nicht. Sehr schön [img]http://www.fb18.de/gfx/23.gif[/img]

Re: Java: Frage zu Arrays 2006-07-14 14:34
Wolf
Konkurrenz [img]http://www.fb18.de/gfx/7.gif[/img] Sicher nicht, das Ding ist gerade mal spielbar und die Framerate ist lausig, wenn man Tasten gedrückt hält [img]http://www.fb18.de/gfx/21.gif[/img]

Gib mir 2 Monate und es sieht zumindest gut aus.. Content ist irgendwie das Schwierigste imho.

Ob ich den Rest wirklich noch mache, da bin ich mir nicht ganz sicher.

Ich hab auch Bock, ein Beat 'em Up oder einen Top-Down-Shooter zu machen. Oder einen Editor für 3D-Adventures im Stil von Space Quest I-III (mit Schreiben für Handlungen, Rumlaufen via Tastatur oder Maus und animierter Umwelt), das wär mein Favorite. Ich hab aber keinen Plan, wie das Letztere umzusetzen ist; einfach draufloshacken ist da zumindest nicht drin.

Wenn hier jemand Bock auf die Programmierung solcher Spiele in Java + LWJGL hat, möge er sich bitte melden [img]http://www.fb18.de/gfx/23.gif[/img] Zumindest ein Top-Down-Shooter sollte machbar sein.