Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Spielelogik

Klassendiagramm

Um das Spiel zu spielen benötigen wir eine Klasse, welche die Spielelogik enthält und den Benutzer führt. Lässt man die hier nicht mehr relavanten Teile der Klassen Warteschlange und Person weg, ergibt sich insgesamt folgendes Klassendiagramm:

Klassendiagramm Gesamtansicht

Beim Erzeugen des Spiels soll die Zahl der Kinder, die gleichzeitig auf einen Baumstamm passen, angegeben werden. Diese Zahl wird im Attribut breite gespeichert. Außerdem wird eine Warteschlange erzeugt und diese als stamm referenziert.

Die Methode leseString liest eine Benutzereingabe ein. Dies wird zur Eingabe der Namen der Personen auf dem Stamm benötigt. Du kannst die Methode einfach übernehmen. Verstehen musst Du sie nicht.

String leseString() {
    return new java.util.Scanner(System.in).nextLine();
}

Aufgabe 1 - Spiel-Klasse

Erstelle eine neue Klasse Spiel in Deinem Projekt. Implementiere die notwendigen Attribute, den Konstruktor und die Methode leseString.

	class Spiel {
	Warteschlange stamm;
	int breite;
	Spiel(int kinderzahl) {
	stamm = new Warteschlange();
	breite = kinderzahl;
	}
	String leseString() {
    return new java.util.Scanner(System.in).nextLine();
}
	}

Startbelegung

Zu Beginn des Spiels sollen die Spieler reihum die Namen der Personen eingeben, die auf dem Stamm stehen, bis dieser voll belegt ist. Die Methode startBelegungEingeben soll also in einer Schleife so oft einen neuen Namen abfragen und die Personen auf dem Stamm platzieren bis dieser voll belegt ist.

Aufgabe 2 - startBelegungEingeben

Implementiere die Methode und teste sie mit Hilfe des Objektinspektors wie im Film dargestellt.

Wiederhole breite mal:
   Gib aus: "Gib bitte einen Namen ein:"
   Lies einen Namen ein und speichere ihn in einer lokalen Variablen
   Erzeuge eine neue Person mit dem eingegebenen Namen und füge diese dem Stamm hinzu

Tipp überprüfen

Um zu überprüfen, ob ein Tipp mit dem Namen der vordersten Person auf dem Stamm übereinstimmt, kann man einige lokale Variablen benutzen oder einen etwas komplexeren Ausdruck formulieren:

boolean tippIstRichtig(String tipp) {
    if(stamm.gibErstePerson().name.equals(tipp))
        return true;
    else
        return false;
}

Aufgabe 3 - tippIstRichtig

Erkläre wie der logische Ausdruck in der if-Anweisung zustandekommt. Ergänze die Methode und teste sie. Zusatzaufgabe: Schreibe die Methode mit Hilfe lokaler Variablen um, so dass in der Bedingung nur noch name.equals(tipp) steht.

Spielen

Schließlich fehlt nur noch die Methode zur Durchführung des eigentlichen Spiels. Der Spieler, der an der Reihe ist, muss nun den Namen der vordersten Person auf dem Stamm tippen. Gelingt ihm dies, wird diese entfernt und eine neue Person hinzugefügt. Der Name der neuen Person wird vom Spieler eingegeben. Dies wird so lange wiederholt bis ein Spieler einen falschen Namen eingibt. Hinweis: Durch Ausgabe der Zeichenkette "\f" kann man die Ausgabe löschen. (Sonderzeichen für "form feed" also Seitenvorschub auf einer Schreibmaschine) Schließlich sollen die alten Namen ja nicht mehr zu sehen sein.

Aufgabe 4 - Spielen

Implementiere die Methode spielen, so dass alle Ein- und Ausgaben automatisch gesteuert werden.

Struktogramm zur Methode spielen
X

Fehler melden

X

Suche