i

Projektbeschreibung

Spielidee

In der Basisversion des Spiels befindet sich der Spieler beim Spielstart an einem bestimmten Ort eines Parks, z.B. einem Badesee. Ziel ist es über Kommandos einen bestimmten Punkt, z.B. den Parkplatz, an dem das eigene Auto geparkt ist, zu finden. Eine Struktur des Parks könnte bspw. folgendermaßen aussehen:

Übersichtsplan über den Park

Der Spieler selbst besitzt allerdings kein Wissen über die Struktur des Parks, sondern bekommt immer nur Informationen über den aktuellen Ort, an dem er sich befindet. Ein vollständiger Ablauf des Spiels könnte so aussehen:

Du bist beim Baden eingedöst, langsam wird es dunkel.
Bevor nachts zwielichtige Gestalten kommen,
solltest Du schnell zu Deinem Auto...

Du bist hier: Badesee. Es gibt Wege nach: links
> links
Du bist hier: Grillplatz. Es gibt Wege nach: oben rechts
> oben
Du bist hier: Kiosk. Es gibt Wege nach: oben rechts unten links
> oben
Du bist hier: Streichelzoo. Es gibt Wege nach: unten links
> oben
Du kannst nicht nach oben gehen.
Du bist hier: Streichelzoo. Es gibt Wege nach: unten links
> links
Du bist hier: Eingang. Es gibt Wege nach: oben rechts links
> oben

Du bist nun hier: Parkplatz
Glückwunsch, Du hast es geschafft :-)
Gute Heimfahrt!!!

Die Attraktivität des Spiels soll später durch Deine eigenen Ideen gesteigert werden, zuerst soll aber die Basisversion umgesetzt werden, um an einem lauffähigen Spiel Erfahrungen und eigene Ideen zu sammeln.

Aufgabe 1 - Anforderungsanalyse

Fasse die obigen Beschreibungen in einer Anforderungsanalyse möglichst exakt zusammen. Du kannst auch schon weitere Ideen formulieren, die aber im Moment noch als Erweiterungsstufe gelten sollen. Weitere Informationen zur Anforderungsanalyse und dem Wasserfallmodell findest Du beim Projekt Space Invaders.

Modellierungsidee

Passend zur obigen Projektidee ist auch ein Grundgerüst einer Modellierung gegeben (kein UML sondern Java-spezifisch):

Klassendiagramm zur Grundidee

Aufgabe 2 - Diskussion des Klassendiagramms

Mache Dich mit dem Klassendiagramm vertraut. Erkläre es umfassend und diskutiere eventuelle Alternativen.

Implementierungsideen

Für die verschiedenen Klassen existieren schon einige Implementierungsideen:

  • In der Klasse Ort werden Orte definiert und Wege zwischen Orten gebaut.
    Um einen Weg zwischen zwei Orten mit Hilfe der Methode baueWeg zu bauen, soll es reichen den Weg von einem der Orte aus zu bauen. Verbindet man also den Badesee nach links mit dem Grillplatz, soll dieser automatisch nach rechts mit dem Badesee verbunden sein. Es gibt also nur Verbindungen in der Art oben↔unten und links↔rechts.
    In der Methode getNachbarort soll eine Zeichenkette wie "oben" o.ä. übergeben werden, die Methode gibt dann den entsprechenden Ort zurück oder null, falls es den Ort nicht gibt.
    Die Methode beschreibung gibt eine vollständige Beschreibung in der Art "Spielplatz. Es gibt Wege nach: oben rechts" zurück.
  • Im Konstruktor der Klasse Spiel werden alle Orte erzeugt und planmäßig verbunden. Da das Spiel bis auf den Zielort keinen Zugriff mehr auf die Orte benötigt, können diese als lokale Variablen im Konstruktor definiert werden. Außerdem soll der Spieler erzeugt und an den Startort, also z.B. den Badesee gesetzt werden.
    Beim spielen des Spiels soll der Spieler begrüßt werden. Solange der Spieler sich nicht am Zielort befindet, soll wiederholt ausgeführt werden:
    • Ausgabe des aktuellen Ortes
    • Eingabe der neuen Richtung. Wie man in Java Benutzereingaben einliest, kannst Du z.B. im Anhang / Java-Schnipsel nachschauen.
    • Bewegen des Spielers in die angegebene Richtung
    Abschließend wird der Spieler verabschiedet.
  • Der Spieler bekommt bei der Erzeugung seinen Startort übergeben. Beim Gehen in eine Richtung muss überprüft werden, ob es eine Verbindung in der angegebenen Richtung gibt. Falls dies der Fall ist, wird die Position des Spielers entsprechend geändert.

Aufgabe 3 - Implementierung

Falls Du Dich mit JUnit und testgetriebener Entwicklung beschäftigt hast, bietet es sich an, zuerst ein Grundgerüst der Klassen zu erstellen und anschließend die Testfälle zu erzeugen (s.u.)

Implementiere das Spiel gemäß den obigen Ideen. Das Spiel müsste damit in der Basisversion spielbar sein.

Testideen

Beim Testen der Klasse Ort ist besonders zu testen, ob die Verbindungen zwischen den Orten korrekt erstellt werden. Aber auch die korrekte Belegung der weiteren Attribute sowie die Erzeugung der Beschreibung sollte getestet werden.

Die Klasse Spiel sollte mindestens daraufhin getestet werden, ob das Setzen des Spielers und des Zielortes funktionieren.

Beim Spieler sollte getestet werden, ob das Gehen an einen anderen Ort korrekt funktioniert.

Aufgabe 4 - Testfälle entwerfen

Überlege Dir konkrete Testfälle für mindestens die oben genannten Tests. Führe die Tests durch und dokumentiere die Testfälle. Falls Du JUnit benutzt, kannst Du die JUnit-Tests auch zur Dokumentation heranziehen.

Gesamttest

Die einzelnen Klassen sind nun implementiert und getestet und die Software sollte lauffähig sein. Es fehlen allerdings noch Tests des Gesamtsystems. Man unterscheidet dabei Systemtests und Akzeptanztests. Bei Systemtests wird das Gesamtsystem - üblicherweise vom Entwickler selbst - dahingehend getestet, ob die in der Anforderungsanalyse formulierten Forderungen erfüllt sind. Bei Akzeptanztests wird überprüft, ob die Software für den Benutzer so bedienbar ist und funktioniert, wie sie es soll. Ein Teil von Akzeptanztests können z.B. Beta-Tests sein, bei denen Vorabversionen der Software an interessierte Endkunden verteilt werden. Man kann sowohl für System- als auch für Akzeptanztests Phasen und Kriterien formulieren, um systematisch zu vertrauenswürdigen Tests zu kommen. Darauf soll hier aber nicht weiter eingegangen werden.

Aufgabe 5 - Systemtest

Teste Deine Software ausgiebig. Versuche dabei typische und untypische Szenarien zu simulieren. (Benutzer geht hin und her, Benutzer läuft im Kreis, Benutzer gibt ungültige Befehle, ...). Korrigiere eventuell auftretende Fehler.

Aufgabe 6 - Akzeptanztest

Gib Deine Software einem anderen Schüler oder einem unbeteiligten Freund etc., um z.B. die Bedienbarkeit für Personen zu testen, die gedanklich nicht mit Deinem Projekt vertraut sind. Notiere die Rückmeldungen.

Iterationen des Projekts

Spätestens aus dem Akzeptanztest werden sich verschiedene Wünsche bzgl. der Funktionalität ergeben. Wahrscheinlich hattest du auch vorher schon einige Ideen, wie sich das Adventure attraktiver gestalten lässt. Das Spiel sollte nun also in einem weiteren Schritt erweitert oder verbessert werden.

Wenn Software in mehreren Wiederholungen verbessert und weiterentwickelt wird, spricht man von iterativer Softwareentwicklung (von lat. iterare ,wiederholen‘). Da Software selten einmalig entworfen und dann unverändert für lange Zeit benutzt wird, entspricht dies dem Normalfall. Bezogen auf das Wasserfallmodell bedeutet dies, dass man wie in einer Schleife wieder zur Anforderungsanalyse zurück kehrt.

Solange die Software genutzt und gepflegt wird, wiederholen sich diese Phasen, man spricht auch vom Software-Lebenszyklus.

Aufgabe 7 - Anforderungsanalyse

Untersuche die ursprüngliche Anforderungsanalyse. Welche Anforderungen wurden noch nicht umgesetzt? Welche Punkte sollten ergänzt werden? Welche Wünsche oder Anforderungen ergeben sich aus den Akzeptanztests? Überarbeite die Anforderungsanalyse entsprechend.

Aufgabe 8 - Modellierung

Überprüfe die Modellierung in Bezug auf die geänderten Anforderungen und überarbeite sie.

Aufgabe 9 - Implementierung

Implementiere die neuen und geänderten Anforderungen.

Aufgabe 10 - Testen

Führe Modul-, System- und Akzeptanztests durch.

Suche

v
7.1.3.4.1
inf-schule.de/oop/java/beziehungen/adventure/beschreibung
inf-schule.de/7.1.3.4.1
inf-schule.de/@/page/mwt4iXOzmWjaL2OB

Rückmeldung geben