![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Gast
Beiträge: n/a
|
Hallo Leute,
ich bin zwar kein absoluter Javaanfänger aber dies ist mein erster Post in einem Programmiererforum. Ich komm also gleich zum Punkt: Im Rahmen einer Programmieraufgabe an der Uni, sollen wir ein Spiel schreiben. 4Gewinnt als Konsolenanwendung. Das Programm läuft einwandfrei. Unser Professor legt aber großen Wert auf Eleganz des Quellcodes, daher meine Frage. Wie kann ich dieses Snippet eleganter schreiben? Code:
// Prüfen ob es eine Reihe von 4 gleichen Scheiben gibt, nach links unten
if (pn + 3 < dasFeld[pn].length - 1 && pm + 3 <= dasFeld.length) {
if (dasFeld[pn][pm].equals(pfarbe) && dasFeld[pn+1][pm+1].equals(pfarbe)&& dasFeld[pn+2][pm+2].equals(pfarbe)&& dasFeld[pn+3][pm+3].equals(pfarbe)) {
return 1;
}
}
Olli |
|
|
|
Nach oben #2 |
|
Benutzer
Registriert seit: 15.11.2005
Beiträge: 75
|
Eleganz ist immer Geschmackssache. Ich würde auf jeden Fall versuchen, die Konstante "4" (und das gesamte Wissen darum, dass es um 4 in einer Reihe geht), in eine Konstante auszulagern, um später mit geringem Aufwand auch ein "5 gewinnt" oder gar ein "Benutzer gibt ein, wieviel gewinnt" realisieren zu können.
Mir persönlich würde es auch besser gefallen, wenn die Verkettung von gleichartigen Anweisungen, die sich nur ein den Array-Indices unterscheiden, durch eine Schleife ersetzt würde. Außerdem könnte man für eine ja/nein-Prüfung als Returnwert boolean statt in verwenden. Code:
final int num = 4; //--- vier in einer Reihe
for ( int i=0; i<num; i++) {
if ( (pm+i) >= dasFeld.length) {
//--- Grenze überschritten -> kein Treffer
return false;
}
if ( (pn+i) >= dasFeld[pm+i].length) {
//--- Grenze überschritten -> kein Treffer
return false;
}
if ( !(dasFeld[pn+i][pm+i].equals( pfarbe)) {
//--- Felder verschieden -> kein Treffer
return false;
}
}
//--- alle Felder gleich -> Treffer
return true;
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|