Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich bin gerade dabei Minesweeper nachzuprogrammieren und hänge an einer sehr unschönen Stelle meines Codes fest. Um die Anzahl der benachbarten Bomben eines Feldes herauszufinden muss ich ja bekanntlich seine 8 Nachbarn überprüfen. Das funktioniert so lange, wie sich das Feld, dessen umliegenden Nachbarn ich prüfen will, nicht in einer der vier Ecken oder am Rand des Spielfeldes befindet.
Da ich die Felder in einem 2 Dimensionalen Array gespeichert habe, bekomme ich natürlich immer eine NullpointerException, sobald ich versuche auf die Nachbarn eines Eck/Randstückes zuzugreifen.
Um dies zu verhindern müsste ich allerlei if-Abfragen einfügen, was eine Menge "unschönen" Code produziert.
Vor kurzem gab es hier mal einen Thread, indem der TS versuchte ein Schachspiel versuchte zu implementieren und ganz ähnliche Probleme hatte, nur habe ich Schwierigkeiten, die dort vorhandenen Lösungen auf mein Problem zu übertragen.
Wäre euch sehr dankbar für jeglichen Ansatz/ Anstoß oder jegliche Idee .
Erstmal vorneweg: Die Lösung dort diente nur sekundär dem Zweck, "unschöne" if-Abfragen zu vermeiden, sondern vielmehr dem Zweck ... if-Abfragen zu vermeiden (weil sie Zeit kosten). Bei etwas so wenig zeitkritischen wie Minesweeper ist sowas wie
Code:
boolean isValid(int x, int y)
{
return
x >= 0 && x < sizeX-1 &&
y >= 0 && y < sizeY-1;
}
ja nicht so das Problem.
Aber wenn doch... solltest du genauer sagen, wo die Schwierigkeiten liegen. Die Grundidee war ja, ein Spielbrett anzulegen, das (für Minesweeper) 2 Felder höher und breiter ist, als das eigentliche Brett, und das eigentliche Brett dort in die Mitte zu legen...
Die Grundidee war ja, ein Spielbrett anzulegen, das (für Minesweeper) 2 Felder höher und breiter ist, als das eigentliche Brett, und das eigentliche Brett dort in die Mitte zu legen...
Müsste ich für Minesweeper das Spielfeld nicht eigentlich nur 1 Feld höher und breiter machen ?
Ich greife doch immer nur auf die unmittelbaren Nachbarn eines Feldes zu.
Ich habe da jetzt eine Vorstellung wie ich das mit dem zentrierten Spielfeld und dem zusätzlichen Rand auf mein Beispiel übertrage, werde mich bei weiteren Problemen nochmal melden.
Ich dachte erst du meintest oben, unten, rechts, links jeweils +2...
___
Ich habe mein 2D-Array jetzt um 2(^^) vergrößert und den Ring außenrum dann einfach mit null-Verweisen ( <-- sagt man das so ? ) gefüllt. Hat dann doch so geklappt, wie im besagten "Schachbrett-Beispiel"