jeudi 4 juin 2015

Erzeugung unterschiedlicher Speicheradressen

Hallo zusammen ,
ich sitze momentan an einer Praktikumsaufgabe fürs Studium.
Wir sollen das Text basierte Beispiel Programm "Die Welt von Zuul" verändern und zusätzliche Funktionen einbauen.
Wir haben das Spiel unbenannt und es "Homer hat gesoffen" genannt. Ziel des Spiels den Schlüssel von Homers Auto in Springfield zu suchen...
Das Problem das wir jetzt haben ist, das unser Spiel nicht beendet wird wenn wir genau am Selben Ort sind wo der Schlüssel ist,der (durch die Funktion Random) zufällig versteckt wurde.
Java Code:

  1.  
  2. if(aktuellerRaum.equals(zufallsraum))
  3. {
  4. System.out.println("Sie haben den Schlüssel gefunden!!");
  5. beendet = true;
  6. }


Wenn wir die Speicheradressen ausgeben lassen , kommen von "zufallsraum" und aktuellerRaum" auch unterschiedliche Adresse raus. Das liegt meiner Meinung nach das wir einmal eine ArrayList doppelt erstellen....

Kann uns da einer eventuell ein Typ geben für Anfänger?


Java Code:

  1.  
  2. import java.util.*;
  3.  
  4.  
  5. /**
  6.  * Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
  7.  * "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
  8.  * Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
  9.  * mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
  10.  * damit es interessanter wird!
  11.  *
  12.  * Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
  13.  * an ihr die Methode "spielen" aufgerufen werden.
  14.  *
  15.  * Diese Instanz dieser Klasse erzeugt und initialisiert alle
  16.  * anderen Objekte der Anwendung: Sie legt alle Räume und einen
  17.  * Parser an und startet das Spiel. Sie wertet auch die Befehle
  18.  * aus, die der Parser liefert und sorgt für ihre Ausführung.
  19.  *
  20.  * @author Michael Kölling und David J. Barnes
  21.  * @version 31.07.2011
  22.  */
  23.  
  24.  
  25. class Spiel
  26. {
  27. private Parser parser;
  28. private Raum aktuellerRaum;
  29. private ArrayList<Raum> raumliste;
  30. private Random zufallsgenerator;
  31. Charakter charakter;
  32.  
  33.  
  34. /**
  35.   * Erzeuge ein Spiel und initialisiere die interne Raumkarte.
  36.   */
  37. public Spiel()
  38. {
  39.  
  40.  
  41. raeumeAnlegen();
  42. parser = new Parser();
  43. }
  44.  
  45. /**
  46.   * Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
  47.   */
  48. private ArrayList raeumeAnlegen()
  49.  
  50. {
  51. Raum draussen, grundschule, supermarkt, kneipe, akw, burger;
  52. this.raumliste = new ArrayList<Raum>();
  53.  
  54.  
  55.  
  56. // die Räume erzeugen
  57. draussen = new Raum("Auf der Evergreenterrace");
  58. grundschule = new Raum("bei der Springfielder Grundschule");
  59. supermarkt = new Raum("bei Apu im Kwiki Markt");
  60. kneipe = new Raum("in Moe´s Bar");
  61. akw = new Raum("im Atomkraftwerkk");
  62. burger= new Raum("bei Krusty Burger");
  63. // die Ausgänge initialisieren
  64. draussen.setzeAusgang("east", grundschule);
  65. draussen.setzeAusgang("south", kneipe);
  66. draussen.setzeAusgang("west", supermarkt);
  67.  
  68.  
  69. grundschule.setzeAusgang("north", draussen);
  70. grundschule.setzeAusgang("south", akw);
  71. grundschule.setzeAusgang("west", kneipe);
  72.  
  73.  
  74. supermarkt.setzeAusgang("north", draussen);
  75. supermarkt.setzeAusgang("east", kneipe);
  76. supermarkt.setzeAusgang("south", burger);
  77.  
  78.  
  79. kneipe.setzeAusgang("north", draussen);
  80. kneipe.setzeAusgang("south", akw);
  81. kneipe.setzeAusgang("west", supermarkt);
  82. kneipe.setzeAusgang("east", grundschule);
  83. kneipe.setzeAusgang("westsouth", burger);
  84.  
  85.  
  86. akw.setzeAusgang("north", kneipe);
  87. akw.setzeAusgang("west", burger);
  88. akw.setzeAusgang("east", grundschule);
  89.  
  90. burger.setzeAusgang("north",supermarkt);
  91. burger.setzeAusgang("east",akw);
  92. burger.setzeAusgang("northeast",kneipe);
  93.  
  94.  
  95.  
  96.  
  97.  
  98. aktuellerRaum = draussen; // das Spiel startet draussen
  99. this.raumliste.add(draussen);
  100. this.raumliste.add(kneipe);
  101. this.raumliste.add(grundschule);
  102. this.raumliste.add(burger);
  103. this.raumliste.add(supermarkt);
  104. this.raumliste.add (akw);
  105.  
  106. return this.raumliste;
  107.  
  108. }
  109. /**
  110.   * Wähle zufällig eine der Standardantworten aus.
  111.   * @return eine zufällig gewählte Standardantwort.
  112.   */
  113. private Raum raumAuswaehlen(ArrayList raumliste)
  114. {
  115. // Erzeuge eine Zufallszahl, die als Index in der Liste der
  116. // Standardantworten benutzt werden kann. Die Zahl wird im Bereich
  117. // von null (inklusiv) bis zur Größe der Liste (exklusiv) liegen.
  118. zufallsgenerator = new Random();
  119. Raum zufallsraum = null;
  120.  
  121. do{
  122. int index = zufallsgenerator.nextInt(raumliste.size());
  123. zufallsraum = (Raum) raumliste.get(index);
  124. }
  125. while(zufallsraum == (Raum) raumliste.get(0));
  126. //System.out.println(zufallsraum.gibKurzbeschreibung()+"llllll");
  127. return zufallsraum;
  128. }
  129.  
  130. private Raum istImRaum(ArrayList raumliste, Raum zufallsraum)
  131. {
  132. Random random = new Random();
  133. Raum charakterRaum =null;
  134.  
  135. do{
  136. int index1 = random.nextInt(raumliste.size());
  137. charakterRaum = (Raum) raumliste.get(index1);
  138.  
  139.  
  140. }
  141. while(charakterRaum == (Raum) raumliste.get(0)||charakterRaum.equals(zufallsraum));
  142. //System.out.println(charakterRaum.gibKurzbeschreibung()+"CCCCCCC");
  143. return charakterRaum;
  144. }
  145.  
  146.  
  147. /**
  148.   * Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
  149.   * in einer Schleife.
  150.   */
  151. public void spielen()
  152. {
  153. willkommenstextAusgeben();
  154.  
  155. Raum zufallsraum = raumAuswaehlen(raeumeAnlegen());
  156. Raum charakterRaum = istImRaum(raeumeAnlegen(), zufallsraum);
  157. Charakter charakter = new Charakter(" Barney ", "der Trunkenbold aus Springfield ");
  158.  
  159.  
  160. // Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
  161. // und führen sie aus, bis das Spiel beendet wird.
  162.  
  163. boolean beendet = false;
  164. boolean test = false;
  165. while (! beendet) {
  166. Befehl befehl = parser.liefereBefehl();
  167. test = verarbeiteBefehl(befehl);
  168. System.out.println(zufallsraum+" zufallsraum");
  169. System.out.println(aktuellerRaum+" aktuellerraum");
  170. System.out.println(charakterRaum+" charakterraum");
  171.  
  172. //System.out.println("wihle funktion"+zufallsraum.gibKurzbeschreibung());
  173. if(test == true )
  174. {
  175. beendet = true;
  176. }
  177.  
  178. if(aktuellerRaum.equals(zufallsraum))
  179. {
  180. System.out.println("Sie haben den Schlüssel gefunden!!");
  181. beendet = true;
  182. }
  183.  
  184. //System.out.println(charakterRaum.gibKurzbeschreibung());
  185. if(aktuellerRaum.equals(charakterRaum))
  186. {
  187. System.out.println("Sie haben " + Charakter.gibName()+ "gefunden");
  188. System.out.println(Charakter.gibBeschreibung());//
  189. System.out.println("Der Schlüssel ist " +zufallsraum.gibKurzbeschreibung());
  190. }
  191.  
  192.  
  193.  
  194. }
  195. System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
  196.  
  197. }
  198. /**
  199.   * Einen Begrüßungstext für den Spieler ausgeben.
  200.   */
  201. private void willkommenstextAusgeben()
  202. {
  203. System.out.println();
  204. System.out.println("Willkommen zum Spiel,");
  205. System.out.println("Homer hat gesoffen!");
  206. System.out.println("Spielanweisung :");
  207. System.out.println("Homer Simpson wacht eines Morgens verkatert auf ");
  208. System.out.println("der Evergreen Terrace auf, da vermutlich das letzte Bier schlecht war......");
  209. System.out.println("Plötzlich wird ihm klar, dass er Marge vom Flughafen");
  210. System.out.println("abholen soll.Nur das Problem ist , wo ist der Autoschlüssel??");
  211. System.out.println("Der Spieler versucht Homer durch Springfield zu ");
  212. System.out.println("navigieren um in einer Minute den Schlüssel wieder zu finden!");
  213. System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
  214. System.out.println();
  215. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  216. }
  217.  
  218.  
  219. /**
  220.   * Verarbeite einen gegebenen Befehl (führe ihn aus).
  221.   * @param befehl Der zu verarbeitende Befehl.
  222.   * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  223.   */
  224. private boolean verarbeiteBefehl(Befehl befehl)
  225. {
  226. boolean moechteBeenden = false;
  227.  
  228.  
  229. if(befehl.istUnbekannt()) {
  230. System.out.println("Ich weiss nicht, was Sie meinen...");
  231. return false;
  232. }
  233.  
  234.  
  235. String befehlswort = befehl.gibBefehlswort();
  236. if (befehlswort.equals("help")) {
  237. hilfstextAusgeben();
  238. }
  239. else if (befehlswort.equals("go")) {
  240. wechsleRaum(befehl);
  241. }
  242. else if (befehlswort.equals("quit")) {
  243. moechteBeenden = beenden(befehl);
  244. }
  245. // ansonsten: Befehl nicht erkannt.
  246. return moechteBeenden;
  247. }
  248.  
  249.  
  250. // Implementierung der Benutzerbefehle:
  251.  
  252.  
  253. /**
  254.   * Gib Hilfsinformationen aus.
  255.   * Hier geben wir eine etwas alberne und unklare Beschreibung
  256.   * aus, sowie eine Liste der Befehlswörter.
  257.   */
  258. private void hilfstextAusgeben()
  259. {
  260. System.out.println("Sie haben sich verlaufen. Sie sind allein.");
  261. System.out.println("Sie irren in Springfield herum.");
  262. System.out.println();
  263. System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
  264. parser.zeigeBefehle();
  265. }
  266.  
  267.  
  268. /**
  269.   * Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
  270.   * wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
  271.   * aus.
  272.   */
  273. private void wechsleRaum(Befehl befehl)
  274. {
  275. if(!befehl.hatZweitesWort()) {
  276. // Gibt es kein zweites Wort, wissen wir nicht, wohin...
  277. System.out.println("Wohin möchten Sie gehen?");
  278. return;
  279. }
  280.  
  281.  
  282. String richtung = befehl.gibZweitesWort();
  283.  
  284.  
  285. // Wir versuchen, den Raum zu verlassen.
  286. Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);
  287.  
  288.  
  289. if (naechsterRaum == null) {
  290. System.out.println("Dort ist keine Tür!");
  291. }
  292. else {
  293. aktuellerRaum = naechsterRaum;
  294. System.out.println(aktuellerRaum.gibLangeBeschreibung());
  295. }
  296. }
  297.  
  298.  
  299. /**
  300.   * "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
  301.   * ob das Spiel wirklich beendet werden soll.
  302.   * @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
  303.   */
  304. private boolean beenden(Befehl befehl)
  305. {
  306. if(befehl.hatZweitesWort()) {
  307. System.out.println("Was soll beendet werden?");
  308. return false;
  309. }
  310. else {
  311. return true; // Das Spiel soll beendet werden.
  312. }
  313. }
  314. }


Erzeugung unterschiedlicher Speicheradressen

0 commentaires:

Enregistrer un commentaire