4.2 Schiebepuzzle

Vorschlag API für die Aufgabe abzuändern

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

4.2 Schiebepuzzle
Ich hab ein Problem mit den Vorgaben der API.

Ich hatte erst einen Fehler in der isGameOver-Methode, die mir fälschlich IMMER ein false-Resultat lieferte.
Aber damit hat das Spiel immerhin funktioniert,
nur die schöne “Congratulation!”-Meldung nach dem Lösen ist natürlich nie erschienen.
ABER
als ich die isGameOver-Methoder repariert hatte,
konnte ich das Spiel überhaupt nicht mehr starten!

Klingt auch logisch, da ich in shuffle natürlich die moveGap-Methode verwende,
diese muss aber nach API das Verschieben verweigern, wenn ein gelöstes Spielfeld vorliegt.
Am Anfang liegt aber natürlich ein gelöstes Spielfeld von der init-Methode vor!
Also geht mein shuffle überhaupt nicht.

Es wird ja wohl nicht so gemeint sein, dass man die ganzen Überprüfungen auf Grenz-Überschreitung etc.,
die man sich für moveGap überlegt hat, in der shuffle-Methode nochmal als Dublikat reinprogrammiert.

Wenn ich in moveGap auf die Verweigerung bei gelöstem Spielfeld verzichte,
klappt alles wunderbar.
Sobald das Spiel gelöst ist, kommt dann ja die Erfolgsmeldung, die beim Anklicken sofort ein neues Spiel erzeugt,
ich kann also auch nicht versehentlich über die Lösung hinaus bewegen.

Hab ich irgend einen Hänger in meinen Überlegungen, oder liegt es wirklich an einer ungeschickten API-Forderung?

ciao
Wolfgang


:wink:

James Gosling – Wikipedia hat dir statische Methoden gegeben - sowas kann manchmal Code-„Dubligade“ verhindern. Dazu sagt die Aufgabenstellung:

Dann verzichten die Korrektoren auf ein paar Punkte - das klappt auch wunderbar…

Wenn man genau diese GUI verwendet, ja…
Die Testfälle der Tutoren aber laufen komplett ohne GUI und untersuchen das Verhalten gemäß (immutable) API!

Das ist Ansichtssache - aber in der Klausur und im späteren Berufsleben kann man sich die API leider auch nicht schönreden.


Aye aye, sir! :slight_smile:


Hey Wolfgang,
ich hab es so gemacht, dass ich in shuffel nicht auf die moveGap-Methode zugreife, sondern den Code zum bewegen neu implementiere, bzw aus der moveGap-Methode kopiere^^
lg


Hi Naschi,
hab ich auch gemacht. Ich dachte nur, wir sollen solche Code-Duplikate vermeiden. Geht hier wohl nicht.
Wobei…
man koennte auch die eigentliche Schieberei in eine dritte Hilfsmethode auslagern
und diese dann mit oder ohne Feld-ist-gelöst-Prüfung von 2 sehr schlanken
Methoden aufrufen.

Wolfgang


Quatsch! Was schreib ich denn…

Geht auch mit 2 Methoden OHNE Code-Dublikat.
ich kann ja die verschiebe-immer-egal-ob-gewonnen als “Hilfsmethode” auffassen.


Aye aye, sir! :slight_smile: - und Glückwunsch (ganz ehrlich): Du hast dabei einiges gelernt!


ja, das mit der Hilfsmethode ist echt gut ^^
Gibt es punktabzug, falls man den code doppelt geschrieben hat?


Nicht bei diesem Blatt (sofern beide Codestellen korrekt sind ;)…).


.


Die Directions machen mir Probleme

enum Direction {
	UP, DOWN, LEFT, RIGHT
}

Da schmeißt mir eclipse “interface expected”, aber da das die Vorgegebene Klasse ist soll ich da nichts dran ändern.
Und so passen auch meine eigenen Methoden/Klassen nicht, da die ja auch Directions zurückgreifen.


Schau dir in der API doch mal die Methoden für eine Direction an… Vielleicht hilft dir ja das weiter


Nicht wirklich, es ist kein Direction Enum gegeben und Eclipse lässt mich auch keins erstellen bzw. erkennt nicht was ein Enum ist.
Benutze ich vieleicht einfach eine vorzeitliche Java Version?