ein textadventure aip aufgabe 2 14.05.2009 fabian bergfeld patrick boeckhoven christian haberland...
TRANSCRIPT
![Page 1: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/1.jpg)
Ein Textadventure
AIP Aufgabe 2 14.05.2009
Fabian BergfeldPatrick BoeckhovenChristian Haberland Benjamin Jochheim
Liem Nguyen
![Page 2: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/2.jpg)
Entwürfe Dr.Little schlecht,besser Unterschiede schlecht ->besser Erweiterung um hoch, runter
Erweiterung Stories 1.0 Statische Sicht Dynamische Sicht Verteilungssicht Fachliche Sicht
Erweiterung Stories 2.0 Unterschiede zu Stories 1.0
![Page 3: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/3.jpg)
TODOHier kommen die Klassendiagramme von
Dr.Little schlecht und besser rein
![Page 4: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/4.jpg)
Merkmale von Dr.Little-schlecht
![Page 5: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/5.jpg)
Feste Eingänge -> Erweiterungen sind schwierig
Öffentliche Attribute -> InformationHiding
class Raum {
public String beschreibung;public Raum nordausgang;public Raum suedausgang;public Raum ostausgang;public Raum westausgang
![Page 6: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/6.jpg)
Hohe KopplungNicht alle Parameter werden verwendet ->
Interface zu breitSchlecht für Erweiterungen -> Parameterliste
müsste erweitertBei mehrmaligen Setzten eines Raumes, kann
kein Null mehr für einen Raum gesetzt werden
public void setzeAusgaenge(Raum norden, Raum osten, Raum sueden, Raum westen) {
if(norden != null) nordausgang = norden; ...
![Page 7: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/7.jpg)
Ausgang Norden und Osten bleiben beim zweiten Aufruf erhalten!!!
// Aufruf 1:setzeAusgaenge(ausgangNorden,ausgangOsten, ausgangSueden, ausgangWesten) // Aufruf 2:setzeAusgaenge(null,null, ausgangSueden, ausgangWesten);
...
Fehler beim wiederholten Aufrufen. Beispiel:
![Page 8: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/8.jpg)
Direkter Zugriff auf Klassen-AttributeMan muss das innere von Raum kennen-> hohe KopplungEs kann die Abfrage eines Attributs
vergessen werden
private void willkommenstextAusgeben(){...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 ");
![Page 9: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/9.jpg)
Feste Befehlsliste-> Feste Bestandteile von Veränderlichen
trennenSchlecht für ErweiterungAusgabe auslagern -> trennen von Blogic
(MVC)
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");}
![Page 10: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/10.jpg)
Wird nur von verarbeiteBefehl() aufgerufen, daher sollte die Schnittstelle kleiner sein (nur den Raum übergeben)
private void wechsleRaum(Befehl befehl) {
Allgemein für die Klasse Spiel gilt:Klasse sollte sich nur um Spielelogik kümmern, nicht um das Parsen der Eingabe.
![Page 11: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/11.jpg)
„Look“ wird angenommen, obwohl es nicht spezifiziert ist.
Dadurch dass „look“ nicht erwartet wird, wird es nicht abgefangen
Anweisung wie „look ???“ wird ausgeführt
class Befehlswoerter{ // ein konstantes Array mit den gültigen Befehlswörtern private static final String gueltigeBefehle[] = { "go", "quit", "help", "look" };
![Page 12: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/12.jpg)
"Das Befehlswort sollte 'null' sein, wenn dieser Befehl als nicht vom Spiel erkannt gekennzeichnet werden soll.
Schlecht: Datenparameter haben eine Doppelbedeutung
public Befehl(String erstesWort, String zweitesWort) { befehlswort = erstesWort; this.zweitesWort = zweitesWort;}....public boolean istUnbekannt() { return (befehlswort == null); }
![Page 13: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/13.jpg)
Liefert das Befehlswort (das erste Wort) dieses Befehls.
Wenn der Befehl nicht verstanden wurde, ist das Ergebnis 'null'.
Schlecht: Datenparameter haben eine Doppelbedeutung
Verbesserung: Exceptions im Fehlerfall
public String gibBefehlswort() { return befehlswort; }
![Page 14: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/14.jpg)
Ausgaben (hier via println) sowie das einlesen via Buffered Reader sollten von dem eigentlichen Parsen entkoppelt werden.
public Befehl liefereBefehl() {... System.out.print("> "); // Eingabeaufforderung..... BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));.....eingabezeile = eingabe.readLine();...
![Page 15: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/15.jpg)
Merkmale von Dr.Little-besser
![Page 16: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/16.jpg)
Private wird verwendet -> Attribute verstecktAttribute nur über Getter und Setter zu
erreichengibKurzbeschreibung()gibLangeBeschreibung()setzeAusgang()
class Raum { private String beschreibung; private HashMap ausgaenge; // die Ausgänge dieses Raums
![Page 17: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/17.jpg)
Private wird verwendet -> Attribute verstecktAttribute nur über Getter und Setter zu
erreichengibKurzbeschreibung()gibLangeBeschreibung()setzeAusgang()
Beliebige Richtung können eingegeben werden(-) Keine Absicherung der Richtung(Dubbleten)
public void setzeAusgang(String richtung, Raum nachbar) { ausgaenge.put(richtung, nachbar); }
![Page 18: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/18.jpg)
Ausgänge werden als HashMap implementiert
-> mehrere Ausgänge möglichNachteile:
(-) richtung als String ->Eingabe falscher Ausgänge
Abgeschwächt bei Verwendung von StringKonstanten
private HashMap ausgaenge; // die Ausgänge dieses Raums.... ausgaenge.put(richtung, nachbar);...
draussen.setzeAusgang("east", hoersaal);draussen.setzeAusgang(“East", labor);Besser: draussen.setzeAusgang(EAST, labor);
![Page 19: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/19.jpg)
Ausgänge werden als HashMap implementiert
-> mehrere Ausgänge möglichNachteile:
(-) richtung als String ->Eingabe falscher Ausgänge
Abgeschwächt bei Verwendung von StringKonstanten
private HashMap ausgaenge; // die Ausgänge dieses Raums.... ausgaenge.put(richtung, nachbar);...
![Page 20: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/20.jpg)
TODOHier kommen die CODE-Stellen der Änderung für hoch + runter
In Dr.Little besser rein
![Page 21: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/21.jpg)
Erweiterung von Dr. Little-besser um Stories 1.0
![Page 22: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/22.jpg)
TODOAufgabe 2
![Page 23: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/23.jpg)
Erweiterung von Dr. Little-besser um Stories 2.0
![Page 24: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen](https://reader035.vdokument.com/reader035/viewer/2022062622/55204d6949795902118bf7ba/html5/thumbnails/24.jpg)
TODOAUFGABE3