====== 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... =====