Advertisement
Agony_

Spiel.java

Mar 9th, 2020
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.49 KB | None | 0 0
  1. /**
  2. * Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
  3. * "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
  4. * Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
  5. * mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
  6. * damit es interessanter wird!
  7. *
  8. * Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
  9. * an ihr die Methode "spielen" aufgerufen werden.
  10. *
  11. * Diese Instanz erzeugt und initialisiert alle anderen Objekte
  12. * der Anwendung: Sie legt alle Räume und einen Parser an und
  13. * startet das Spiel. Sie wertet auch die Befehle aus, die der
  14. * Parser liefert, und sorgt für ihre Ausführung.
  15. *
  16. * @author Michael Kölling und David J. Barnes
  17. * @version 2008.03.30
  18. */
  19. package zuul;
  20.  
  21. public class Spiel
  22. {
  23. private Parser parser;
  24. private Raum aktuellerRaum;
  25.  
  26. /**
  27. * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
  28. */
  29. public Spiel()
  30. {
  31. raeumeAnlegen();
  32. parser = new Parser();
  33. }
  34.  
  35. /**
  36. * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
  37. */
  38. private void raeumeAnlegen()
  39. {
  40. Raum lichtung, waldstueck, taverne, hexenhaus, dorfplatz, gaestezimmer, keller, geheimgang, piratenhoehle;
  41.  
  42. // die Räume erzeugen
  43. lichtung = new Raum("auf einer Lichtung, umgeben von dunklen Tannen");
  44. waldstueck = new Raum("im dunklen Wald");
  45. taverne = new Raum("in der Taverne, mit zwielichtigen Gestalten an der Theke");
  46. hexenhaus = new Raum("im Hexenhaus");
  47. dorfplatz = new Raum("auf dem Dorfplatz");
  48. keller = new Raum("im Keller der Tarverne");
  49. gaestezimmer = new Raum("im Gästezimmer der Tarverne");
  50. geheimgang= new Raum("in einem Geheimgang");
  51. piratenhoehle = new Raum("in der mysteriösen Piratenhöhle");
  52.  
  53. // die Ausgänge initialisieren
  54.  
  55. lichtung.setzeAusgaenge("west", waldstueck);
  56. lichtung.setzeAusgaenge("down", piratenhoehle);
  57. waldstueck.setzeAusgaenge("east",lichtung);
  58. waldstueck.setzeAusgaenge("south", dorfplatz);
  59. taverne.setzeAusgaenge("north",dorfplatz);
  60. taverne.setzeAusgaenge("down", keller);
  61. taverne.setzeAusgaenge("up",gaestezimmer);
  62. hexenhaus.setzeAusgaenge("south",dorfplatz);
  63. dorfplatz.setzeAusgaenge("north",waldstueck);
  64. dorfplatz.setzeAusgaenge("south", taverne);
  65. dorfplatz.setzeAusgaenge("west", hexenhaus);
  66. keller.setzeAusgaenge("north",geheimgang);
  67. keller.setzeAusgaenge("up", taverne);
  68. gaestezimmer.setzeAusgaenge("down",taverne);
  69. geheimgang.setzeAusgaenge("east", piratenhoehle);
  70. geheimgang.setzeAusgaenge("south",keller);
  71. piratenhoehle.setzeAusgaenge("west",geheimgang);
  72. piratenhoehle.setzeAusgaenge("up",lichtung);
  73. aktuellerRaum = lichtung; // das Spiel startet auf der Lichtung
  74. }
  75.  
  76. /**
  77. * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
  78. * in einer Schleife.
  79. */
  80. public void spielen()
  81. {
  82. willkommenstextAusgeben();
  83.  
  84. // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
  85. // und führen sie aus, bis das Spiel beendet wird.
  86.  
  87. boolean beendet = false;
  88. while (! beendet) {
  89. Befehl befehl = parser.liefereBefehl();
  90. beendet = verarbeiteBefehl(befehl);
  91. }
  92. System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
  93. }
  94.  
  95. /**
  96. * Einen Begrüßungstext für den Spieler ausgeben.
  97. */
  98. private void willkommenstextAusgeben()
  99. {
  100. System.out.println();
  101. System.out.println("Willkommen zu Zuul!");
  102. System.out.println("Entdecke die Welt von Zuul. Doch Vorsicht, überall lauern Gefahren!");
  103. System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
  104. System.out.println();
  105. raumInfoAusgeben();
  106. }
  107.  
  108. /**
  109. * Verarbeite einen gegebenen Befehl (führe ihn aus).
  110. * @param befehl Der zu verarbeitende Befehl.
  111. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  112. */
  113. private boolean verarbeiteBefehl(Befehl befehl)
  114. {
  115. boolean moechteBeenden = false;
  116.  
  117. if(befehl.istUnbekannt()) {
  118. System.out.println("Ich weiß nicht, was Sie meinen...");
  119. return false;
  120. }
  121.  
  122. String befehlswort = befehl.gibBefehlswort();
  123. if (befehlswort.equals("help"))
  124. hilfstextAusgeben();
  125. else if (befehlswort.equals("go"))
  126. wechsleRaum(befehl);
  127. else if (befehlswort.equals("quit")) {
  128. moechteBeenden = beenden(befehl);
  129. }
  130. return moechteBeenden;
  131. }
  132.  
  133. // Implementierung der Benutzerbefehle:
  134.  
  135. /**
  136. * Gib Hilfsinformationen aus.
  137. * Hier geben wir eine etwas alberne und unklare Beschreibung
  138. * aus, sowie eine Liste der Befehlswörter.
  139. */
  140. private void hilfstextAusgeben()
  141. {
  142. System.out.println("Sie haben sich verlaufen. Sie sind allein.");
  143. System.out.println("Sie irren in der Welt von Zuul herum.");
  144. System.out.println();
  145. System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
  146. System.out.println(" go quit help");
  147. raumInfoAusgeben();
  148. }
  149.  
  150. /**
  151. * Versuche, den Raum zu wechseln. Wenn es einen Ausgang gibt,
  152. * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
  153. * aus.
  154. */
  155. private void wechsleRaum(Befehl befehl)
  156. {
  157. if(!befehl.hatZweitesWort()) {
  158. // Gibt es kein zweites Wort, wissen wir nicht, wohin...
  159. System.out.println("Wohin möchten Sie gehen?");
  160. return;
  161. }
  162.  
  163. String richtung = befehl.gibZweitesWort();
  164.  
  165. // Wir versuchen den Raum zu verlassen.
  166. Raum naechsterRaum = null;
  167. if(richtung.equals("north")) {
  168. naechsterRaum = aktuellerRaum.getAusgang("north");
  169. }
  170. if(richtung.equals("east")) {
  171. naechsterRaum = aktuellerRaum.getAusgang("east");
  172. }
  173. if(richtung.equals("south")) {
  174. naechsterRaum = aktuellerRaum.getAusgang("south");
  175. }
  176. if(richtung.equals("west")) {
  177. naechsterRaum = aktuellerRaum.getAusgang("west");
  178. }
  179. if(richtung.equalsIgnoreCase("up")) {
  180. naechsterRaum = aktuellerRaum.getAusgang("up");
  181. }
  182. if (richtung.equalsIgnoreCase("down")) {
  183. naechsterRaum = aktuellerRaum.getAusgang("down");
  184. }
  185.  
  186. if (naechsterRaum == null) {
  187. System.out.println("Dort ist keine Tür!");
  188. }
  189. else {
  190. aktuellerRaum = naechsterRaum;
  191. raumInfoAusgeben();
  192. }
  193. }
  194.  
  195. /**
  196. * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
  197. * ob das Spiel wirklich beendet werden soll.
  198. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  199. */
  200. private boolean beenden(Befehl befehl)
  201. {
  202. if(befehl.hatZweitesWort()) {
  203. System.out.println("Was soll beendet werden?");
  204. return false;
  205. }
  206. else {
  207. return true; // Das Spiel soll beendet werden.
  208. }
  209. }
  210. private void raumInfoAusgeben() {
  211. System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
  212. System.out.print("Ausgänge: ");
  213. aktuellerRaum.ausgaengeToString();
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement