Hallo zusammen,
ich habe jetzt mein erstes selbst programmiertes Spiel so ziemlich fertig. Ein paar Bugs sind noch vorhanden, die werden noch ausgemerzt.
Bin mit der Optik schon sehr zufrieden, aber an der Performance hängt's irgendwie noch ein wenig...
Ich vermute mal es liegt an meinem Aufdeckalgorithmus.
Habt ihr eine Idee, wie ich diese unschöne Passage ändern könnte:
(Methode fragt ihre benachbarten Buttons/Felder, ob eine Mine dort liegt und ermittelt so wieviele Nachbarminen der Button hat (Zustand9 entspricht einer Mine und Zustand12 einer gesetzen Flagge auf einer Mine)). Die ganzen Exception-Fresser finde ich doch ziemlich unschön und würde sie gerne vermeiden.
Hab's auch schon statt der "try-catch-Methode" mit einer if-Abfrage vor jeder Zeile versucht. Ist aber auch nicht performanter...
Ich weiß nicht, ob ihr noch mehr Code braucht. Einfach melden.
Aufdeck-Algorithmus:
Hier zwecks Interesse noch die lauffähige .jar:
MinesweeperBETA.jar - Dropbox-Link
Über Lob und verbesserungsvorschläge bin ich immer sehr dankbar!
ich habe jetzt mein erstes selbst programmiertes Spiel so ziemlich fertig. Ein paar Bugs sind noch vorhanden, die werden noch ausgemerzt.
Bin mit der Optik schon sehr zufrieden, aber an der Performance hängt's irgendwie noch ein wenig...
Habt ihr eine Idee, wie ich diese unschöne Passage ändern könnte:
(Methode fragt ihre benachbarten Buttons/Felder, ob eine Mine dort liegt und ermittelt so wieviele Nachbarminen der Button hat (Zustand9 entspricht einer Mine und Zustand12 einer gesetzen Flagge auf einer Mine)). Die ganzen Exception-Fresser finde ich doch ziemlich unschön und würde sie gerne vermeiden.
Hab's auch schon statt der "try-catch-Methode" mit einer if-Abfrage vor jeder Zeile versucht. Ist aber auch nicht performanter...
Ich weiß nicht, ob ihr noch mehr Code braucht. Einfach melden.
Aufdeck-Algorithmus:
Java:
public void minenSuche(JButtonZustand [] [] grid) {
int anzahlMinen = 0;
try {
if ( grid[x-1][y].getZustand() == 9 || grid[x-1][y].getZustand() == 12) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x-1][y-1].getZustand() == 9 || grid[x-1][y-1].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x][y-1].getZustand() == 9 || grid[x][y-1].getZustand() == 12) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y-1].getZustand() == 9 || grid[x+1][y-1].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y].getZustand() == 9 || grid[x+1][y].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y+1].getZustand() == 9 || grid[x+1][y+1].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x][y+1].getZustand() == 9 || grid[x][y+1].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x-1][y+1].getZustand() == 9 || grid[x-1][y+1].getZustand() == 12 ) {
anzahlMinen++;
}
} catch (ArrayIndexOutOfBoundsException e) {}
Java:
public void rundOeffnen(JButtonZustand [] [] grid) {
try {
if ( grid[x-1][y].getZustand() == 10 || grid[x-1][y].getZustand() == 9 ) {
grid[x-1][y].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x-1][y-1].getZustand() == 10 || grid[x-1][y-1].getZustand() == 9 ) {
grid[x-1][y-1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x][y-1].getZustand() == 10 || grid[x][y-1].getZustand() == 9 ) {
grid[x][y-1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y-1].getZustand() == 10 || grid[x+1][y-1].getZustand() == 9 ) {
grid[x+1][y-1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y].getZustand() == 10 || grid[x+1][y].getZustand() == 9 ) {
grid[x+1][y].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x+1][y+1].getZustand() == 10 || grid[x+1][y+1].getZustand() == 9 ) {
grid[x+1][y+1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x][y+1].getZustand() == 10 || grid[x][y+1].getZustand() == 9 ) {
grid[x][y+1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
try {
if ( grid[x-1][y+1].getZustand() == 10 || grid[x-1][y+1].getZustand() == 9 ) {
grid[x-1][y+1].doClick();
}
} catch (ArrayIndexOutOfBoundsException e) {}
}
Hier zwecks Interesse noch die lauffähige .jar:
MinesweeperBETA.jar - Dropbox-Link
Über Lob und verbesserungsvorschläge bin ich immer sehr dankbar!