====== Projekt Space-Shooter ======
Ziel dieses Kapitels ist es, ein klassisches Space-Shooter-Spiel zu programmieren. Wir orientieren uns von der Funktionalität her grob am Klassiker **Katakis**:
{{ youtube>zAtW-3sx_1s?large }}
===== Klassendiagramm =====
Wir sammeln zunächst, welche Features unser Spiel haben soll:
* Raumschiff
* Steuerung mit den Cursortasten
* Welt drumherum scrollt von rechts nach links, damit entsteht der Eindruck, das Raumschiff bewege sich nach rechts
* schießen mit der Leertaste
* Gegner, die sich bewegen und schießen können
* Steinbrocken, die sich bewegen
* zusätzlich statische Hintergrundelemente
* Powerups zum Aufsammeln
* besserer Schuss
* Shield
* mehrere Levels
* Zustände: Startbildschirm, laufendes Spiel, Game-Over-Bildschirm
==== Gedanken bei der Erstellung des Klassendiagramms ====
* Unsere Erfahrung aus den vorhergehenden Spielen legt nahe, eine zentrale Klasse ''Main'' zu erstellen, von der es genau ein Objekt gibt.
* Das Main-Objekt verwaltet die Levels
* Das Main-Objekt verwaltet die Projektile
* Das Main-Objekt regelt den Übergang zwischen den Zuständen.
* Das Main-Objekt verwaltet das Raumschiff
* Wir sehen "Rückreferenzen" von ''Spaceship'' und ''Level'' auf das ''Main''-Objekt vor, damit wir in den Methoden dieser Klassen Zugriff darauf haben.
* Die Klasse ''Level'' umfasst die Gemeinsamkeiten aller Levels. Was die Levels unterscheidet schreiben wir in die Methoden der Klassen ''Level1'', ''Level2'', usw.
{{ :spaceshooter:pasted:20230303-084013.png?600 }}
Beachte die Zusätze "{ abstract }" im Klassendiagramm erstmal nicht. Du wirst weiter unten erfahren, was es damit auf sich hat.
===== Einfachere Variante... =====