HSZG Vorkurs Informatik WS 2014/Damespiel mit Nutzerinteraktion

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
Die Methoden aus den Arbeitsblättern [[HSZG_Vorkurs_Informatik_WS_2014/Spielfelder | Spielfelder ]] und [[HSZG_Vorkurs_Informatik_WS_2014/Spielregeln | 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:
<code id="54246e9b556a1"></code>


'''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.
<code id="54246e9b55721" hidden>
String eingabe(String text) {
 return JOptionPane.showInputDialog(null, text);
}
void ausgabe(String text){
 JOptionPane.showMessageDialog(null,text);
}
</code>
<run id="54246e9b557a3">
String text = eingabe("Geben Sie eine Zahl ein!");
</run>

Im gleichen Stil lässt sich eine Ausgabe erzeugen:
<run id="54246e9b55820">
ausgabe("Der Wert ist korrekt!");
</run>

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:
<run id="54246f4ed01db">
String text = eingabe("Geben Sie eine Zahl ein!");
int zahl = Integer.parseInt(text);
System.out.println(zahl);
</run>

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).
<code id="5424717b7b28c">
boolean abbruch = false;
while(!abbruch){
 
  String text = eingabe("Spieler 1: Geben Sie eine Zahl ein!");
  int zahl = Integer.parseInt(text);

  System.out.println(zahl);

  if(zahl == 0){
    abbruch = true;
  }
  
  text = eingabe("Spieler 2: Geben Sie eine Zahl ein!");
  zahl = Integer.parseInt(text);

  System.out.println(zahl);

  if(zahl == 0){
    abbruch = true;
  }
}
</code>


'''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.