Initial commit of the source files.
This commit is contained in:
commit
4fcc9ce7fd
|
@ -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*
|
||||
|
|
97
Raum.java
97
Raum.java
|
@ -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".
|
||||
* 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) {
|
||||
public Raum(String beschreibung)
|
||||
{
|
||||
this.beschreibung = beschreibung;
|
||||
this.ausgaenge = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Definiert die Ausgänge dieses Raums.
|
||||
*
|
||||
* @param richtung
|
||||
* Die Richtung (north, east, south, west)
|
||||
* @param raum
|
||||
* Der nächste 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(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
|
||||
*
|
||||
* @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() {
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
210
Spiel.java
210
Spiel.java
|
@ -1,35 +1,32 @@
|
|||
|
||||
|
||||
/**
|
||||
* 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!
|
||||
* "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
|
||||
* @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;
|
||||
|
||||
/**
|
||||
* Erzeuge ein Spiel und initialisiere die interne Raumkarte.
|
||||
*/
|
||||
public Spiel() {
|
||||
public Spiel()
|
||||
{
|
||||
raeumeAnlegen();
|
||||
parser = new Parser();
|
||||
}
|
||||
|
@ -37,43 +34,40 @@ public class Spiel {
|
|||
/**
|
||||
* Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
|
||||
*/
|
||||
private void raeumeAnlegen() {
|
||||
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.setzeAusgaenge(EAST, hoersaal);
|
||||
draussen.setzeAusgaenge(SOUTH, labor);
|
||||
draussen.setzeAusgaenge(WEST, cafeteria);
|
||||
// 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);
|
||||
|
||||
hoersaal.setzeAusgaenge(WEST, draussen);
|
||||
|
||||
cafeteria.setzeAusgaenge(EAST, draussen);
|
||||
|
||||
labor.setzeAusgaenge(NORTH, draussen);
|
||||
labor.setzeAusgaenge(EAST, buero);
|
||||
|
||||
buero.setzeAusgaenge(WEST, labor);
|
||||
|
||||
aktuellerRaum = draussen;
|
||||
aktuellerRaum = draussen; // das Spiel startet draussen
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels in einer
|
||||
* Schleife.
|
||||
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
|
||||
* in einer Schleife.
|
||||
*/
|
||||
public void spielen() {
|
||||
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) {
|
||||
while (! beendet) {
|
||||
Befehl befehl = parser.liefereBefehl();
|
||||
beendet = verarbeiteBefehl(befehl);
|
||||
}
|
||||
|
@ -83,36 +77,51 @@ public class Spiel {
|
|||
/**
|
||||
* Einen Begrüssungstext für den Spieler ausgeben.
|
||||
*/
|
||||
private void willkommenstextAusgeben() {
|
||||
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("Zuul ist ein neues, unglaublich langweiliges Spiel.");
|
||||
System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
|
||||
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).
|
||||
*
|
||||
* @param befehl
|
||||
* Der zu verarbeitende Befehl.
|
||||
* @param befehl Der zu verarbeitende Befehl.
|
||||
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
|
||||
*/
|
||||
private boolean verarbeiteBefehl(Befehl befehl) {
|
||||
private boolean verarbeiteBefehl(Befehl befehl)
|
||||
{
|
||||
boolean moechteBeenden = false;
|
||||
|
||||
if (befehl.istUnbekannt()) {
|
||||
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")) {
|
||||
}
|
||||
else if (befehlswort.equals("go")) {
|
||||
wechsleRaum(befehl);
|
||||
} else if (befehlswort.equals("quit")) {
|
||||
}
|
||||
else if (befehlswort.equals("quit")) {
|
||||
moechteBeenden = beenden(befehl);
|
||||
}
|
||||
|
||||
|
@ -122,10 +131,12 @@ public class Spiel {
|
|||
// Implementierung der Benutzerbefehle:
|
||||
|
||||
/**
|
||||
* Gib Hilfsinformationen aus. Hier geben wir eine etwas alberne und unklare
|
||||
* Beschreibung aus, sowie eine Liste der Befehlswörter.
|
||||
* Gib Hilfsinformationen aus.
|
||||
* 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 irren auf dem Unigelände herum.");
|
||||
System.out.println();
|
||||
|
@ -134,11 +145,13 @@ public class Spiel {
|
|||
}
|
||||
|
||||
/**
|
||||
* Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt, wechsele
|
||||
* in den neuen Raum, ansonsten gib eine Fehlermeldung aus.
|
||||
* 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()) {
|
||||
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;
|
||||
|
@ -147,71 +160,56 @@ public class Spiel {
|
|||
String richtung = befehl.gibZweitesWort();
|
||||
|
||||
// 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) {
|
||||
System.out.println("Dort ist keine Tür!");
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
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
|
||||
* wirklich beendet werden soll.
|
||||
*
|
||||
* "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()) {
|
||||
private boolean beenden(Befehl befehl)
|
||||
{
|
||||
if(befehl.hatZweitesWort()) {
|
||||
System.out.println("Was soll beendet werden?");
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue