i

Simulation im Codepad

Spielen am Computer

Ziel ist es eine textbasierte Version des Spiels mit BlueJ zu programmieren und am Computer zu spielen. Wenn du möchtest, kannst du das Spiel später auch in Greenfoot grafisch umsetzen. Das Video gibt dir einen Eindruck vom fertigen Spiel:

Zuerst soll das Spiel allerdings noch nicht programmiert werden, sondern es sollen die notwendigen Anweisungen und Gedankenschritte erst einmal ausprobiert werden. Dazu benutzt Du die Direkteingabe (bzw. bei BlueJ auf englisch: Codepad). Falls das Codepad bei Dir nicht aktiviert ist, kannst Du es im Menü unter View → Show Codepad bzw. Ansicht → Direkteingabe anzeigen aktivieren. Alternativ kannst es mit der Maus einblenden:

Codepad einblenden

Figur-Klasse

Wir gehen von folgender Struktur für die Figuren-Klasse aus:

Dabei soll die Vereinbarung gelten, dass beim Bewegen der Figur in Richtung 0, 1, 2 oder 3 diese sich nach oben bzw. rechts, unten, links bewegt.

Wir folgen der bei Computergrafiken üblichen Konvention, dass die y-Achse nach unten zeigt, der Ursprung also oben links ist und die Nummerierung bei 0 beginnt. Damit ergeben sich beispielhaft folgende Koordinaten:

Koordinaten

Aufgabe 1

Beschreibe mit je einem Satz die Attribute, den Konstruktor und die Methoden.

Aufgabe 2

Welche Ausgaben erwartest Du in folgendem Codepad-Dialog an den mit Fragezeichen markierten Stellen?

Figur f = new Figur("rot", 0, 2);
f.gewonnen()
   ???
f.x
   ???
f.y
   ???
f.gehe(1);
f.gewonnen()
   ???
f.gehe(1);
f.gewonnen()
   ???

Implementiere die Klasse selbst in einem neuen BlueJ-Projekt oder lade das vorbereitete Projekt herunter. Teste die oben dargestellten Anweisungen und Ausdrücke im Codepad.

Achte darauf, ob eine Zeile im Codepad mit einem Semikolon abgeschlossen wird oder nicht. Ohne Semikolon wird der Wert des Ausdrucks ausgegeben. Mit Semikolon wird eine Anweisung ausgeführt, ohne dass ein eventuell berechneter Wert ausgegeben wird. Das ist eine Besonderheit im Codepad. In normalen Java-Programmen wird immer ein Semikolon benötigt, um eine Anweisung abzuschließen. Eine ausführliche Erklärung zur Benutzung des Codepads findest Du im Abschnitt zu den BlueJ-Tipps.

Ein Spiel im Codepad simulieren

Es soll ein Spiel mit vorgegebenem Verlauf im Codepad simuliert werden. Dazu soll schon zufällig bestimmt worden sein, dass der Spieler mit der Farbe "blau" beginnt. Zuerst müssen die Figuren auf den Startpositionen erzeugt werden:

Figur f1 = new Figur("blau", 0, 0);
Figur f2 = new Figur("rot", 4, 4);

Dies bewirkt, dass zwei Figuren erzeugt werden, die unter dem Namen f1 und f2 angesprochen werden können. Als Objektdiagramm lässt sich das folgendermaßen darstellen:

Objektdiagramm mit zwei Figuren

Die nächsten Spielzüge könnten dann sein:

  • Blau wirft eine rote und blaue Münze und zieht nach rechts.
  • Rot wirft zwei rote Münzen und zieht nach oben.
  • ...

Im Codepad lassen sich die Züge simulieren durch

f1.gehe(1);
f2.gehe(1);

bzw.

f2.gehe(0);
f2.gehe(0);

Aufgabe 3

Überlege Dir weitere Spielzüge, um ein vollständiges Spiel zu simulieren. Simuliere das Spiel im Codepad. Den aktuellen Zustand kannst Du kontrollieren durch Abfrage der Attribute mit f1.x etc. sowie durch Aufruf der Anweisung f1.gewonnen() bzw. f2.gewonnen(). Du kannst zur Kontrolle das Spiel auch parallel auf einem echten Spielbrett spielen.

Ein Spiel im Codepad spielen

Als nächstes wollen wir das Spiel wirklich spielen, wir müssen also auch das Werfen der Münzen im Codepad erledigen. Dazu muss zunächst das Paket importiert werden, das die Random-Klasse enthält, mit deren Hilfe wir dann Zufallszahlen erzeugen können:

import java.util.Random;
Random r = new Random();
int zahl1;
int zahl2;
zahl1 = r.nextInt(2);
zahl2 = r.nextInt(2);
zahl1
zahl2

Aufgabe 4

Beschreibe mit Hilfe von Fachbegriffen, was in jeder Zeile genau passiert und probiere das selbst aus.

Aufgabe 5

Probiere das selbst einmal im Codepad aus, indem Du das Spiel zumindest teilweise auf diese Art spielst.

Die aktuellen Figuren speichern

Um die aktuellen Figuren - also die Figuren, die man per Münzwurf bestimmt hat - zu bewegen, muss man genau darauf achten, welche Figuren gerade an der Reihe sind. Wenn man dies an mehreren Stellen im Programm berücksichtigen muss, kann es leicht zu Fehlern kommen und der Code wird unübersichtlich. Deshalb ist es sinnvoll, die aktuellen Figuren zu speichern:

Figur aktuelleFigur1;
Figur aktuelleFigur2;

// wenn man rot und rot geworfen hat
aktuelleFigur1 = f2;
aktuelleFigur2 = f2;

// wenn man blau und rot geworfen hätte
// aktuelleFigur1 = f1;
// aktuelleFigur2 = f2;

Dies bewirkt, dass zwei neue Variablen aktuelleFigur1 und aktuelleFigur2 definiert werden, welche auf die gleichen Objekte zeigen, auf die auch f2 zeigt. Man spricht in diesem Zusammenhang auch von einer Referenz oder einem Verweis auf ein Objekt. aktuelleFigur1, aktuelleFigur2 und f2 referenzieren also alle das gleiche Objekt.

Aktuelle Figuren speichern

Anschließend können z.B. die Farben der aktuellen Figuren ausgegeben werden und die Figuren z.B. nach links verschoben werden.

System.out.println("Am Zug ist" + aktuelleFigur1.farbe + " und " + aktuelleFigur2.farbe);

aktuelleFigur1.gehe(3);
aktuelleFigur2.gehe(3);

Statt dessen hätte man hier - d.h. also wenn zwei mal rot geworfen wurde - auch schreiben können:

System.out.println("Am Zug ist" + f2.farbe + " und " + f2.farbe);

f2.gehe(3);
f2.gehe(3);

Aufgabe 6

Beschreibe den Vorteil der ersten Variante gegenüber der zweiten.

Aufgabe 7

Probiere das selbst einmal im Codepad aus, indem Du das Spiel zumindest teilweise auf diese Art spielst.

Suche

v
7.1.3.1.2
dev.inf-schule.de/oop/java/beziehungen/gohome/codepad
dev.inf-schule.de/7.1.3.1.2
dev.inf-schule.de/@/page/jABKz6ppm0MMYNLw

Rückmeldung geben