Spielfelder

Aus ProgrammingWiki
Archivierte Version vom 2014-09-23T21:17:40+00:00. Aktuelle Version

Testen Sie sich selbst: Haben Sie die Aufgaben der letzten Tage weitestgehend ohne fremde Hilfe gelöst? Haben Sie die Lösungen vollständig verstanden und haben Sie nun Lust, ein etwas komplexeres Programm mit Nutzerinteraktion zu entwickeln? Dann sind Sie hier richtig. Die folgenden Arbeitsblätter arbeiten darauf hin, ein kleines Spiel auf der Konsole zu entwickeln. Beispiele sind:

  • Papier-und-Bleistift-Spiele wie z.B. Hangman, Tic Tac Toe
  • Brettspiele wie z.B. Dame, 4-Gewinnt

Heute werden Sie zunächst mögliche Bausteine solcher Spiele implementieren. In diesem Arbeitsblatt befassen wir uns mit dem Anlegen von Spielfeldern und dem Ausdrucken von Spielfeldern auf der Konsole.

Die Funktion System.out.println(String text) reicht dazu nicht mehr aus. Wir benötigen noch zwei andere Varianten zur Textausgabe:

  • System.out.print(String text): Gibt Text auf der Konsole aus, ohne danach einen Zeilenumbruch zu erzeugen.
  • System.out.println(): Erzeugt einen Zeilenumbruch.
  • System.out.println(String text): Wie gehabt. Gibt Text auf der Konsole aus und erzeugt danach einen Zeilenumbruch.


Aufgabe 1

Entwickeln Sie eine Methode drucke_spielfeld, die ein leeres Spielfeld auf der Konsole ausdruckt:

|_|_|_|_|_|_
|_|_|_|_|_|_
|_|_|_|_|_|_
|_|_|_|_|_|_
|_|_|_|_|_|_
|_|_|_|_|_|_

Die Höhe und Breite des Spielfelds sollen als Parameter übergeben werden. Verwenden Sie zwei ineinander verschachtelte for-Schleifen und drucken Sie wiederholt den Text "|_" !


Aufgabe 2

Versuchen Sie, die Methode aus Aufgabe 1 so zu erweitern, dass oben und rechts der Spielfeldrand abgeschlossen ist!


Aufgabe 3

Übernehmen Sie die Methode drucke_spielfeld aus Aufgabe 1 oder 2. Entfernen Sie die Paramter für Breite und Höhe und stellen Sie die Werte im Programmcode fest ein (damit wir im Folgenden nicht zu viele Parameter anhäufen).

Die Methode soll nun so ergänzt werden, dass ein bestimmter Spielstein an eine bestimmte Position gesetzt werden kann. Sie benötigen drei Parameter:

  • den Spielstein als Wert vom Typ String (z.B. "D" für Dame oder "X" für ein Kreuz)
  • die x-Position des Steins (horizontal)
  • die y-Position des Steins (vertikal)

die Methode soll das Spielfeld so ausdrucken, dass sich der übergebene Spielstein an der gewünschten Position befindet.

Beispiel: Der Spielstein "D" soll an die Position (1,3) eingefügt werden:

 _ _ _ _ _ _
|_|_|_|_|_|_|
|_|_|D|_|_|_|
|_|_|_|_|_|_|
|_|_|_|_|_|_|
|_|_|_|_|_|_|
|_|_|_|_|_|_|


Aufgabe 4

Bisher können wir ein Spielfeld zwar ausdrucken, aber wir sind nicht in der Lage, den Zustand des Spielfelds dauerhaft abzuspeichern. Dadurch wird es zum einen schwierig, die Einhaltung von Spielregeln auf dem aktuellen Spielfeld zu überprüfen. Zum anderen wird es schwierig, einen Spielzug zu implementieren, bei dem ein Spielstein von der aktuellen Position auf eine andere Position verschoben wird. Diese Probleme können wir vermeiden, indem wir den aktuellen Spielzustand in einer Datenstruktur abspeichern.

Dafür eignet sich ein zweidimensionales Array am besten. Zweidimensionale Arrays werden so ähnlich deklariert wie eindimensionale. Wir können Sie uns als Matrix mit einer bestimmten Anzahl von Zeilen und Spalten vorstellen. Die folgende Codebox zeigt, wie ein 2D-Array vom Typ int mit 5 Zeilen und 10 Spalten initialisiert wird:

Das Array kann nun an jeder Zeile und Spalte mit Werten belegt werden:

Auch der Lesezugriff erfolgt so ähnlich wie beim 1D-Array. Wenn z.B. der Wert an (Zeile 0, Spalte 2) im Array gelesen werden soll, schreibt man:

Die Anzahl der Zeilen erhalten wir wie folgt:

Die Anzahl der Spalten erhalten wir wie folgt:

Entwickeln Sie nun eine Methode erstelle_spielfeld, die keine Parameter entgegennimmt und ein zweidimensionales Array vom Typ String zurückgibt. Das Array soll die Höhe und Breite besitzen, mit der Sie in der Methode drucke_spielfeld bisher gearbeitet haben. Außerdem soll das Array an jeder Position den Wert "|_" enthalten. Zum Füllen des Arrays benötigen Sie wieder zwei verschachtelte for-Schleifen.

Ändern Sie nun die Methode drucke_spielfeld so ab, dass sie ein zweidimensionales Array vom Typ String als Parameter entgegennimmt und einfach jedes Element des Arrays auf der Konsole ausdruckt. Das Ergebnis sollte wieder so aussehen wie bei Aufgabe 1 (bzw. Aufgabe 2 wenn Sie das schaffen).