ein textadventure aip aufgabe 2 14.05.2009 fabian bergfeld patrick boeckhoven christian haberland...

24
Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen

Upload: gerhold-genser

Post on 05-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen

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

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

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

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

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

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

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

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

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

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

„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

"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

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

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

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

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

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

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

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

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

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

TODOAufgabe 2

Page 23: Ein Textadventure AIP Aufgabe 2 14.05.2009 Fabian Bergfeld Patrick Boeckhoven Christian Haberland Benjamin Jochheim Liem Nguyen

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

TODOAUFGABE3