Initial commit of the source files.

This commit is contained in:
Bernhard Tellenbach 2017-10-23 13:20:05 +02:00
commit 4fcc9ce7fd
3 changed files with 260 additions and 269 deletions

18
.gitignore vendored
View File

@ -1,5 +1,17 @@
<<<<<<< HEAD
*.class *.class
=======
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
>>>>>>> 48ee561645428ff48d44bf22aa7842719ae898e0
# Mobile Tools for Java (J2ME) # Mobile Tools for Java (J2ME)
.mtj.tmp/ .mtj.tmp/
@ -7,6 +19,12 @@
*.jar *.jar
*.war *.war
*.ear *.ear
<<<<<<< HEAD
=======
*.zip
*.tar.gz
*.rar
>>>>>>> 48ee561645428ff48d44bf22aa7842719ae898e0
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid* hs_err_pid*

View File

@ -1,8 +1,3 @@
import java.util.HashMap;
import java.util.Set;
/** /**
* Diese Klasse modelliert Räume in der Welt von Zuul. * Diese Klasse modelliert Räume in der Welt von Zuul.
* *
@ -15,76 +10,56 @@ import java.util.Set;
* @author Michael Kölling und David J. Barnes * @author Michael Kölling und David J. Barnes
* @version 31.07.2011 * @version 31.07.2011
*/ */
public class Raum { public class Raum
private String beschreibung; {
private HashMap<String, Raum> ausgaenge; public String beschreibung;
public Raum nordausgang;
public Raum suedausgang;
public Raum ostausgang;
public Raum westausgang;
/** /**
* Erzeuge einen Raum mit einer Beschreibung. Ein Raum hat anfangs keine * Erzeuge einen Raum mit einer Beschreibung. Ein Raum
* Ausgänge. * hat anfangs keine Ausgänge.
* * @param beschreibung enthält eine Beschreibung in der Form
* @param beschreibung * "in einer Küche" oder "auf einem Sportplatz".
* enthält eine Beschreibung in der Form "in einer Küche" oder
* "auf einem Sportplatz".
*/ */
public Raum(String beschreibung) { public Raum(String beschreibung)
{
this.beschreibung = beschreibung; this.beschreibung = beschreibung;
this.ausgaenge = new HashMap<>();
} }
/** /**
* Definiert die Ausgänge dieses Raums. * Definiere die Ausgänge dieses Raums. Jede Richtung
* * führt entweder in einen anderen Raum oder ist 'null'
* @param richtung * (kein Ausgang).
* Die Richtung (north, east, south, west) * @param norden Der Nordausgang.
* @param raum * @param osten Der Ostausgang.
* Der nächste Raum * @param sueden Der Südausgang.
* @param westen Der Westausgang.
*/ */
public void setzeAusgaenge(String richtung, Raum raum) { public void setzeAusgaenge(Raum norden, Raum osten,
ausgaenge.put(richtung, raum); Raum sueden, Raum westen)
{
if(norden != null) {
nordausgang = norden;
}
if(osten != null) {
ostausgang = osten;
}
if(sueden != null) {
suedausgang = sueden;
}
if(westen != null) {
westausgang = westen;
} }
/**
* Gibt den Raum für eine Richtung zurück
*
* @param richtung
* Die Richtung (north, east, south, west)
* @return Der nächste Raum
*/
public Raum gibAusgang(String richtung) {
return ausgaenge.get(richtung);
} }
/** /**
* @return die Beschreibung dieses Raums. * @return die Beschreibung dieses Raums.
*/ */
public String gibBeschreibung() { public String gibBeschreibung()
{
return beschreibung; return beschreibung;
} }
/**
* Liefert eine Beschreibung der Ausgänge dieses Raumes, bespielsweise
* "Ausgänge: north west".
*
* @return eine Beschreibung der verfügbaren Ausgänge
*/
public String gibAusgaengeAlsString() {
String resultat = "Ausgänge:";
Set<String> ausgaengeSet = ausgaenge.keySet();
for (String ausgang : ausgaengeSet) {
resultat += " " + ausgang;
}
return resultat;
}
/**
* Liefert eine lange Beschreibung dieses Raumes, in der Form
* Sie sind in der Küche
* Ausgänge: north west
*
* @return eine lange Beschreibung dieses Raumes.
*/
public String gibLangeBeschreibung() {
return "Sie sind " + beschreibung + ".\n" + gibAusgaengeAlsString();
}
} }

View File

@ -1,35 +1,32 @@
/** /**
* Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul". * Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
* "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes Adventure-Game. Ein * "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
* Spieler kann sich in einer Umgebung bewegen, mehr nicht. Das Spiel sollte auf * Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
* jeden Fall ausgebaut werden, damit es interessanter wird! * 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 * Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
* Methode "spielen" aufgerufen werden. * an ihr die Methode "spielen" aufgerufen werden.
* *
* Diese Instanz erzeugt und initialisiert alle anderen Objekte der Anwendung: * Diese Instanz erzeugt und initialisiert alle anderen Objekte
* Sie legt alle Räume und einen Parser an und startet das Spiel. Sie wertet * der Anwendung: Sie legt alle Räume und einen Parser an und
* auch die Befehle aus, die der Parser liefert, und sorgt für ihre Ausführung. * 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 * @author Michael Kölling und David J. Barnes
* @version 31.07.2011 * @version 31.07.2011
*/ */
public class Spiel { public class Spiel
private final static String NORTH = "north"; {
private final static String EAST = "east";
private final static String SOUTH = "south";
private final static String WEST = "west";
private Parser parser; private Parser parser;
private Raum aktuellerRaum; private Raum aktuellerRaum;
/** /**
* Erzeuge ein Spiel und initialisiere die interne Raumkarte. * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
*/ */
public Spiel() { public Spiel()
{
raeumeAnlegen(); raeumeAnlegen();
parser = new Parser(); parser = new Parser();
} }
@ -37,36 +34,33 @@ public class Spiel {
/** /**
* Erzeuge alle Räume und verbinde ihre Ausgänge miteinander. * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
*/ */
private void raeumeAnlegen() { private void raeumeAnlegen()
{
Raum draussen, hoersaal, cafeteria, labor, buero; Raum draussen, hoersaal, cafeteria, labor, buero;
// die Räume erzeugen
draussen = new Raum("vor dem Haupteingang der Universität"); draussen = new Raum("vor dem Haupteingang der Universität");
hoersaal = new Raum("in einem Vorlesungssaal"); hoersaal = new Raum("in einem Vorlesungssaal");
cafeteria = new Raum("in der Cafeteria der Uni"); cafeteria = new Raum("in der Cafeteria der Uni");
labor = new Raum("in einem Rechnerraum"); labor = new Raum("in einem Rechnerraum");
buero = new Raum("im Verwaltungsbüro der Informatik"); buero = new Raum("im Verwaltungsbüro der Informatik");
draussen.setzeAusgaenge(EAST, hoersaal); // die Ausgänge initialisieren
draussen.setzeAusgaenge(SOUTH, labor); draussen.setzeAusgaenge(null, hoersaal, labor, cafeteria);
draussen.setzeAusgaenge(WEST, cafeteria); hoersaal.setzeAusgaenge(null, null, null, draussen);
cafeteria.setzeAusgaenge(null, draussen, null, null);
labor.setzeAusgaenge(draussen, buero, null, null);
buero.setzeAusgaenge(null, null, null, labor);
hoersaal.setzeAusgaenge(WEST, draussen); aktuellerRaum = draussen; // das Spiel startet draussen
cafeteria.setzeAusgaenge(EAST, draussen);
labor.setzeAusgaenge(NORTH, draussen);
labor.setzeAusgaenge(EAST, buero);
buero.setzeAusgaenge(WEST, labor);
aktuellerRaum = draussen;
} }
/** /**
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels in einer * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
* Schleife. * in einer Schleife.
*/ */
public void spielen() { public void spielen()
{
willkommenstextAusgeben(); willkommenstextAusgeben();
// Die Hauptschleife. Hier lesen wir wiederholt Befehle ein // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
@ -83,24 +77,37 @@ public class Spiel {
/** /**
* Einen Begrüssungstext für den Spieler ausgeben. * Einen Begrüssungstext für den Spieler ausgeben.
*/ */
private void willkommenstextAusgeben() { private void willkommenstextAusgeben()
{
System.out.println(); System.out.println();
System.out.println("Willkommen zu Zuul!"); System.out.println("Willkommen zu Zuul!");
System.out System.out.println("Zuul ist ein neues, unglaublich langweiliges Spiel.");
.println("Zuul ist ein neues, unglaublich langweiliges Spiel.");
System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen."); System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
System.out.println(); System.out.println();
rauminfoAusgeben(); System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
System.out.print("Ausgänge: ");
if(aktuellerRaum.nordausgang != null) {
System.out.print("north ");
}
if(aktuellerRaum.ostausgang != null) {
System.out.print("east ");
}
if(aktuellerRaum.suedausgang != null) {
System.out.print("south ");
}
if(aktuellerRaum.westausgang != null) {
System.out.print("west ");
}
System.out.println();
} }
/** /**
* Verarbeite einen gegebenen Befehl (führe ihn aus). * Verarbeite einen gegebenen Befehl (führe ihn aus).
* * @param befehl Der zu verarbeitende Befehl.
* @param befehl
* Der zu verarbeitende Befehl.
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
*/ */
private boolean verarbeiteBefehl(Befehl befehl) { private boolean verarbeiteBefehl(Befehl befehl)
{
boolean moechteBeenden = false; boolean moechteBeenden = false;
if(befehl.istUnbekannt()) { if(befehl.istUnbekannt()) {
@ -110,9 +117,11 @@ public class Spiel {
String befehlswort = befehl.gibBefehlswort(); String befehlswort = befehl.gibBefehlswort();
if (befehlswort.equals("help")) { if (befehlswort.equals("help")) {
hilfstextAusgeben(); hilfstextAusgeben();
} else if (befehlswort.equals("go")) { }
else if (befehlswort.equals("go")) {
wechsleRaum(befehl); wechsleRaum(befehl);
} else if (befehlswort.equals("quit")) { }
else if (befehlswort.equals("quit")) {
moechteBeenden = beenden(befehl); moechteBeenden = beenden(befehl);
} }
@ -122,10 +131,12 @@ public class Spiel {
// Implementierung der Benutzerbefehle: // Implementierung der Benutzerbefehle:
/** /**
* Gib Hilfsinformationen aus. Hier geben wir eine etwas alberne und unklare * Gib Hilfsinformationen aus.
* Beschreibung aus, sowie eine Liste der Befehlswörter. * Hier geben wir eine etwas alberne und unklare Beschreibung
* aus, sowie eine Liste der Befehlswörter.
*/ */
private void hilfstextAusgeben() { private void hilfstextAusgeben()
{
System.out.println("Sie haben sich verlaufen. Sie sind allein."); System.out.println("Sie haben sich verlaufen. Sie sind allein.");
System.out.println("Sie irren auf dem Unigelände herum."); System.out.println("Sie irren auf dem Unigelände herum.");
System.out.println(); System.out.println();
@ -134,10 +145,12 @@ public class Spiel {
} }
/** /**
* Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt, wechsele * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
* in den neuen Raum, ansonsten gib eine Fehlermeldung aus. * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
* aus.
*/ */
private void wechsleRaum(Befehl befehl) { private void wechsleRaum(Befehl befehl)
{
if(!befehl.hatZweitesWort()) { if(!befehl.hatZweitesWort()) {
// Gibt es kein zweites Wort, wissen wir nicht, wohin... // Gibt es kein zweites Wort, wissen wir nicht, wohin...
System.out.println("Wohin möchten Sie gehen?"); System.out.println("Wohin möchten Sie gehen?");
@ -147,71 +160,56 @@ public class Spiel {
String richtung = befehl.gibZweitesWort(); String richtung = befehl.gibZweitesWort();
// Wir versuchen, den Raum zu verlassen. // Wir versuchen, den Raum zu verlassen.
Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung); Raum naechsterRaum = null;
if(richtung.equals("north")) {
naechsterRaum = aktuellerRaum.nordausgang;
}
if(richtung.equals("east")) {
naechsterRaum = aktuellerRaum.ostausgang;
}
if(richtung.equals("south")) {
naechsterRaum = aktuellerRaum.suedausgang;
}
if(richtung.equals("west")) {
naechsterRaum = aktuellerRaum.westausgang;
}
if (naechsterRaum == null) { if (naechsterRaum == null) {
System.out.println("Dort ist keine Tür!"); System.out.println("Dort ist keine Tür!");
} else { }
else {
aktuellerRaum = naechsterRaum; aktuellerRaum = naechsterRaum;
rauminfoAusgeben(); System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
System.out.print("Ausgänge: ");
if(aktuellerRaum.nordausgang != null) {
System.out.print("north ");
}
if(aktuellerRaum.ostausgang != null) {
System.out.print("east ");
}
if(aktuellerRaum.suedausgang != null) {
System.out.print("south ");
}
if(aktuellerRaum.westausgang != null) {
System.out.print("west ");
}
System.out.println();
} }
} }
/** /**
* "quit" wurde eingegeben. Überprüfe den Rest des Befehls, ob das Spiel * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
* wirklich beendet werden soll. * ob das Spiel wirklich beendet werden soll.
*
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
*/ */
private boolean beenden(Befehl befehl) { private boolean beenden(Befehl befehl)
{
if(befehl.hatZweitesWort()) { if(befehl.hatZweitesWort()) {
System.out.println("Was soll beendet werden?"); System.out.println("Was soll beendet werden?");
return false; return false;
} else { }
else {
return true; // Das Spiel soll beendet werden. return true; // Das Spiel soll beendet werden.
} }
} }
private void rauminfoAusgeben() {
// Lösung A6
System.out.println(aktuellerRaum.gibLangeBeschreibung());
// Lösung A3
// System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
// Lösung A5
// System.out.println(aktuellerRaum.gibAusgaengeAlsString());
// Lösung A3
// System.out.print("Ausgänge: ");
// if (aktuellerRaum.nordausgang != null) {
// System.out.print("north ");
// }
// if (aktuellerRaum.ostausgang != null) {
// System.out.print("east ");
// }
// if (aktuellerRaum.suedausgang != null) {
// System.out.print("south ");
// }
// if (aktuellerRaum.westausgang != null) {
// System.out.print("west ");
// }
// System.out.println();
// Lösung A4
// 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();
}
} }