Damespiel mit Nutzerinteraktion
Die Methoden aus den Arbeitsblättern Spielfelder und Spielregeln können wir nun zu einem interaktiven Dame-Spiel zusammenbauen. Die Nutzerinteraktion wird sich etwas mühselig gestalten, aber beim ersten eigenen Spiel ist das nicht weiter schlimm.
Kopieren Sie zunächst Ihre Methoden aus den oben genannten Arbeitsblättern in diese Codebox:
Basismethoden zur Nutzerinteraktion
Da für das Spiel eine Interaktion mit den beiden menschlichen Spielern erforderlich ist, müssen wir zunächst eine Möglichkeit zur Dateneingabe während des Programmablaufs finden. Das Programming-Wiki stellt uns dafür eine Methode eingabe(String text) bereit. Der vom Nutzer eingegebene Text wird in einer Variable vom Typ String abgespeichert.
Im gleichen Stil lässt sich eine Ausgabe erzeugen:
Da es während des Spiels wichtig sein wird, Spielsteinpositionen als Zahlen anzugeben, benötigen wir noch eine Umwandlung von String zu int. Dazu gibt es in Java die Methode Integer.parseInt(String text). Probieren Sie das gleich mal aus:
Die folgende Codebox zeigt das Grundprinzip einer Nutzerinteraktion, bei der abwechselnd zwei Personen zur Eingabe von Daten aufgefordert werden. In diesem Fall soll die Eingabe einer 0 zum Beenden des Programms führen. Beim Dame-Spiel gibt es eine andere Abbruchbedingung (ein Spieler hat keine Steine mehr auf dem Brett). Außerdem soll die Eingabe einer Zahl < 0 ungültig sein (beim Dame-Spiel sind Eingaben ungültig, die zu ungültigen Spielzügen führen).
Wie Sie sehen, gibt es noch ein großes Problem: Die Konsolenausgabe wird erst angezeigt, nachdem das Programm beendet ist. Auf diese Weise lässt sich kein Spiel realisieren, denn wir müssen ja den aktuellen Stand der Spielsteine sehen, wenn wir Spielzüge eingeben wollen. Sie müssen also bei Ihrem Spiel komplett auf die Anweisung System.out.println(...) verzichten und stattdessen die Ein- und Ausgabemethode benutzen!
Das bedeutet wiederum, dass wir die Methode drucke_spielfeld so anpassen müssen, dass sie einen String zurückgibt, anstatt Konsolenausgaben zu erzeugen:
Eine Ausgabe kann dann z.B. wie folgt aussehen:
Spielablauf
Das Dame-Spiel soll im Prinzip wie folgt ablaufen:
- Am Anfang wird das Spielbrett initialisiert, indem alle 24 Spielsteine positioniert werden. Dafür sollten Sie schon eine Methode parat haben.
- Danach wird abwechselnd Spieler 1 und Spieler 2 dazu aufgefordert, einen Spielzug anzugeben. Der Spieler, der gerade an der Reihe ist, muss 4 Eingaben tätigen:
- die Zeile der alten Position des Steins
- die Spalte der alten Position des Steins
- die Zeile der neuen Position des Steins
- die Spalte der neuen Position des Steins
Welcher Spielstein gemeint ist, wird also nur anhand der alten Position des Steins ermittelt. Wir gehen zur Vereinfachung davon aus, dass jeder Spieler selbst darauf achtet, nur Positionen seiner eigenen Steine anzugeben und nicht die des Gegners! Außerdem müssen die Spieler Positionen von 0 bis 7 verwenden (und nicht von 1 bis 8).
Nach der Angabe des Spielzugs wird überprüft, ob der Spielzug gültig ist. Wenn nicht, soll der Spieler eine Fehlermeldung erhalten. Danach ist sofort der 2. Spieler an der Reihe (oder Sie warten mit einer while-Schleife darauf, bis der Spieler einen korrekten Zug eingegeben hat). Wenn der Spielzug gültig ist, soll das Spielfeld entsprechend modifiziert und neu ausgedruckt werden. Wenn möglich, soll auch gesprungen werden, wobei ein Spielstein vom Gegner vom Feld entfernt wird. Ob Sie die Beförderung von Spielsteinen zur Dame mit berücksichtigen, überlasse ich Ihnen.
Zeigen Sie nach jedem Spielzug auf der Konsole zwei Zähler an, die angeben, wie viele Steine jeder Spieler noch auf dem Brett hat. Am Anfang stehen beide Zähler auf 12. Sobald ein Spieler keine Steine mehr besitzt, sollten Sie das Spiel beenden und ausgeben, dass der andere Spieler gewonnen hat.