Erste Schritte Projekt Zuul

Status des Themas:
Es sind keine weiteren Antworten möglich.

Diskutiere Projekt Zuul im Java Basics - Anfänger-Themen Forum; Lege zwei Instanzen von Gegenstand an. Erzeuge eine Instanz von Raum. Füge die Gegenstände in den Raum ein. Gibt "gibBeschreibung" das richtige...

  1. Devanther
    Devanther Mitglied
    Es passiert nichts. Es werden keine Gegenstände angezeigt.

    Klasse Spiel:
    Code (Text):
    /**
    *  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
    */

    import java.util.ArrayList;

    class Spiel
    {
        private Parser parser;
        private Raum aktuellerRaum;
        private Gegenstand aktuellerGegenstand;
        private ArrayList<Gegenstand> gegenstaende;
     
        private Gegenstand buch;
        private Gegenstand computer;
     
         
        /**
         * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
         */
        public Spiel()
        {
            raeumeAnlegen();
            parser = new Parser();
         
         
         
        }

        /**
         * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
         */
        private void raeumeAnlegen()
        {
            Raum draussen, hoersaal, cafeteria, labor, buero, keller;
       
            // die Räume erzeugen
            draussen = new Raum("vor dem Haupteingang der Universität");
            hoersaal = new Raum("in einem Vorlesungssaal");
            cafeteria = new Raum("in der Cafeteria der Uni");
            labor = new Raum("in einem Rechnerraum");
            buero = new Raum("im Verwaltungsbüro der Informatik");
            keller = new Raum("im Keller");
         
            // die Ausgänge initialisieren
            draussen.setzeAusgang("east", hoersaal);
            draussen.setzeAusgang("south", labor);
            draussen.setzeAusgang("west", cafeteria);

            hoersaal.setzeAusgang("west", draussen);

            cafeteria.setzeAusgang("east", draussen);

            labor.setzeAusgang("north", draussen);
            labor.setzeAusgang("east", buero);

            buero.setzeAusgang("west", labor);
            buero.setzeAusgang("down", keller);
         
            keller.setzeAusgang("up", buero);
         
            //Gegenstände erzeugen
         
            buch = new Gegenstand("Buch", 150);
            computer = new Gegenstand("Computer", 1500);
            keller.addGegenstand(buch);
            buero.addGegenstand(computer);
         
         
         
         
         
            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);
            }
            System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
        }
       
        private void umsehen()
        {
            System.out.println(aktuellerRaum.gibLangeBeschreibung());
        }  
     
        private void essen()
        {
            System.out.println(aktuellerRaum.gibEssensBeschreibung());
        }  
     
     
        private void rauminfoAusgeben()
        {
          System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
          System.out.print("Ausgänge: ");
          if (aktuellerRaum.gibAusgang("north") != null) {
              System.out.print("north ");
          }
          if(aktuellerRaum.gibAusgang("east") != null) {
              System.out.print("east ");
          }
          if(aktuellerRaum.gibAusgang("south") != null) {
              System.out.print("south ");
          }
          if(aktuellerRaum.gibAusgang("west") != null) {
              System.out.print("west ");
          }
          System.out.println();
        }
         
         
     
        /**
         * Einen Begrüßungstext für den Spieler ausgeben.
         */
        private void willkommenstextAusgeben()
        {
            System.out.println();
            System.out.println("Willkommen zu Zuul!");
            System.out.println("Zuul ist ein neues, unglaublich langweiliges Spiel.");
            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")) {
                wechsleRaum(befehl);
            }
            else if (befehlswort.equals("look")) {
                umsehen();
            }
            else if (befehlswort.equals("eat")) {
                essen();
            }
            else if (befehlswort.equals("quit")) {
                moechteBeenden = beenden(befehl);
            }
            // 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 haben sich verlaufen. Sie sind allein.");
            System.out.println("Sie irren auf dem Unigelände herum.");
            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 void wechsleRaum(Befehl befehl)
        {
            if(!befehl.hatZweitesWort()) {
                // Gibt es kein zweites Wort, wissen wir nicht, wohin...
                System.out.println("Wohin möchten Sie gehen?");
                return;
            }

            String richtung = befehl.gibZweitesWort();

            // Wir versuchen, den Raum zu verlassen.
            Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);

            if (naechsterRaum == null) {
                System.out.println("Dort ist keine Tür!");
            }
            else {
                aktuellerRaum = naechsterRaum;
                System.out.println(aktuellerRaum.gibLangeBeschreibung());
            }
        }

        /**
         * "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.
            }
        }
    }
     
    Klasse Raum:
    Code (Text):
    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 gegenstaendeAnzeigen()

        {
        for(Gegenstand aktuellerGegenstand: gegenstaende){
         aktuellerGegenstand.gibBeschreibung();
        }
      }
     
     
     
        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 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.
         */
     
    }

       
    Klasse Gegenstand:
    Code (Text):

    /**
    * Beschreiben Sie hier die Klasse Gegenstand.
    *
    * @author (Ihr Name)
    * @version (eine Versionsnummer oder ein Datum)
    */
    public class Gegenstand
    {
        // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
        private int x;
     
        private String gegenstandBeschreibung;
     
        private int gegenstandGewicht;
     
        private String beschreibung;

        /**
         * Konstruktor für Objekte der Klasse Gegenstand
         */
        public Gegenstand(String beschreibung, int gewicht)
        {
            this.gegenstandBeschreibung = beschreibung; // Instanzvariable initialisieren
            this.gegenstandGewicht = gewicht;
            x = 0;
        }
       
     
        public String gibBeschreibung()
        {
        return beschreibung;
        }  
     
     
     
         /**
         * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
         *
         * @param  y    ein Beispielparameter für eine Methode
         * @return        die Summe aus x und y
         */
        public int beispielMethode(int y)
        {
            // tragen Sie hier den Code ein
            return x + y;
        }
    }
     
    https://imgur.com/a/J5kJb
    Es müsste stehen: Sie sind im Keller. Im Keller ist ein Buch.

    Aber die Gegenstände erscheinen nicht.
     
    Zuletzt bearbeitet: 13. Sep. 2017
  2. Harry Kane
    Harry Kane Bekanntes Mitglied
    1. Deine Methode gibBeschreibung der Gegenstand-Klasse gibt den Wert der Variablen "beschreibung" zurück. Diese Variable wird aber nirgendwo initialisiert, nur die Variable "gegenstandBeschreibung".
    2. Selbst wenn aktuellerGegenstand.gibBeschreibung() etwas zurückgeben würde: in deiner gegenstaendeAnzeigen()-Methode der Raum-Klasse machst du mit den Rückgabewerten von aktuellerGegenstand.gibBeschreibung() gar nix. Du iterierst über die Gegenstände, holst die Beschreibung des Gegenstandes, machst damit aber nichts, gehst dann zum nächsten Gegenstand, machst mit dem Rückgabewert wieder nichts, usw. bis alle Gegenstände durchlaufen sind.
    3. Selbst wenn aktuellerRaum.gegenstaendeAnzeigen() etwas sinnvolles tun würde, wird diese Methode gar nicht aufgerufen. Die Methode "umsehen" der Spiel-Klasse gibt nach wie vor nur den Rückgabewert von aktuellerRaum.gibLangeBeschreibung() aus.
    So, und jetzt bitte wieder deine Standardfrage "Und wie löse ich das Problem ?".
     
  3. Devanther
    Devanther Mitglied
    1. Die Variable "beschreibung" wird doch initialisiert? Klasse Gegenstand.
    Code (Text):
     private String beschreibung;
    2.
    Wie schreibe ich die Methode gegensteandeAnzeigen() ? In der Klasse Raum.

    Code (Text):
    public void gegenstaendeAnzeigen()

        {
        for(Gegenstand aktuellerGegenstand: gegenstaende){
         aktuellerGegenstand.gibBeschreibung.keller.gegenstaendeAnzeigen();
        }
      }
    Was muss ich machen, damit eben im KELLER etwas ausgegeben wird? Ein Buch?
    Das ist so falsch. Was muss in dieser Methode getan werden? Das ist das Hauptproblem!

    3. Wie und an welcher Stelle muss ich aktuellerRaum.gegenstaendeAnzeigen() aufrufen,
    in der Spiel Klasse?


    Code (Text):
    private void umsehen()
        {
            System.out.println(aktuellerRaum.gibLangeBeschreibung());
            System.out.println(aktuellerRaum.gegenstaendeAnzeigen());
    }

    So? Jetzt müsste beim Befehl "look" , Methode umsehen() also, die Methode
    gegenstaendeAnzeigen() aus der Klasse Raum aufgerufen werden.
    Bleibt das Hauptproblem, wie ich gegenstaendeAnzeigen() schreiben soll!

    Sind meine Gedanken so richtig?
     
    Zuletzt bearbeitet: 13. Sep. 2017
  4. Harry Kane
    Harry Kane Bekanntes Mitglied
    Nein *riesenseufzer*. Die Variable wird lediglich deklariert. Sie bekommt nie einen Wert.
    Die Gedanken eventuell, aber für den resultierenden Code gibt es 0 von 10 möglichen Punkten. Das ist kein Programmieren, sondern nur rumraten.
    Z. B. hat aktuellerRaum.gegenstaendeAnzeigen() keinen Rückgabewert, den man mit System.out.println() ausgeben könnte.
    Wann fängst du endlich an zu studieren?
     
  5. Devanther
    Devanther Mitglied
    Code (Text):
    public Gegenstand(String beschreibung, int gewicht)
        {
            this.gegenstandBeschreibung = beschreibung; // Instanzvariable initialisieren
            this.gegenstandGewicht = gewicht;
            this.beschreibung = beschreibung;
            x = 0;
        }
    So?
    Oder auch noch im Konstruktor nen Parameter schreiben?

    1. Schritt jetzt: Wie schreibe ich gegenstaendeAnzeigen() ? (Klasse Raum)
    Ich weiss es nicht, wie man sieht -.-

    Ich müsste erst ne Ausbildung zum FIAE machen, dieses Jahr nicht mehr.
     
  6. Harry Kane
    Harry Kane Bekanntes Mitglied
    Schreibe dir eine Methode gibGegenstaendeAlsString, und baue die so ähnlich auf wie gibAusgaengeAlsString() mit einem String als Rückgabewert.
    Wie lange dauert die Ausbildung zum FIAE?
     
  7. Devanther
    Devanther Mitglied
    3 Jahre. Es ist zwar kein Informatik Studium aber wahrscheinlich auch schon schwer.
     
  8. AndiE
    AndiE Mitglied
    Das hast du falsch verstanden. Wann beschäftigst du dich mit Java so, dass du verstehst, was du machst? Das ist die Frage. Ich kann die sagen, dass ich mindestens fünf Sprachen quasi im Alleingang gelernt habe. Sprachen, von denen heute kaum mehr einer spricht, wie Basic und Forth. Auch die gesamte Java-Sache habe ich mir weitgehend im Selbststudium angeeignet. ich hatte zwar Vorkenntnisse, aber die kamen auch aus der Selbstedukation. Das Buch, das du hast, ist echt gut. Lese es, probiere es durch von Anfang an und lese parallel auch die Insel.
     
  9. Devanther
    Devanther Mitglied
    Code (Text):
    private String gibAusgaengeAlsString()
        {
            String ergebnis = "Ausgänge:";
            Set<String> keys = ausgaenge.keySet();
            for(String ausgang : keys)
                ergebnis += " " + ausgang;
            return ergebnis;
        }
    Ja, ich muss erstmal verstehen was gemacht wird, stimmt.
    Eine Aufgabe im Buch ist auch zu beschreiben was diese Methode macht....die habe ich ausgelassen -.-
    Was wird da gemacht? Ich weiss es nicht.
     
  10. Harry Kane
    Harry Kane Bekanntes Mitglied
    Was ich eigentlich wissen wollte, war, wie lange der TE noch Ressourcen in ein offensichtlich sinnloses Unterfangen stecken will.
    Ich weiss nicht, was in der Ausbildung zum FIAE oder im Studium gefordert wird, bzw. wie viel man da mit Auswendiglernen reissen kann. Sobald es nämlich ans Verstehen geht, wird der TE ziemlich schnell ziemlich frustrierende Erfahrungen machen. Es ist eine Sache, wenn man über Monate in einem Forum immer wieder zu hören bekommt, dass man fürs Programmieren ziemlich unbegabt ist, aber eine ganz andere, wenn einem sowas im realen Leben vermittelt wird.
    Sowas meine ich. Du hast den Code vor Augen, aber verstehst ihn nicht. Wie willst du jemals eine Klausur oder eine Prüfung bestehen?
     
Die Seite wird geladen...

Projekt Zuul - Ähnliche Themen

Java Projekt nach JavaFX convertieren
Java Projekt nach JavaFX convertieren im Forum AWT, Swing, JavaFX & SWT
Java Projekt, Online-Datenabfrage, Visualisierung
Java Projekt, Online-Datenabfrage, Visualisierung im Forum Allgemeine Java-Themen
JavaFX, Verweis auf Datei im Projekt
JavaFX, Verweis auf Datei im Projekt im Forum Java Basics - Anfänger-Themen
JavaEE WebApplication - Erstes Projekt
JavaEE WebApplication - Erstes Projekt im Forum Allgemeine Java-Themen
Projekt Fußballmanager – nutze deine Chance
Projekt Fußballmanager – nutze deine Chance im Forum Private Stellangebote und Stellensuche von Usern
Status des Themas:
Es sind keine weiteren Antworten möglich.
Thema: Projekt Zuul