Entwicklung des Spiels
Entwicklungsphasen
Du sollst im folgenden Deine eigene Version des Spiels umsetzen. Es geht nicht unbedingt darum eine möglichst detailgetreue Kopie des Originals zu erreichen. Aber natürlich darfst Du auch das anstreben.
Damit du bei der Entwicklung des Spiels gut vorankommst, sollst Du Dich an eine Reihe von Entwicklungsphasen halten, die bei der Softwareentwicklung prinzipiell eingehalten werden. Bei der Entwicklung von Software werden diese Phasen durchaus variiert, indem sie z.B. zyklisch wiederholt werden. Aber die prinzipielle Vorgehensweise ist oft:
- Anforderungsanalyse: Die Anforderungen an das System werden ermittelt und dokumentiert.
- Modellierung: Ein Modell des Systems wird z.B. anhand von Klassendiagrammen entwickelt.
- Implementierung: Das entwickelte Modell wird in einer Programmiersprache implementiert.
- Tests: Das System wird möglichst systematisch getestet.
Da diese Phasen wie die Stufen eines Gebirgsbaches aufeinanderfolgen, wird dieses Vorgehensmodell auch Wasserfallmodell genannt.
Anforderungsanalyse
Ziel der Anforderungsanalyse ist es eine möglichst genaue und verbindliche Vorstellung davon zu haben, was das System am Ende leisten soll. Das Ergebnis einer Anforderungsanalyse ist oft ein Pflichtenheft, in dem der Softwareentwickler genau dokumentiert, welche Eigenschaften das Produkt später haben soll.
Teil des Pflichtenheftes können Zeichnungen der Softwareobfläche, tabellarische Anforderungen oder informelle Beschreibungen sein.
Aufgabe 1 - Pflichtenheft
Erstelle ein Pflichtenheft zu Deiner Version von Space Invaders. Das Pflichtenheft sollte z.B. einen grafischen Entwurf Deines Spiels enthalten. Es sollte beschrieben sein, wie das Spiel in bestimmten Situationen ablaufen soll. Außerdem ist es ratsam die Anforderungen mit Prioritäten zu versehen. Du wirst möglicherweise auf unvorhergesehene Schwierigkeiten bei der Umsetzung treffen. Dann solltest vorher schon entschieden haben, auf welche Funktionalität Du verzichten kannst, und welche Anforderungen unabdingbar sind. Eine Basisversion könnte z.B. beinhalten:
- Die Spielfigur lässt sich nach links und rechts bewegen und kann schießen.
- Im oberen Bereich der Welt befinden sich die Gegner, die von Zeit zu Zeit nach unten feuern.
- Beim Treffen eines Gegners wird dieser entfernt. Wird man selbst getroffen, ist das Spiel beendet.
Modellierung
Es ist bei nicht allzu großen Projekten sehr verlockend sich direkt an den Computer zu setzen und "drauf los" zu programmieren. Allerdings wirst Du Dir leichter tun bei der Programmierung, wenn Du erst überlegst, welche Objekte und damit Klassen es geben soll und was diese leisten sollen. Je größer die Projekte werden, desto wichtiger wird diese Phase der Softwareentwicklung.
Aufgabe 2 - Klassenmodell
Entwickle ein Klassenmodell mit allen benötigten Klassen. Die Beziehungen zu
den Oberklassen Actor
und World
sollten zumindest
angedeutet werden. Eine vollständige Darstellung der Attribute und Methoden
sind für diese Klassen nicht notwendig. Für eigene Klassen sollst Du allerdings
alle Attribute und Methoden auflisten.
Eventuell kann es hilfreich sein auch Objektdiagramme zu erzeugen und die Klassendiagramme mit Kommentaren zu versehen.
Implementierung
Das entwickelte Modell muss nun in Quellcode übersetzt und mit Leben gefüllt werden. Aus dem Klassendiagramm lassen sich die Grundgerüste der Klassen systematisch erstellen. Bei der Implementierung ist dabei darauf zu achten, dass man sich an übliche Konventionen hält und möglichst wartbaren Code schreibt, um Fehler zu vermeiden.
Aufgabe 3 - Programm
Implementiere Dein Spiel Schritt für Schritt. Nimm Dir dabei nicht zu viel auf einmal vor, sondern gehe zuerst an wichtige Basisfunktionalitäten. Optionale Anforderungen sollten erst später implementiert werden.
Halte Dich bei der Implementierung an die üblichen Konventionen: Klassennamen werden groß geschrieben, alle Arten von Variablen klein. Achte darauf Deinen Code übersichtlich zu halten. Wähle "sprechende" Variablennamen, also z.B. "alter" und "munition" statt "x" und "y".
Falls Du das Spiel z.B. über einen Beamer präsentieren möchtest, kann es sinnvoll sein die Spielfläche nicht zu groß zu wählen. Mit 800x600 Punkten solltest Du auf der sicheren Seite sein.
Test
Die Testphase wird auch in die Implementierungsphase einfließen, da man funktionstüchtige Teile des Systems möglichst früh testen sollte. Es gibt verschiedene Techniken und Strategien wie man gute Tests durchführt. Ein Beispiel für eine Testtechnik ist die Verwendung spezieller JUnit-Testklassen. Diese sollen an dieser Stelle aber (noch) keine Rolle spielen. In späteren Projekten kannst Du Dein Wissen hierzu vertiefen.
Aufgabe 4 - Spielen
Glücklicherweise machen Tests bei Spielen ja Spaß. Achte darauf Teile des Systems möglichst früh zu testen. Tritt ein Fehler auf, ist dieser bei vielen kleinen Tests leichter zu finden, als wenn man erst das System fertigstellt und dann als Ganzes testet. Natürlich muss aber auch das fertige Spiel ausführlich getestet werden :-)