Advertisement
Guest User

Untitled

a guest
Dec 21st, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.57 KB | None | 0 0
  1. import java.util.Stack;
  2. /**
  3. * Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
  4. * "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
  5. * Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
  6. * mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
  7. * damit es interessanter wird!
  8. *
  9. * Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
  10. * an ihr die Methode "spielen" aufgerufen werden.
  11. *
  12. * Diese Instanz dieser Klasse erzeugt und initialisiert alle
  13. * anderen Objekte der Anwendung: Sie legt alle Räume und einen
  14. * Parser an und startet das Spiel. Sie wertet auch die Befehle
  15. * aus, die der Parser liefert und sorgt für ihre Ausführung.
  16. *
  17. * @author Michael Kölling und David J. Barnes
  18. * @version 31.07.2011
  19. */
  20.  
  21. class Spiel
  22. {
  23. private Parser parser;
  24. private Raum aktuellerRaum;
  25. private Stack<Raum> backStack;
  26. private Player player;
  27.  
  28. /**
  29. * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
  30. */
  31. public Spiel()
  32. {
  33. raeumeAnlegen();
  34. parser = new Parser();
  35. this.player = new Player("Player");
  36. this.backStack = new Stack<Raum>();
  37.  
  38. }
  39.  
  40. /**
  41. * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
  42. */
  43. private void raeumeAnlegen()
  44. {
  45. Raum draussen, halle, bad, verlies, waffenkammer, speisesaal, spielezimmer, angestelltenraum, ankleidezimmer, abstellkammer, schlafzimmer, speisekammer, gaestezimmer, kueche; ;
  46.  
  47. // die Räume erzeugen
  48. draussen = new Raum("vor dem Haupteingang einer alten Burg");
  49. halle = new Raum("in einer großen Halle");
  50. kueche = new Raum("in der Küche");
  51. verlies = new Raum("in einem einem alten Verlies");
  52. waffenkammer = new Raum("in der Waffenkammer der Burg");
  53. speisekammer = new Raum("in der Speisekammer");
  54. speisesaal = new Raum("im Speisesaal der Burg");
  55. bad = new Raum("im Bad");
  56. spielezimmer = new Raum("im Spielezimmer");
  57. angestelltenraum = new Raum ("im Angestelltenraum");
  58. schlafzimmer = new Raum ("im Schlafzimmer");
  59. gaestezimmer = new Raum ("im Gästezimmer");
  60. ankleidezimmer = new Raum ("im Ankleidezimmer");
  61. abstellkammer = new Raum ("in der Abstellkammer");
  62.  
  63.  
  64.  
  65.  
  66. // die Ausgänge initialisieren
  67. draussen.setzeAusgang("north", halle);
  68.  
  69. halle.setzeAusgang("south", draussen);
  70. halle.setzeAusgang("west", speisesaal);
  71. halle.setzeAusgang("east", abstellkammer);
  72.  
  73. speisesaal.setzeAusgang("north", kueche);
  74. speisesaal.setzeAusgang("east", halle);
  75.  
  76. kueche.setzeAusgang("west", bad);
  77. bad.setzeAusgang("east", kueche);
  78. bad.addItem("Haarbürste", "", 1);
  79. kueche.setzeAusgang("south", speisesaal);
  80. kueche.setzeAusgang("north", ankleidezimmer);
  81. kueche.addItem("Brot", "Ein leckeres Schwarzbrot", 3);
  82. kueche.addItem("Milch", "Eine halbe Flasche Milch", 4);
  83. kueche.addItem("Hähnchen", "Ein halbes Hähnchen", 5);
  84. kueche.addItem("Fruchzwerg", "Für wen das wohl ist?", 1);
  85.  
  86. ankleidezimmer.setzeAusgang("south", kueche);
  87. ankleidezimmer.setzeAusgang("west", waffenkammer);
  88. ankleidezimmer.setzeAusgang("north", spielezimmer);
  89. ankleidezimmer.addItem("Pullover", "Ein schöner Rollkragenpullover", 4);
  90. ankleidezimmer.addItem("Hose", "Eine schwarze Hose", 3);
  91. ankleidezimmer.addItem("Kleid", "Ein blaues Kleid", 3);
  92.  
  93. spielezimmer.setzeAusgang("south", ankleidezimmer);
  94. spielezimmer.setzeAusgang("east", gaestezimmer);
  95. spielezimmer.addItem("Puppe", "Eine einfache Puppe", 1);
  96. spielezimmer.addItem("Puppenhaus", "Ein Haus Puppen", 10);
  97. schlafzimmer.addPlayer("prinzessin");
  98. gaestezimmer.setzeAusgang("west", spielezimmer);
  99. gaestezimmer.setzeAusgang("south", schlafzimmer);
  100. gaestezimmer.ausgangSperren("south");
  101. waffenkammer.setzeAusgang("east", ankleidezimmer);
  102. waffenkammer.setzeAusgang("north", angestelltenraum);
  103.  
  104.  
  105. angestelltenraum.setzeAusgang("south", waffenkammer);
  106. angestelltenraum.addItem("Schlüssel", "Das ist ein magischer Schlüssel!", 5);
  107.  
  108. abstellkammer.setzeAusgang("west", halle);
  109. abstellkammer.setzeAusgang("north", speisekammer);
  110.  
  111. speisekammer.setzeAusgang("south", abstellkammer);
  112. speisekammer.setzeAusgang("north", verlies);
  113. speisekammer.addItem("Krug", "Ein goldener Krug! Wieso ist er nur golden?", 7);
  114.  
  115. verlies.setzeAusgang("south", speisekammer);
  116. verlies.addItem("Axt", "Eine rostige Axt", 9);
  117. verlies.addItem("Ausgebrannte Fackel", "Eine alte Fackel", 2);
  118. verlies.addPlayer("zwerg");
  119. aktuellerRaum = draussen; // das Spiel startet draussen
  120.  
  121. }
  122.  
  123. /**
  124. * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
  125. * in einer Schleife.
  126. */
  127. public void spielen()
  128. {
  129. willkommenstextAusgeben();
  130.  
  131. // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
  132. // und führen sie aus, bis das Spiel beendet wird.
  133.  
  134. boolean beendet = false;
  135. while (! beendet) {
  136. Befehl befehl = parser.liefereBefehl();
  137. beendet = verarbeiteBefehl(befehl);
  138. }
  139. }
  140.  
  141. /**
  142. * Einen Begrüßungstext für den Spieler ausgeben.
  143. */
  144. private void willkommenstextAusgeben()
  145. {
  146. System.out.println();
  147. System.out.println("Willkommen zum langweilsten Spiel der Welt!");
  148. System.out.println("Die Prinzessin ist verschwunden. Kannst du Sie finden?");
  149. System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
  150. System.out.println();
  151. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  152. }
  153.  
  154. /**
  155. * Verarbeite einen gegebenen Befehl (führe ihn aus).
  156. * @param befehl Der zu verarbeitende Befehl.
  157. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  158. */
  159. private boolean verarbeiteBefehl(Befehl befehl)
  160. {
  161. boolean moechteBeenden = false;
  162.  
  163. if(befehl.istUnbekannt()) {
  164. System.out.println("Ich weiss nicht, was Sie meinen...");
  165. return false;
  166. }
  167.  
  168. String befehlswort = befehl.gibBefehlswort();
  169.  
  170. if (befehlswort.equals("help"))
  171. {
  172. hilfstextAusgeben();
  173. }
  174. else if (befehlswort.equals("go"))
  175. {
  176. moechteBeenden = wechsleRaum(befehl);
  177. }
  178. else if (befehlswort.equals("quit"))
  179. {
  180. moechteBeenden = beenden(befehl);
  181. }
  182. else if (befehlswort.equals("look"))
  183. {
  184. umsehen();
  185. }
  186. else if(befehlswort.equals("take"))
  187. {
  188. this.takeItem(befehl);
  189. }
  190. else if(befehlswort.equals("list"))
  191. {
  192. this.listInventar();
  193. }
  194.  
  195. // ansonsten: Befehl nicht erkannt.
  196. return moechteBeenden;
  197. }
  198.  
  199. // Implementierung der Benutzerbefehle:
  200.  
  201. /**
  202. * Gib Hilfsinformationen aus.
  203. * Hier geben wir eine etwas alberne und unklare Beschreibung
  204. * aus, sowie eine Liste der Befehlswörter.
  205. */
  206. private void hilfstextAusgeben()
  207. {
  208. System.out.println("Sie ist in dieser Burg! Finde Sie!");
  209. System.out.println();
  210. System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
  211. parser.zeigeBefehle();
  212. }
  213.  
  214. /**
  215. * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
  216. * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
  217. * aus.
  218. */
  219. private boolean wechsleRaum(Befehl befehl)
  220. {
  221. if(!befehl.hatZweitesWort()) {
  222. // Gibt es kein zweites Wort, wissen wir nicht, wohin...
  223. System.out.println("Wohin möchten Sie gehen?");
  224.  
  225. return false;
  226. }
  227.  
  228. else
  229. {
  230. String richtung = befehl.gibZweitesWort();
  231.  
  232. if(richtung.equals("back"))
  233. {
  234. back();
  235.  
  236. return false;
  237. }
  238.  
  239. else
  240. {
  241. // Wir versuchen, den Raum zu verlassen.
  242. Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);
  243.  
  244. if (naechsterRaum == null)
  245. {
  246. System.out.println("Dort ist keine Durchgang!");
  247. return false;
  248. }
  249.  
  250. else if(naechsterRaum.getLocked())
  251. {
  252. if(this.player.hasItem("Schlüssel"))
  253. {
  254. aktuellerRaum.ausgangOeffnen(richtung);
  255.  
  256. System.out.println("Der Ausgang Richtung " + richtung + " wurde geoeffnet!");
  257.  
  258. backStack.push(aktuellerRaum);
  259.  
  260. aktuellerRaum = naechsterRaum;
  261. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  262.  
  263. if(aktuellerRaum.hasPrincess())
  264. {
  265. System.out.println("Herzlichen Glückwunsch, Sie haben die Prinzessin gefunden!");
  266. System.out.println("Das Spiel ist damit beendet.");
  267.  
  268. return true;
  269. }
  270. else
  271. {
  272. return false;
  273. }
  274. }
  275. else
  276. {
  277. System.out.println("Dieser Durchgang ist versperrt! Sie benötigen einen Schlüssel!");
  278.  
  279. return false;
  280. }
  281. }
  282. else
  283. {
  284. backStack.push(aktuellerRaum);
  285.  
  286. aktuellerRaum = naechsterRaum;
  287. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  288.  
  289. return false;
  290. }
  291. }
  292. }
  293.  
  294. }
  295.  
  296. /**
  297. * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
  298. * ob das Spiel wirklich beendet werden soll.
  299. * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  300. */
  301. private boolean beenden(Befehl befehl)
  302. {
  303. if(befehl.hatZweitesWort()) {
  304. System.out.println("Was soll beendet werden?");
  305. return false;
  306. }
  307. else {
  308. return true; // Das Spiel soll beendet werden.
  309. }
  310. }
  311. private void umsehen()
  312. {
  313. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  314. }
  315.  
  316. private void takeItem(Befehl befehl)
  317. {
  318. if(!befehl.hatZweitesWort())
  319. {
  320. // Gibt es kein zweites Wort, wissen wir nicht, wohin...
  321. System.out.println("Was möchten Sie nehmen?");
  322. }
  323.  
  324. else
  325. {
  326. String gegenstand = befehl.gibZweitesWort();
  327.  
  328. // Wir versuchen, den Raum zu verlassen.
  329. Item item = aktuellerRaum.getItem(gegenstand);
  330.  
  331. if (item == null)
  332. {
  333. System.out.println("Dieser Gegenstand konnte nicht gefunden werden!");
  334. }
  335.  
  336. else
  337. {
  338. if(this.player.addItem(item))
  339. {
  340. aktuellerRaum.removeItem(item.getName());
  341.  
  342. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  343. }
  344.  
  345. else
  346. {
  347. System.out.println("Der Gegenstand ist zu schwer für Ihr Inventar!");
  348. }
  349. }
  350. }
  351. }
  352.  
  353. /*
  354. * Nennt den Inhalt von Ihrem Inventar.
  355. */
  356. private void listInventar()
  357. {
  358. if(this.player.getInventar().size() > 0)
  359. {
  360. System.out.println("Ihr Inventar enthält:");
  361.  
  362. int weight = 0;
  363.  
  364. for(String item : this.player.getInventar().keySet())
  365. {
  366. System.out.println(item);
  367.  
  368. weight += this.player.getInventar().get(item).getGewicht();
  369. }
  370.  
  371. System.out.println("Sie haben noch " + (this.player.getMaxWeight() - weight) + " Plätze verfügbar.");
  372. }
  373.  
  374. else
  375. {
  376. System.out.println("Ihr Inventar ist momentan leer!");
  377.  
  378. System.out.println("Sie haben noch " + this.player.getMaxWeight() + " Plätze verfügbar.");
  379. }
  380. }
  381.  
  382. /**
  383. * Gehe in den vorherigen Raum zurück.
  384. */
  385. private void back()
  386. {
  387. if(backStack.empty() == true)
  388. {
  389. System.out.println("Du bist bereits am Anfang.");
  390. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  391. }
  392. else
  393. {
  394. System.out.println("Du bist im vorherigen Raum.");
  395. aktuellerRaum = backStack.pop();
  396. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  397. }
  398. }
  399. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement