Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Stack;
- /**
- * Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
- * "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
- * Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
- * mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
- * damit es interessanter wird!
- *
- * Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
- * an ihr die Methode "spielen" aufgerufen werden.
- *
- * Diese Instanz dieser Klasse erzeugt und initialisiert alle
- * anderen Objekte der Anwendung: Sie legt alle Räume und einen
- * Parser an und startet das Spiel. Sie wertet auch die Befehle
- * aus, die der Parser liefert und sorgt für ihre Ausführung.
- *
- * @author Michael Kölling und David J. Barnes
- * @version 31.07.2011
- */
- class Spiel
- {
- private Parser parser;
- private Raum aktuellerRaum;
- private Stack<Raum> backStack;
- private Player player;
- /**
- * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
- */
- public Spiel()
- {
- raeumeAnlegen();
- parser = new Parser();
- this.player = new Player("Player");
- this.backStack = new Stack<Raum>();
- }
- /**
- * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
- */
- private void raeumeAnlegen()
- {
- Raum draussen, halle, bad, verlies, waffenkammer, speisesaal, spielezimmer, angestelltenraum, ankleidezimmer, abstellkammer, schlafzimmer, speisekammer, gaestezimmer, kueche; ;
- // die Räume erzeugen
- draussen = new Raum("vor dem Haupteingang einer alten Burg");
- halle = new Raum("in einer großen Halle");
- kueche = new Raum("in der Küche");
- verlies = new Raum("in einem einem alten Verlies");
- waffenkammer = new Raum("in der Waffenkammer der Burg");
- speisekammer = new Raum("in der Speisekammer");
- speisesaal = new Raum("im Speisesaal der Burg");
- bad = new Raum("im Bad");
- spielezimmer = new Raum("im Spielezimmer");
- angestelltenraum = new Raum ("im Angestelltenraum");
- schlafzimmer = new Raum ("im Schlafzimmer");
- gaestezimmer = new Raum ("im Gästezimmer");
- ankleidezimmer = new Raum ("im Ankleidezimmer");
- abstellkammer = new Raum ("in der Abstellkammer");
- // die Ausgänge initialisieren
- draussen.setzeAusgang("north", halle);
- halle.setzeAusgang("south", draussen);
- halle.setzeAusgang("west", speisesaal);
- halle.setzeAusgang("east", abstellkammer);
- speisesaal.setzeAusgang("north", kueche);
- speisesaal.setzeAusgang("east", halle);
- kueche.setzeAusgang("west", bad);
- bad.setzeAusgang("east", kueche);
- bad.addItem("Haarbürste", "", 1);
- kueche.setzeAusgang("south", speisesaal);
- kueche.setzeAusgang("north", ankleidezimmer);
- kueche.addItem("Brot", "Ein leckeres Schwarzbrot", 3);
- kueche.addItem("Milch", "Eine halbe Flasche Milch", 4);
- kueche.addItem("Hähnchen", "Ein halbes Hähnchen", 5);
- kueche.addItem("Fruchzwerg", "Für wen das wohl ist?", 1);
- ankleidezimmer.setzeAusgang("south", kueche);
- ankleidezimmer.setzeAusgang("west", waffenkammer);
- ankleidezimmer.setzeAusgang("north", spielezimmer);
- ankleidezimmer.addItem("Pullover", "Ein schöner Rollkragenpullover", 4);
- ankleidezimmer.addItem("Hose", "Eine schwarze Hose", 3);
- ankleidezimmer.addItem("Kleid", "Ein blaues Kleid", 3);
- spielezimmer.setzeAusgang("south", ankleidezimmer);
- spielezimmer.setzeAusgang("east", gaestezimmer);
- spielezimmer.addItem("Puppe", "Eine einfache Puppe", 1);
- spielezimmer.addItem("Puppenhaus", "Ein Haus Puppen", 10);
- schlafzimmer.addPlayer("prinzessin");
- gaestezimmer.setzeAusgang("west", spielezimmer);
- gaestezimmer.setzeAusgang("south", schlafzimmer);
- gaestezimmer.ausgangSperren("south");
- waffenkammer.setzeAusgang("east", ankleidezimmer);
- waffenkammer.setzeAusgang("north", angestelltenraum);
- angestelltenraum.setzeAusgang("south", waffenkammer);
- angestelltenraum.addItem("Schlüssel", "Das ist ein magischer Schlüssel!", 5);
- abstellkammer.setzeAusgang("west", halle);
- abstellkammer.setzeAusgang("north", speisekammer);
- speisekammer.setzeAusgang("south", abstellkammer);
- speisekammer.setzeAusgang("north", verlies);
- speisekammer.addItem("Krug", "Ein goldener Krug! Wieso ist er nur golden?", 7);
- verlies.setzeAusgang("south", speisekammer);
- verlies.addItem("Axt", "Eine rostige Axt", 9);
- verlies.addItem("Ausgebrannte Fackel", "Eine alte Fackel", 2);
- verlies.addPlayer("zwerg");
- aktuellerRaum = draussen; // das Spiel startet draussen
- }
- /**
- * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
- * in einer Schleife.
- */
- public void spielen()
- {
- willkommenstextAusgeben();
- // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
- // und führen sie aus, bis das Spiel beendet wird.
- boolean beendet = false;
- while (! beendet) {
- Befehl befehl = parser.liefereBefehl();
- beendet = verarbeiteBefehl(befehl);
- }
- }
- /**
- * Einen Begrüßungstext für den Spieler ausgeben.
- */
- private void willkommenstextAusgeben()
- {
- System.out.println();
- System.out.println("Willkommen zum langweilsten Spiel der Welt!");
- System.out.println("Die Prinzessin ist verschwunden. Kannst du Sie finden?");
- System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
- System.out.println();
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- }
- /**
- * Verarbeite einen gegebenen Befehl (führe ihn aus).
- * @param befehl Der zu verarbeitende Befehl.
- * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
- */
- private boolean verarbeiteBefehl(Befehl befehl)
- {
- boolean moechteBeenden = false;
- if(befehl.istUnbekannt()) {
- System.out.println("Ich weiss nicht, was Sie meinen...");
- return false;
- }
- String befehlswort = befehl.gibBefehlswort();
- if (befehlswort.equals("help"))
- {
- hilfstextAusgeben();
- }
- else if (befehlswort.equals("go"))
- {
- moechteBeenden = wechsleRaum(befehl);
- }
- else if (befehlswort.equals("quit"))
- {
- moechteBeenden = beenden(befehl);
- }
- else if (befehlswort.equals("look"))
- {
- umsehen();
- }
- else if(befehlswort.equals("take"))
- {
- this.takeItem(befehl);
- }
- else if(befehlswort.equals("list"))
- {
- this.listInventar();
- }
- // ansonsten: Befehl nicht erkannt.
- return moechteBeenden;
- }
- // Implementierung der Benutzerbefehle:
- /**
- * Gib Hilfsinformationen aus.
- * Hier geben wir eine etwas alberne und unklare Beschreibung
- * aus, sowie eine Liste der Befehlswörter.
- */
- private void hilfstextAusgeben()
- {
- System.out.println("Sie ist in dieser Burg! Finde Sie!");
- System.out.println();
- System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
- parser.zeigeBefehle();
- }
- /**
- * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
- * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
- * aus.
- */
- private boolean wechsleRaum(Befehl befehl)
- {
- if(!befehl.hatZweitesWort()) {
- // Gibt es kein zweites Wort, wissen wir nicht, wohin...
- System.out.println("Wohin möchten Sie gehen?");
- return false;
- }
- else
- {
- String richtung = befehl.gibZweitesWort();
- if(richtung.equals("back"))
- {
- back();
- return false;
- }
- else
- {
- // Wir versuchen, den Raum zu verlassen.
- Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);
- if (naechsterRaum == null)
- {
- System.out.println("Dort ist keine Durchgang!");
- return false;
- }
- else if(naechsterRaum.getLocked())
- {
- if(this.player.hasItem("Schlüssel"))
- {
- aktuellerRaum.ausgangOeffnen(richtung);
- System.out.println("Der Ausgang Richtung " + richtung + " wurde geoeffnet!");
- backStack.push(aktuellerRaum);
- aktuellerRaum = naechsterRaum;
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- if(aktuellerRaum.hasPrincess())
- {
- System.out.println("Herzlichen Glückwunsch, Sie haben die Prinzessin gefunden!");
- System.out.println("Das Spiel ist damit beendet.");
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- System.out.println("Dieser Durchgang ist versperrt! Sie benötigen einen Schlüssel!");
- return false;
- }
- }
- else
- {
- backStack.push(aktuellerRaum);
- aktuellerRaum = naechsterRaum;
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- return false;
- }
- }
- }
- }
- /**
- * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
- * ob das Spiel wirklich beendet werden soll.
- * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
- */
- private boolean beenden(Befehl befehl)
- {
- if(befehl.hatZweitesWort()) {
- System.out.println("Was soll beendet werden?");
- return false;
- }
- else {
- return true; // Das Spiel soll beendet werden.
- }
- }
- private void umsehen()
- {
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- }
- private void takeItem(Befehl befehl)
- {
- if(!befehl.hatZweitesWort())
- {
- // Gibt es kein zweites Wort, wissen wir nicht, wohin...
- System.out.println("Was möchten Sie nehmen?");
- }
- else
- {
- String gegenstand = befehl.gibZweitesWort();
- // Wir versuchen, den Raum zu verlassen.
- Item item = aktuellerRaum.getItem(gegenstand);
- if (item == null)
- {
- System.out.println("Dieser Gegenstand konnte nicht gefunden werden!");
- }
- else
- {
- if(this.player.addItem(item))
- {
- aktuellerRaum.removeItem(item.getName());
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- }
- else
- {
- System.out.println("Der Gegenstand ist zu schwer für Ihr Inventar!");
- }
- }
- }
- }
- /*
- * Nennt den Inhalt von Ihrem Inventar.
- */
- private void listInventar()
- {
- if(this.player.getInventar().size() > 0)
- {
- System.out.println("Ihr Inventar enthält:");
- int weight = 0;
- for(String item : this.player.getInventar().keySet())
- {
- System.out.println(item);
- weight += this.player.getInventar().get(item).getGewicht();
- }
- System.out.println("Sie haben noch " + (this.player.getMaxWeight() - weight) + " Plätze verfügbar.");
- }
- else
- {
- System.out.println("Ihr Inventar ist momentan leer!");
- System.out.println("Sie haben noch " + this.player.getMaxWeight() + " Plätze verfügbar.");
- }
- }
- /**
- * Gehe in den vorherigen Raum zurück.
- */
- private void back()
- {
- if(backStack.empty() == true)
- {
- System.out.println("Du bist bereits am Anfang.");
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- }
- else
- {
- System.out.println("Du bist im vorherigen Raum.");
- aktuellerRaum = backStack.pop();
- System.out.println(aktuellerRaum.gibLangeBeschreibung());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement