Es geht immer noch um das Projekt Zuul.
Den Thread bitte nicht schließen.
Aufgabe:
Implementieren Sie den Befehl back. Dieser Befehl hat kein zweites Wort.
Die Eingabe des Befehls back soll den Spieler in dem Raum zurückbringen,
indem er zuletzt gewesen ist.
Zusatzaufgabe:
Implementieren sie den Befehl back so, dass eine wiederholte Anwendung den Spieler mehrere Räume zurückversetzt. Bei genügend häufiger Anwendung sogar an den Spielanfang.
Benutzen Sie dazu eine Stack.
Wie gehe ich an diese Aufgabe ran?
Stack. Man kann ihn sich in der Tat wie einen Stapel vorstellen, von dem immer nur das oberste Element entfernt oder hinzugefügt werden kann.
Ein Element wird durch die Methode push() dem Stapel an der Spitze hinzugefügt, durch search() im Stapel gesucht und durch pop() entfernt. Mit peek() wird jeweils das oberste Element ermittelt.
Ich speichere alle Elemente in diesem Stack. Mit peek() ermittele ich das oberste Element
und mit pop() entferne ich es. Dann werde ich automatisch immer einen Raum zurück
gebracht?
Leider steht im Buch selbst zu Stack nichts.
https://javabeginners.de/Sammlungen_und_Listen/Stack.php
https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html
Klasse Raum:
Den Thread bitte nicht schließen.
Aufgabe:
Implementieren Sie den Befehl back. Dieser Befehl hat kein zweites Wort.
Die Eingabe des Befehls back soll den Spieler in dem Raum zurückbringen,
indem er zuletzt gewesen ist.
Zusatzaufgabe:
Implementieren sie den Befehl back so, dass eine wiederholte Anwendung den Spieler mehrere Räume zurückversetzt. Bei genügend häufiger Anwendung sogar an den Spielanfang.
Benutzen Sie dazu eine Stack.
Wie gehe ich an diese Aufgabe ran?
Stack. Man kann ihn sich in der Tat wie einen Stapel vorstellen, von dem immer nur das oberste Element entfernt oder hinzugefügt werden kann.
Ein Element wird durch die Methode push() dem Stapel an der Spitze hinzugefügt, durch search() im Stapel gesucht und durch pop() entfernt. Mit peek() wird jeweils das oberste Element ermittelt.
Ich speichere alle Elemente in diesem Stack. Mit peek() ermittele ich das oberste Element
und mit pop() entferne ich es. Dann werde ich automatisch immer einen Raum zurück
gebracht?
Leider steht im Buch selbst zu Stack nichts.
https://javabeginners.de/Sammlungen_und_Listen/Stack.php
https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html
Klasse Raum:
Code:
import java.util.Set;
import java.util.HashMap;
import java.util.ArrayList;
/**
* Diese Klasse modelliert Räume in der Welt von Zuul.
*
* Ein "Raum" repräsentiert einen Ort in der virtuellen Landschaft des
* Spiels. Ein Raum ist mit anderen Räumen über Ausgänge verbunden.
* Für jeden existierenden Ausgang hält ein Raum eine Referenz auf
* den benachbarten Raum.
*
* @author Michael Kölling und David J. Barnes
* @version 31.07.2011
*/
class Raum
{
private String beschreibung;
private HashMap<String, Raum> ausgaenge; // die Ausgänge dieses Raums
private Raum aktuellerRaum;
private ArrayList<Gegenstand> gegenstaende;
/**
* Erzeuge einen Raum mit einer Beschreibung. Ein Raum
* hat anfangs keine Ausgänge.
* @param beschreibung enthält eine Beschreibung in der Form
* "in einer Küche" oder "auf einem Sportplatz".
*/
public Raum(String beschreibung)
{
this.beschreibung = beschreibung;
ausgaenge = new HashMap<String, Raum>();
gegenstaende = new ArrayList<Gegenstand>();
}
public String gibBeschreibung()
{
return beschreibung;
}
public void addGegenstand(Gegenstand gegenstand)
{
gegenstaende.add(gegenstand);
}
/**
* Definiere einen Ausgang für diesen Raum.
* @param richtung die Richtung, in der der Ausgang liegen soll
* @param nachbar der Raum, der über diesen Ausgang erreicht wird
*/
public void setzeAusgang(String richtung, Raum nachbar)
{
ausgaenge.put(richtung, nachbar);
}
/**
* @return die kurze Beschreibung dieses Raums (die dem Konstruktor
* übergeben wurde).
*/
public String gibKurzbeschreibung()
{
return beschreibung;
}
/**
* Liefere eine lange Beschreibung dieses Raums, in der Form:
* Sie sind in der Küche.
* Ausgänge: nord west
* @return eine lange Beschreibung dieses Raumes.
*/
public String gibLangeBeschreibung()
{
return "Sie sind " + beschreibung + ".\n" + gibAusgaengeAlsString();
}
public String gibEssensBeschreibung()
{
return "Sie haben nun gegessen und sind nicht mehr hungrig!";
}
public String gibAusgaengeAlsString2()
{
String ergebnis = "Ausgänge: ";
if (aktuellerRaum.gibAusgang("north") != null) {
ergebnis += "north";
if (aktuellerRaum.gibAusgang("east") != null) {
ergebnis += "east";
if (aktuellerRaum.gibAusgang("south") != null) {
ergebnis += "south";
if (aktuellerRaum.gibAusgang("west") != null) {
ergebnis += "west";
}
}
}
}
return ergebnis;
}
/**
* Liefere eine Beschreibung der Ausgänge dieses Raumes,
* beispielsweise
* "Ausgänge: north west".
* @return eine Beschreibung der Ausgänge dieses Raumes.
*/
private String gibAusgaengeAlsString()
{
String ergebnis = "Ausgänge:";
Set<String> keys = ausgaenge.keySet();
for(String ausgang : keys)
ergebnis += " " + ausgang;
return ergebnis;
}
public String gibGegenstaendeAlsString()
{
String ergebnis = "";
for(Gegenstand aktuellerGegenstand : gegenstaende)
ergebnis += " " + aktuellerGegenstand.gibBeschreibung();
return ergebnis;
}
public Raum gibAusgang(String richtung)
{
return ausgaenge.get(richtung);
}
/**
* Liefere den Raum, den wir erreichen, wenn wir aus diesem Raum
* in die angegebene Richtung gehen. Liefere 'null', wenn in
* dieser Richtung kein Ausgang ist.
* @param richtung die Richtung, in die gegangen werden soll.
* @return den Raum in der angegebenen Richtung.
*/
}