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*

123
Raum.java
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) { */
ausgaenge.put(richtung, raum); public void setzeAusgaenge(Raum norden, Raum osten,
} 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 * @return die Beschreibung dieses Raums.
* */
* @param richtung public String gibBeschreibung()
* Die Richtung (north, east, south, west) {
* @return Der nächste Raum return beschreibung;
*/ }
public Raum gibAusgang(String richtung) {
return ausgaenge.get(richtung);
}
/**
* @return die Beschreibung dieses Raums.
*/
public String gibBeschreibung() {
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,217 +1,215 @@
/** /**
* 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 Parser parser;
private final static String SOUTH = "south"; private Raum aktuellerRaum;
private final static String WEST = "west";
private Parser parser; /**
private Raum aktuellerRaum; * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
*/
public Spiel()
{
raeumeAnlegen();
parser = new Parser();
}
/** /**
* Erzeuge ein Spiel und initialisiere die interne Raumkarte. * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
*/ */
public Spiel() { private void raeumeAnlegen()
raeumeAnlegen(); {
parser = new Parser(); Raum draussen, hoersaal, cafeteria, labor, buero;
}
/** // die Räume erzeugen
* Erzeuge alle Räume und verbinde ihre Ausgänge miteinander. draussen = new Raum("vor dem Haupteingang der Universität");
*/ hoersaal = new Raum("in einem Vorlesungssaal");
private void raeumeAnlegen() { cafeteria = new Raum("in der Cafeteria der Uni");
Raum draussen, hoersaal, cafeteria, labor, buero; labor = new Raum("in einem Rechnerraum");
buero = new Raum("im Verwaltungsbüro der Informatik");
draussen = new Raum("vor dem Haupteingang der Universität"); // die Ausgänge initialisieren
hoersaal = new Raum("in einem Vorlesungssaal"); draussen.setzeAusgaenge(null, hoersaal, labor, cafeteria);
cafeteria = new Raum("in der Cafeteria der Uni"); hoersaal.setzeAusgaenge(null, null, null, draussen);
labor = new Raum("in einem Rechnerraum"); cafeteria.setzeAusgaenge(null, draussen, null, null);
buero = new Raum("im Verwaltungsbüro der Informatik"); labor.setzeAusgaenge(draussen, buero, null, null);
buero.setzeAusgaenge(null, null, null, labor);
draussen.setzeAusgaenge(EAST, hoersaal); aktuellerRaum = draussen; // das Spiel startet draussen
draussen.setzeAusgaenge(SOUTH, labor); }
draussen.setzeAusgaenge(WEST, cafeteria);
hoersaal.setzeAusgaenge(WEST, draussen); /**
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
* in einer Schleife.
*/
public void spielen()
{
willkommenstextAusgeben();
cafeteria.setzeAusgaenge(EAST, draussen); // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
// und führen sie aus, bis das Spiel beendet wird.
labor.setzeAusgaenge(NORTH, draussen); boolean beendet = false;
labor.setzeAusgaenge(EAST, buero); while (! beendet) {
Befehl befehl = parser.liefereBefehl();
beendet = verarbeiteBefehl(befehl);
}
System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
}
buero.setzeAusgaenge(WEST, labor); /**
* Einen Begrüssungstext 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("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();
}
aktuellerRaum = draussen; /**
} * 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()) {
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels in einer System.out.println("Ich weiss nicht, was Sie meinen...");
* Schleife. return false;
*/ }
public void spielen() { String befehlswort = befehl.gibBefehlswort();
willkommenstextAusgeben(); if (befehlswort.equals("help")) {
hilfstextAusgeben();
}
else if (befehlswort.equals("go")) {
wechsleRaum(befehl);
}
else if (befehlswort.equals("quit")) {
moechteBeenden = beenden(befehl);
}
// Die Hauptschleife. Hier lesen wir wiederholt Befehle ein return moechteBeenden;
// und führen sie aus, bis das Spiel beendet wird. }
boolean beendet = false; // Implementierung der Benutzerbefehle:
while (!beendet) {
Befehl befehl = parser.liefereBefehl();
beendet = verarbeiteBefehl(befehl);
}
System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
}
/** /**
* Einen Begrüssungstext für den Spieler ausgeben. * Gib Hilfsinformationen aus.
*/ * Hier geben wir eine etwas alberne und unklare Beschreibung
private void willkommenstextAusgeben() { * aus, sowie eine Liste der Befehlswörter.
System.out.println(); */
System.out.println("Willkommen zu Zuul!"); private void hilfstextAusgeben()
System.out {
.println("Zuul ist ein neues, unglaublich langweiliges Spiel."); System.out.println("Sie haben sich verlaufen. Sie sind allein.");
System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen."); System.out.println("Sie irren auf dem Unigelände herum.");
System.out.println(); System.out.println();
rauminfoAusgeben(); System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
} System.out.println(" go quit help");
}
/** /**
* Verarbeite einen gegebenen Befehl (führe ihn aus). * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
* * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
* @param befehl * aus.
* Der zu verarbeitende Befehl. */
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst. private void wechsleRaum(Befehl befehl)
*/ {
private boolean verarbeiteBefehl(Befehl befehl) { if(!befehl.hatZweitesWort()) {
boolean moechteBeenden = false; // Gibt es kein zweites Wort, wissen wir nicht, wohin...
System.out.println("Wohin möchten Sie gehen?");
return;
}
if (befehl.istUnbekannt()) { String richtung = befehl.gibZweitesWort();
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);
}
return moechteBeenden; // Wir versuchen, den Raum zu verlassen.
} 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;
}
// Implementierung der Benutzerbefehle: if (naechsterRaum == null) {
System.out.println("Dort ist keine Tür!");
}
else {
aktuellerRaum = naechsterRaum;
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();
}
}
/** /**
* Gib Hilfsinformationen aus. Hier geben wir eine etwas alberne und unklare * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
* Beschreibung aus, sowie eine Liste der Befehlswörter. * ob das Spiel wirklich beendet werden soll.
*/ * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
private void hilfstextAusgeben() { */
System.out.println("Sie haben sich verlaufen. Sie sind allein."); private boolean beenden(Befehl befehl)
System.out.println("Sie irren auf dem Unigelände herum."); {
System.out.println(); if(befehl.hatZweitesWort()) {
System.out.println("Ihnen stehen folgende Befehle zur Verfügung:"); System.out.println("Was soll beendet werden?");
System.out.println(" go quit help"); return false;
} }
else {
/** return true; // Das Spiel soll beendet werden.
* 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;
rauminfoAusgeben();
}
}
/**
* "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 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();
}
} }