Damespiel mit Nutzerinteraktion

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading
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 (der Code ist nur eine grobe Skizze, um das Prinzip zu verdeutlichen!):


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. Ein Spielzug setzt sich jeweils aus 4 Eingaben zusammen:
  1. die Zeile der alten Position des Steins
  2. die Spalte der alten Position des Steins
  3. die Zeile der neuen Position des Steins
  4. die Spalte der neuen Position des Steins

Für jeden Spieler, der an der Reihe ist, muss also 4 mal die Methode eingabe(...) aufgerufen werden. In der Dialogbox soll jedesmal das aktuelle Spielfeld mit angezeigt werden, so wie ich das oben demonstriert habe.

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 eines Spielers wird überprüft, ob der Spielzug gültig ist. Wenn nicht, soll der Spieler eine Fehlermeldung erhalten. Dazu können Sie die Methode ausgabe(...) verwenden. 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 ein Spielzug gültig ist, soll das Spielfeld entsprechend modifiziert und neu ausgedruckt werden (d.h. Aufruf von drucke_spielfeld zur Aktualisierung des Strings, der in den Eingabedialogen angezeigt wird). Wenn möglich, soll bei einem Spielzug auch gesprungen werden, wobei ein Spielstein des Gegners vom Feld entfernt wird. Ob Sie die Beförderung von Spielsteinen zur Dame mit berücksichtigen, überlasse ich Ihnen.

Ihr Programm sollte mitzählen, wie viele Steine jeder Spieler noch auf dem Feld hat. Sobald ein Spieler keine Steine mehr besitzt, sollten Sie das Spiel beenden und ausgeben, dass der andere Spieler gewonnen hat.

Ich wünsche viel Erfolg und gutes Gelingen!

Vorsorglich lege ich gleich einmal drei Codeboxen an, falls Sie Hilfsmethoden auslagern möchten.

Persönliche Werkzeuge