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
=======
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
>>>>>>> 48ee561645428ff48d44bf22aa7842719ae898e0
# Mobile Tools for Java (J2ME)
.mtj.tmp/
@ -7,6 +19,12 @@
*.jar
*.war
*.ear
<<<<<<< HEAD
=======
*.zip
*.tar.gz
*.rar
>>>>>>> 48ee561645428ff48d44bf22aa7842719ae898e0
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
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.
*
@ -15,76 +10,56 @@ import java.util.Set;
* @author Michael Kölling und David J. Barnes
* @version 31.07.2011
*/
public class Raum {
private String beschreibung;
private HashMap<String, Raum> ausgaenge;
public class Raum
{
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
* 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;
this.ausgaenge = new HashMap<>();
}
/**
* 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;
}
/**
* Definiert die Ausgänge dieses Raums.
*
* @param richtung
* Die Richtung (north, east, south, west)
* @param raum
* Der nächste Raum
*/
public void setzeAusgaenge(String richtung, Raum raum) {
ausgaenge.put(richtung, raum);
}
/**
* Definiere die Ausgänge dieses Raums. Jede Richtung
* führt entweder in einen anderen Raum oder ist 'null'
* (kein Ausgang).
* @param norden Der Nordausgang.
* @param osten Der Ostausgang.
* @param sueden Der Südausgang.
* @param westen Der Westausgang.
*/
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
*
* @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.
*/
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();
}
/**
* @return die Beschreibung dieses Raums.
*/
public String gibBeschreibung()
{
return beschreibung;
}
}

View File

@ -1,217 +1,215 @@
/**
* 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!
* 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.
* Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
* an ihr die Methode "spielen" aufgerufen werden.
*
* Diese Instanz 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.
* Diese Instanz 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
* @author Michael Kölling und David J. Barnes
* @version 31.07.2011
*/
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";
public class Spiel
{
private Parser parser;
private Raum aktuellerRaum;
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.
*/
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;
/**
* 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");
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.setzeAusgaenge(null, hoersaal, labor, 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);
draussen.setzeAusgaenge(EAST, hoersaal);
draussen.setzeAusgaenge(SOUTH, labor);
draussen.setzeAusgaenge(WEST, cafeteria);
aktuellerRaum = draussen; // das Spiel startet draussen
}
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);
labor.setzeAusgaenge(EAST, buero);
boolean beendet = false;
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;
/**
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels in einer
* Schleife.
*/
public void spielen() {
willkommenstextAusgeben();
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);
}
// Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
// und führen sie aus, bis das Spiel beendet wird.
return moechteBeenden;
}
boolean beendet = false;
while (!beendet) {
Befehl befehl = parser.liefereBefehl();
beendet = verarbeiteBefehl(befehl);
}
System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
}
// Implementierung der Benutzerbefehle:
/**
* 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();
rauminfoAusgeben();
}
/**
* 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:");
System.out.println(" go quit help");
}
/**
* 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;
/**
* 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;
}
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);
}
String richtung = befehl.gibZweitesWort();
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
* 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:");
System.out.println(" go quit help");
}
/**
* 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();
}
/**
* "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.
}
}
}