HSZG Vorkurs Informatik WS 2014/Spielfelder
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language> 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 "|_" ! <code id="5421d3502a095"></code> <run id="5421d3502a120"></run> '''Aufgabe 2''' Versuchen Sie, die Methode aus Aufgabe 1 so zu erweitern, dass oben und rechts der Spielfeldrand abgeschlossen ist! <code id="5421d6db9b8bc"></code> <run id="5421d6db9b992"></run> '''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|_|_|_| |_|_|_|_|_|_| |_|_|_|_|_|_| |_|_|_|_|_|_| |_|_|_|_|_|_| <code id="5421e143a98b6"></code> <run id="5421e143a9afd"></run> '''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: <code id="5421e143a9944"> int[][] matrix = new int[5][10]; </code> Das Array kann nun an jeder Zeile und Spalte mit Werten belegt werden: <code id="5421e143a99c7"> matrix[0][0] = 1; matrix[0][1] = 1; matrix[0][2] = 1; ... </code> 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: <code id="5421e143a9a45"> int wert = matrix[0][2]; </code>