Erste Schritte Projekt Zuul

Status
Nicht offen für weitere Antworten.

Devanther

Top Contributor
Hallo,

neues Projekt:
Code:
/**
*  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;
      
    /**
     * 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;
    
        // 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");
      
        // 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);

        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.");
    }

    /**
     * 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("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.
        }
    }
}

Es geht hier darum, ein eigenes Spiel zu programmieren.
Es ist die erste von vielen Aufgaben.

Aufgabe:
Als ersten Schritt sollen Sie die Methode raeumeAnlegen so ändern, dass sie
die Räume und Ausgänge für ihr Spiel anlegt. Testen Sie auch!

Sind die Räume und Ausgänge richtig angelegt? Wie kann ich das testen?
Wenn ich eine Instanz der Klasse "Spiel" erstelle und die Methode
void spielen() aufrufe, dann kann ich erstmal nur 3 Befehle,
go, quit und help eingeben.
Wie teste ich, ob bisher alles richtig angelegt ist?
 

Joose

Top Contributor
Es geht hier darum, ein eigenes Spiel zu programmieren.
Was bei deinem "Grundwissen" wieder mal kein programmieren wird sondern eine Ratespiel.
Es ist die erste von vielen Aufgaben.
... und der erste von vielen Threads

Sind die Räume und Ausgänge richtig angelegt? Wie kann ich das testen?
Wenn ich eine Instanz der Klasse "Spiel" erstelle und die Methode
void spielen() aufrufe, dann kann ich erstmal nur 3 Befehle,
go, quit und help eingeben.
Wie teste ich, ob bisher alles richtig angelegt ist?

Entweder steht in dem Buch, wo du dieses Aufgabe her hast, genauer beschrieben wie man diese Spiel bedient oder es gibt bei dem schon vorhandenen Code auch eine entsprechende Anleitung/ReadMe Datei.
Ansonsten lies dich in das Programm ein und überlege was du für Befehle eingeben musst damit du die Räume und Ausgänge testen kannst. Bewege dich zwischen den Räumen hin und her und schau ob es logisch ist.
Wenn du von Raum A nach Westen gehst und dann direkt wieder nach Osten solltest du auch wieder in Raum A landen ;)
 

Devanther

Top Contributor
Ansonsten lies dich in das Programm ein und überlege was du für Befehle eingeben musst damit du die Räume und Ausgänge testen kannst. Bewege dich zwischen den Räumen hin und her und schau ob es logisch ist.

Das ist ja gerade das Problem. Ich kann es nicht testen. Ich kann mich nicht von Raum zu Raum bewegen.
 

Joose

Top Contributor

Joose

Top Contributor
ja, danke! Das mit "go west" funktioniert tatsächlich.
Ich kann mich von Raum zu Raum bewegen.
Warum sag ich dir oben du sollst dich ins Programm einlesen? Damit du selber rausfindest mit welchem Befehl du den Raum wechseln kannst ;)
Das gehört auch zum Programmieren dazu -> Code lesen und verstehen können
 

Devanther

Top Contributor
Code:
public String gibBeschreibung()
    {
    return;
    }

Wie muss ich die return Anweisung schreiben? In der Klasse Raum.

Das andere sollen wohl Attribute der Klasse Raum sein westAusgang ... etc. und hier brauchst du enstsprechende getter-Methoden weil die Attribute sicher private sind

Ja, wie mache ich das? Dass mit den getter-Methoden?
 

Devanther

Top Contributor
Code:
public String gibBeschreibung()
    {
    return beschreibung;
    }

ok^^ eine Fehlermeldung weniger!

https://panjutorials.de/tutorials/der-ultimative-java-kurs/lektionen/setter-und-getter/
Das hab ich mir auch schon angesehen.

Klasse Raum:
Code:
import java.util.Set;
import java.util.HashMap;

/**
* 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
   
   
    /**
     * 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>();
    }
   
    public String gibBeschreibung()
    {
    return beschreibung;
    }   
   
    /**
     * 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();
    }

    /**
     * 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;
    }

    /**
     * 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.
     */
    public Raum gibAusgang(String richtung)
    {
        return ausgaenge.get(richtung);
    }
}
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Wie kamst du eigentlich darauf eine Methode gibBeschreibung() aufrufen zu wollen ? Es gibt ja schon Methoden gibKurzBeschreibung() und gibLangeBeschreibung() ! Warum verwendest du nicht einfach diese ? Ich wüsste nämlich nicht was man noch für andere Beschreibung erstellen könnte. Und ausserdem ist deine gibBeschreibung ja exakt das gleiche wie gibKurzeBeschreibung() !
 

Devanther

Top Contributor
Wie kamst du eigentlich darauf eine Methode gibBeschreibung() aufrufen zu wollen ? Es gibt ja schon Methoden gibKurzBeschreibung() und gibLangeBeschreibung() ! Warum verwendest du nicht einfach diese ? Ich wüsste nämlich nicht was man noch für andere Beschreibung erstellen könnte. Und ausserdem ist deine gibBeschreibung ja exakt das gleiche wie gibKurzeBeschreibung() !

Ich glaube, dass ist so gewollt^^ Dass viel Code überflüssig ist bzw doppelt/dreifach vorhanden ist.
Es geht im Laufe des Projektes das zu berichtigen!
Erstmal müsste ich wissen, wie ich die Fehlermeldungen beseitigen kann,
dann gehts erst weiter. Dann werde ich weitere Verbesserungen vornehmen.
https://imgur.com/a/RnR3d
 

JStein52

Top Contributor
Du rufst einfach auf:
Code:
if (aktuellerRaum.gibAusgang("north") != null {
...
}
usw. für die anderen Richtungen
 

Devanther

Top Contributor
Wo soll ich das aufrufen?
Wie heisst dann die Methode: private void rauminfoAusgeben()
Ich verstehe leider nicht was du mir sagen willst.
 
X

Xyz1

Gast
Wo kommen diese Aufgaben und die Klasse Raum (von 2011) eigentlich her?
Und wie sollen wir dir helfen? :(
 

Devanther

Top Contributor
Von der CD, BlueJ

Es müssen einige Änderungen/Verbesserungen an diesem Projekt vorgenommen werden.
So die Fehlermeldungen sind jetzt alle weg!
Wie teste ich diese Methode?
Wenn ich ne Instanz von Spiel erzeuge sehe ich diese Methode gar nicht.
 
X

Xyz1

Gast
Von der CD, BlueJ
Es gibts tausende CDs.... du müsstest schon etwas genauer werden. SteuerCD :rolleyes:
Änderungen/Verbesserungen
Ergänzungen? Sind das Hausaufgaben?....
Wie teste ich diese Methode?
Wenn ich ne Instanz von Spiel erzeuge sehe ich diese Methode gar nicht.
Womit möchtest du testen? eventuell ist BlueJ gar nicht das richtig werkzeug.

Les dir zum Beispiel mal solche Blogs durch, wenn du etwas lernen möchtest: http://www.tippscom.de/java-programmieren-lernen/
 

Devanther

Top Contributor
Es gibts tausende CDs.... du müsstest schon etwas genauer werden. SteuerCD :rolleyes:

Es gibt zu dem Buch eine spezielle CD mit allen Projekten, leider ohne Lösungen.

Ergänzungen? Sind das Hausaufgaben?....

Nein. Man soll halt die Projekte von der CD bearbeiten.
Und im Buch stehen die Aufgaben dazu, nicht immer so leicht^^

Womit möchtest du testen? eventuell ist BlueJ gar nicht das richtig werkzeug.

Wie kann ich die Datei ohne BlueJ ausführen?
Wenn ich in BlueJ auf Projekt ->Als jar.Archiv speichern gehe und die Datei als jar. Datei speichere, kann
ich diese Datei mit nem Doppelklick nicht ausführen. Auch Kommandozeile funktioniert nicht.

Code:
 public static void main(String[] args)
    {
        Spiel spiel = new Spiel();
        spiel.spielen();
    }
Die main-Methode hab ich in Spiel hinzugefügt!
Wie starte ich dieses Spiel ohne BlueJ?
 
X

Xyz1

Gast
nicht immer so leicht^^
Welches Buch, welche CD, welches Projekt? Ich bin genau so schlauer wie vorher.

Es wär denkbar, das BlueJ das ausführen der main() nicht unterstützt.

Guuuuuut, das bringt keinem etwas, hier etwas zu schreiben!

Sprecht mit eurem Toaster!!!!!!
 

Devanther

Top Contributor
Code:
import java.util.Set;
import java.util.HashMap;

/**
* 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 nordausgang;
    private Raum suedausgang;
    private Raum ostausgang;
    private Raum westausgang;
  
  
    /**
     * 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>();
    }
  
    public String gibBeschreibung()
    {
    return beschreibung;
    }  
  
    public Raum gibAusgang(String richtung)
    {
        if(richtung.equals("north")) {
            return nordausgang;
        }
        if(richtung.equals("east")) {
            return ostausgang;
        }   
        if(richtung.equals("south")) {
            return suedausgang;
        }
        if(richtung.equals("west")) {
            return westausgang;
        }
     return null;
    }
    }
  
  
  
    /**
     * 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();
    }

    /**
     * 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;
    }

    /**
     * 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.
     */
    public Raum gibAusgang(String richtung)
    {
        return ausgaenge.get(richtung);
    }
}

Ich hab die Methode gibAusgang() hinzugefügt und jetzt kommen unterhalb dieser Methode
Fehlermeldungen. Warum? Wie verbessere ich das?

edit: Sorry, Klammer zuviel.
 
X

Xyz1

Gast
Das bringt nichts.
Das ist keine Problembeschreibung.
Wieso externe Seiten?
Wieso Grafik riesig?
Wieso nicht Java code tags?
Wieso nicht mal daran gedacht, den obigen Blog zu lesen?
Hat jemand BlueJ?
Ja aber du beabsichtigst ja mit dieser Frage etwas anderes, dass sich jemand bereit erklärt , zu helfen. :confused:
Nicht irritiert sein, aber ich kann hier nüx helfen.
 
X

Xyz1

Gast
Das ist für mich Trolling. Ich weiß nicht, ob ernst gemeint oder nicht! o_O
 

Devanther

Top Contributor
Klasse Spiel:
Code:
/**
*  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;
 
    
    /**
     * 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;
  
        // 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");
    
        // 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);

        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 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("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:
import java.util.Set;
import java.util.HashMap;

/**
* 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 nordausgang;
    private Raum suedausgang;
    private Raum ostausgang;
    private Raum westausgang;
 
 
    /**
     * 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>();
    }
 
    public String gibBeschreibung()
    {
    return beschreibung;
    }
 
    public Raum gibAusgang(String richtung)
    {
        if(richtung.equals("north")) {
            return nordausgang;
        }
        if(richtung.equals("east")) {
            return ostausgang;
        } 
        if(richtung.equals("south")) {
            return suedausgang;
        }
        if(richtung.equals("west")) {
            return westausgang;
        }
     return null;
    }
 
 
 
 
    /**
     * 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();
    }

    /**
     * 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;
    }

    /**
     * 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.
     */
 
}

Aufgabe ist:
Führen Sie eine ähnliche Änderung auch an der Methode rauminfoAusgeben in der Klasse
Spiel durch, sodass die Details der Ausgänge nun von Raum und nicht mehr von
Spiel geliefert werden. Definieren Sie dazu eine Methode in der Klasse Raum mit folgender Signatur.

/**
* Liefere eine Beschreibung der Ausgänge dieses Raumes,
* beispielsweise
* "Ausgänge: north west".
* @Return eine Beschreibung der Ausgänge dieses Raumes.
*/
public String gibAusgaengeAlsString()


Wie schreibe ich die Methode gibAusgaengeAlsString in der Klasse Raum?
Und wie verändere ich die Methode rauminfoAusgeben in der Klasse
Spiel
?
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Wie schreibe ich die Methode gibAusgaengeAlsString in der Klasse Raum?
Und wie verändere ich die Methode rauminfoAusgeben in der Klasse
Spiel
?

Naja, du öffnest die Klasse, und fängst an zu tippen... ;)

Du weißt sicherlich schon was Strings sind, oder?
Für die erste Frage musst du einfach nur die Namen der Ausgänge, die es gibt, zusammensetzen zu einem String, das sollte doch schaffbar sein?
In der Klasse spiel musst du dann nur diese Methode an der entsprechenden Stelle ausgeben - wenn du verstanden hast, was die Methoden machen, sollte das kein Problem für dich sein
 

Devanther

Top Contributor
Für die erste Frage musst du einfach nur die Namen der Ausgänge, die es gibt, zusammensetzen zu einem String, das sollte doch schaffbar sein?

Ich verstehe nicht was ich machen soll -.-
Die Namen der Ausgänge sind bis jetzt: north, south, west, east und das zu einem String zusammensetzen?

Du weißt sicherlich schon was Strings sind, oder?
Ich verstehe darunter eine Zeichenkette.
 

Devanther

Top Contributor
Code:
public String gibAusgaengeAlsString()
    {
     String ergebnis = "Ausgänge: ";
     if (nordausgang != null)
        ergebnis += "north";
     if (ostausgang != null)
        ergebnis += "east";
     if (suedausgang != null)
        ergebnis += "south";
     if (westausgang != null)
        ergebnis += "west"; 
  
        return ergebnis;
      
    }

Ich weiss nicht was genau gemeint ist, ist das damit gemeint?
Ich lese auch noch grade das Buch dazu:
https://www.amazon.de/Einführung-Java-Ideal-Studium-Ausbildung/dp/383622867X/ref=sr_1_1?ie=UTF8&qid=1504457618&sr=8-1&keywords=einführung+in+java
 

Devanther

Top Contributor
Code:
public String gibAusgaengeAlsString()
    {
     String ergebnis = "Ausgänge: ";
     if (nordausgang != null)
        ergebnis += "north";
     if (ostausgang != null)
        ergebnis += "east";
     if (suedausgang != null)
        ergebnis += "south";
     if (westausgang != null)
        ergebnis += "west";
 
        return ergebnis;
     
    }

Diesen Code?
 

Javinner

Top Contributor
Leider nicht.
Was wird da getan?
Es scheint mir, das hier jeweils abgefragt wird, ob ein von den Objekten aktiv ist und wenn ja,
soll dieser Wert dann geliefert werden.
Warum findet hier keine if/else Abfrage statt? Ist es ein Bestandteil der Aufgabe, den Code zu verbessern oder kann immer nur ein Objekt aktiv sein?
Habe das Buch leider nicht und kann nicht nachschauen.

edit:
Irgendwie werde ich das Gefühl nicht los, du willst es erzwingen.
Hör auf Menschen, die dir helfen wollen und tue dir selbst den Gefallen:
lerne von Anfang an
 

Devanther

Top Contributor
Code:
if (nordausgang != null)
        ergebnis += "north";

Null bedeutet, dass eine Variable auf kein Objekt zeigt.
!= (ungleich null) bedeutet also dann , dass wenn nordausgang auf ein Objekt zeigt,
ergebnis geliefert wird.
ergebnis += ist ne Kurzschreibweise für: ergebnis = ergebnis + north

Ist diese Aufgabe dann also gelöst?
Mit der Methode, die ich oben gepostet habe.

Und wie verändere ich die Methode rauminfoAusgeben in der Klasse
Spiel
?

Die nächsten Aufgaben werden wieder interessanter...
da müssen noch weitere Ausgänge, Räume etc hinzugefügt werden.
 

AndiE

Top Contributor
Wie lautet denn das Ergebnis von: "ergebis=ergebnis+ "north";"? Was sollte die Funktion für den Raum "draußen" ausgeben?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Github Projekt starten/anbinden in eclipse Java Basics - Anfänger-Themen 10
B VISA.jar in Projekt einbinden (Library) Java Basics - Anfänger-Themen 5
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
C externe jar einbinden in Eclipse-Projekt Java Basics - Anfänger-Themen 2
B non-modular dependency in modularem Projekt verwenden Java Basics - Anfänger-Themen 3
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
J Projekt neu übersetzen Java Basics - Anfänger-Themen 3
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
S Video Projekt Java Basics - Anfänger-Themen 28
A Hilfe bei Java Projekt Java Basics - Anfänger-Themen 4
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
D Gemeinsames Projekt Java Basics - Anfänger-Themen 13
J Veranstaltungs Projekt Java Basics - Anfänger-Themen 2
K Java Projekt Hilfe Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
Dimax In Java File (nicht in Java Projekt) mysql Driver importieren Java Basics - Anfänger-Themen 3
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
W Neues Lern-Projekt gesucht Java Basics - Anfänger-Themen 8
R Java-Projekt im FTP hochladen Java Basics - Anfänger-Themen 6
C Projekt öffnen BlueJ Java Basics - Anfänger-Themen 1
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
A Wie kann ich folgendes Projekt realisieren? Java Basics - Anfänger-Themen 4
B Derzeit JSF - Projekt, später soll MobileApp folgen Java Basics - Anfänger-Themen 5
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
H java erstes projekt Java Basics - Anfänger-Themen 502
B Erste Schritte nio oder io für neues Projekt Java Basics - Anfänger-Themen 1
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
alkaA Intellij Java Datei aus nicht Projekt ausführen? Java Basics - Anfänger-Themen 2
D Erste Schritte Projekt in Ecplise in einer .zip Datei speichern Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
F Git Projekt im Build Path Java Basics - Anfänger-Themen 3
Edin Sinnvolle Projekt-/Codepräsentation Java Basics - Anfänger-Themen 2
L Suche ein sampel Projekt Java Basics - Anfänger-Themen 2
L PROBLEM! "Bug" bei Konto-Projekt! Java Basics - Anfänger-Themen 7
J App.jar muss im Projekt App als Bibliothek vorhanden sein?! Java Basics - Anfänger-Themen 1
J Projekt nicht editierbar modifizieren (NetBeans 8) Java Basics - Anfänger-Themen 10
L Compiler-Fehler AndroidStudio Projekt startet nicht mehr!!! Java Basics - Anfänger-Themen 2
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M Hilfe bei Roulette Projekt Java Basics - Anfänger-Themen 7
M bestehendes Projekt als Applet speichern Java Basics - Anfänger-Themen 2
M Netbeans Projekt lauffähig abspeichern Java Basics - Anfänger-Themen 3
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
S Best Practice Projekt als .JAR exportiert Java Basics - Anfänger-Themen 4
H Ist Java überhaupt die richtige Sprache für das Projekt? Java Basics - Anfänger-Themen 8
elischa Eclipse Plugin Projekt, Maven Projekt und dependencies Java Basics - Anfänger-Themen 5
M Open Source Projekt mit Unit Tests gesucht Java Basics - Anfänger-Themen 5
T Java Projekt aufbau Java Basics - Anfänger-Themen 5
C java Projekt mit Xuggler exportieren Java Basics - Anfänger-Themen 9
H Menüführung Projekt Wecker Java Basics - Anfänger-Themen 5
S Klassen Externe Klasse in ein Projekt mit einbinden Java Basics - Anfänger-Themen 7
T Config: Projekt erkennt Javaversion nicht Java Basics - Anfänger-Themen 12
M Erste Schritte Heruntergeladenes Java Projekt lauffähig kriegen Java Basics - Anfänger-Themen 1
A Java Projekt Java Basics - Anfänger-Themen 1
1 Im Java Projekt eine txt datei einbinden? Java Basics - Anfänger-Themen 8
N Eclipse Projekt im Terminal (Mac) öffnen.... Java Basics - Anfänger-Themen 4
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
M Bekomm altes Uni-Projekt in java nicht mehr zum laufen Java Basics - Anfänger-Themen 7
H Empfohlene Projekt-Struktur und mehr ... Java Basics - Anfänger-Themen 5
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
I Fehler mit kurzem Projekt Java Basics - Anfänger-Themen 7
J Schule Java Projekt Java Basics - Anfänger-Themen 8
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
J Projekt im anderen Projekt benutzen Java Basics - Anfänger-Themen 2
B Projekt öffnen (Eclipse) Java Basics - Anfänger-Themen 2
L Erstes Projekt aus zwei Projekten Java Basics - Anfänger-Themen 1
M Maven Dependency im Java Projekt Java Basics - Anfänger-Themen 1
L Eclipse Projekt überschreiben Java Basics - Anfänger-Themen 4
L Suche Programmier-Projekt mit Anleitung Java Basics - Anfänger-Themen 3
G Projekt: Webmeeting für Musiker Java Basics - Anfänger-Themen 12
R Anfängertipps für ein Projekt Java Basics - Anfänger-Themen 1
B [Projekt] CyberCafé Software Java Basics - Anfänger-Themen 13
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Projekt Java Anfänger Java Basics - Anfänger-Themen 28
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
J BlueJ Liste Würfel Projekt Java Basics - Anfänger-Themen 2
N Input/Output Exportieren Java Projekt Java Basics - Anfänger-Themen 6
M JSF Projekt erstellen unter Eclipse Java Basics - Anfänger-Themen 7
J Erste Schritte Hilfe bei absolutem Anfänger-Projekt Java Basics - Anfänger-Themen 4
S Projekt-Idee für testgetriebene Entwicklung gesucht Java Basics - Anfänger-Themen 2
D McDonalds - Java Projekt frage Java Basics - Anfänger-Themen 7
G Problem: Java Projekt als ausführbare Jar Exportieren (Eclipse) Java Basics - Anfänger-Themen 10
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
K Java Projekt als ausführbare Jar Exportieren (Eclipse) Problem Java Basics - Anfänger-Themen 24
E HILFE Projekt für die Schule--> Bilder einfügen Java Basics - Anfänger-Themen 9
N Kann man in einem Projekt nur eine Klasse ausführen? Java Basics - Anfänger-Themen 6
I Projekt aus .jar Sources erstellen Java Basics - Anfänger-Themen 10
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
D Auf anderes Projekt zugreifen Java Basics - Anfänger-Themen 25
H Entwicklung am selben Projekt im Netzwerk Java Basics - Anfänger-Themen 9
T Java Projekt als runnable jar file exportieren inklusive csv Dateien Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben