Kursvorlage
Space Invaders mit frameCraft – Arcade-Spiel Schritt für Schritt
Grundlagen von frameCraft-Spielen mit Space Invaders

Didaktische Zielsetzung
Diese Vorlage führt schrittweise in den Aufbau eines einfachen Space-Invaders-Prototyps mit frameCraft ein. Im Mittelpunkt stehen die fachlichen Kompetenzen, ein Spiel in **Szene, Entities, Collider, Eingaben, Regeln, Zustände und Darstellung** zu strukturieren und diese Elemente systematisch in lauffähigen Code zu überführen. Der Aufbau verbindet **Modellierung und Implementierung**, indem Spielobjekte zunächst als benannte Entities mit Eigenschaften und Zuständen beschrieben und anschließend über Schleifen, Regeln, Kollisionen und Szenenvariablen gesteuert werden. Fachlich ist die Vorlage im Bereich Spieleprogrammierung mit Schwerpunkt auf **strukturierter Spiellogik, objektbezogenem Denken und wiederverwendbaren Mustern** wie Pools, Tags und Zustandsvariablen einzuordnen.
Programmieren lernen an sichtbarer Spiellogik
Gerade am Beispiel von Space Invaders zeigt sich ein zentraler Vorteil von frameCraft für den Informatikunterricht: Lernende programmieren nicht nur einzelne Sprachkonstrukte, sondern erleben unmittelbar, wie daraus ein funktionierendes System entsteht. Bereits wenige gut lesbare Anweisungen wie ENTITY, RECT, GESCHW oder REGEL führen zu sichtbaren Objekten und nachvollziehbarem Verhalten im Spiel. Dadurch bleibt der Blick auf den informatischen Konzepten, statt früh durch umfangreichen Framework-, Fenster- oder Rendering-Code verstellt zu werden. Gleichzeitig bleibt das Programm echtes Python: Variablen, Bedingungen, Funktionen, Schleifen und Datenstrukturen werden nicht durch eine grafische Oberfläche ersetzt, sondern in einem motivierenden Anwendungskontext eingesetzt.
for reihe in range(ANZAHL_REIHEN):
for spalte in range(ANZAHL_SPALTEN):
gx = GEGNER_STARTX + spalte * GEGNER_ABSTAND_X
gy = GEGNER_STARTY + reihe * GEGNER_ABSTAND_Y
ENTITY(
"gegner_%d_%d" % (reihe, spalte),
pos=(gx, gy),
tag="gegner"
)Der Aufbau des Gegnerschwarms ist beispielsweise eine besonders geeignete Stelle, um Schleifen und zweidimensionale Strukturen nicht abstrakt, sondern mit sofort sichtbarem Ergebnis zu behandeln. Zeile und Spalte bestimmen gemeinsam Namen und Position eines Gegners; durch das Verändern weniger Konstanten können Lernende unmittelbar untersuchen, wie sich Anzahl, Abstand und Anordnung der Objekte verändern. Verschachtelte Schleifen, Koordinatenberechnung und Parametrisierung erhalten damit einen konkreten Zweck. Für Lehrkräfte entsteht zugleich ein natürlicher Differenzierungsraum: Während eine Lerngruppe zunächst nur Anzahl oder Abstand verändert, können weiterführende Aufgaben unterschiedliche Gegnertypen, Farben, Bewegungsmuster oder Punktwerte aus Zeile und Spalte ableiten.
for i in range(ANZAHL_SCHUESSE):
sc = hole_entity(ctx, "schuss_%d" % i)
if sc is not None and not sc.alive:
sc.alive = True
sc.x = sp.x
sc.y = sp.y - 10
sc.vy = -SCHUSS_GESCHW
returnAuch der Schuss-Pool eröffnet einen fachlich interessanten Zugang: Statt bei jedem Tastendruck beliebig neue Objekte zu erzeugen, werden vorbereitete Entities wiederverwendet und über ihren Zustand alive aktiviert oder deaktiviert. Lernende begegnen hier bereits einem realen Muster der Software- und Spieleentwicklung, können es aber mit wenigen Zeilen nachvollziehen. Gleichzeitig lassen sich daran grundlegende Themen wie Objektzustände, Suche in Datenbeständen, Wiederverwendung und Ressourcenverwaltung besprechen. Aus einem zunächst einfachen Arcade-Spiel wird so ein Unterrichtsgegenstand, an dem sich Konzepte diskutieren lassen, die weit über Spieleprogrammierung hinausgehen.
BEI_KOLLISION("schuss", "gegner", treffer_handler)
def treffer_handler(ctx, schuss, gegner_ent):
schuss.alive = False
gegner_ent.alive = False
ctx.vars["punkte"] = hole_wert(ctx, "punkte", 0) + 10Besonders anschaulich ist zudem die Trennung von Ereignis und Reaktion. frameCraft übernimmt die technische Kollisionsprüfung, während die Lernenden festlegen, was fachlich bei einem Treffer passieren soll: Schuss deaktivieren, Gegner entfernen, Punktestand verändern oder später eine Explosion auslösen. Damit wird ereignisorientierte Programmierung in einer Form sichtbar, die sich leicht erklären und systematisch erweitern lässt. Ähnlich funktioniert die gesamte Spielsteuerung: Eingaben, Bewegung, Kollisionen, regelmäßige Gegnerbewegung und Spielende sind als eigenständige Regeln beziehungsweise Handler organisiert. Lernende erkennen so, dass größere Programme nicht aus einem einzigen langen Ablauf bestehen müssen, sondern aus klar abgegrenzten Verantwortlichkeiten aufgebaut werden können.
if not noch_lebendig:
ctx.vars["spiel_zustand"] = "gewonnen"
elif gegner_unten:
ctx.vars["spiel_zustand"] = "verloren"Mit spiel_zustand, punkte, gegner_richtung oder den Sperrvariablen wird außerdem sichtbar, wie der Zustand eines Programms dessen Verhalten bestimmt. Gewinn, Verlust und Neustart sind dadurch keine Sonderfälle außerhalb des eigentlichen Programms, sondern konsequente Zustandsübergänge. Genau hier lässt sich im Unterricht der Schritt von einzelnen Befehlen hin zum Modellieren eines vollständigen Programmsystems vollziehen. frameCraft reduziert dabei bewusst technische Nebenaspekte, ohne die zugrunde liegende Informatik zu verstecken. Für Informatiklehrkräfte entsteht so eine Lernumgebung, in der klassische Unterrichtsinhalte wie Schleifen, Bedingungen, Funktionen und Variablen mit weiterführenden Konzepten wie Ereignissen, Zuständen, Objektgruppen und wiederverwendbaren Programmiermustern in einem unmittelbar verständlichen Produkt zusammengeführt werden.
Kompetenzschwerpunkte
Die Vorlage bündelt fachliche und methodische Schwerpunkte des frameCraft-basierten Arcade-Prototyps in aufeinander aufbauenden Programmierbausteinen.
- Spielstruktur verstehen: Fenster, Szene, Szenenaufbau, Entity, Collider und grafische Darstellung werden als Grundbestandteile eines frameCraft-Spiels eingeführt.
- Eingaben modellieren: Tastaturaktionen und virtuelle Touch-Buttons werden über gemeinsame Aktionsnamen gebündelt und in Regeln ausgewertet.
- Bewegung kontrollieren: Horizontale Geschwindigkeit, Randbegrenzung und zeitgesteuerte Schwarmbewegung verdeutlichen kontrollierte Zustandsänderungen im Spielfeld.
- Objektmengen strukturieren: Schüsse und Gegner werden mit nummerierten Namen, Schleifen, verschachtelten Schleifen und Tags als wiedererkennbare Gruppen organisiert.
- Spielmechanik umsetzen: Schuss-Pool, Kollisionen, Punkte, HUD-Anzeige und Trefferverarbeitung führen die zentralen Abläufe des Prototyps zusammen.
- Spielzustände verwalten: Gewinn, Verlust, Neustart, Sperrvariablen und das Zurücksetzen veränderlicher Werte zeigen den Umgang mit globalen Szenenzuständen.
- Darstellung ergänzen: Grafiken aus Grundformen und Explosionen als Effekt-Pool erweitern den Prototyp um sichtbare Rückmeldungen ohne zusätzliche Spiellogik.
Struktur der Bausteine
Die Bausteine führen vom statischen Startbild über Steuerung, Schüsse, Gegner, Kollisionen und Zustände bis zu Neustart und Treffer-Effekten; jeder Schritt erweitert den vorhandenen Prototyp um eine klar abgegrenzte fachliche Funktion.

Lustiges Raumschiff mit frameCraft
Der Einstieg klärt die Grundstruktur aus SPIEL, SZENE, SZENE_AUFBAU, Entity, RECT und GFX und legt ein sichtbares Raumschiff als Ausgangspunkt für den Prototyp an.

Raumschiff mit Buttons steuern
Dieser Baustein ergänzt Tastaturaktionen, virtuelle Buttons, eine Steuerungsregel, vx-Bewegung und Randbegrenzung als erste interaktive Spiellogik.

Einzelnen Schuss ergänzen
Der vorhandene Prototyp wird um ein einzelnes vorbereitetes Projektil erweitert, dessen Aktivierung, Position, vy-Bewegung und Deaktivierung den Grundablauf eines Schusses zeigen.

Mehrere Schüsse mit Pool
Der Einzelschuss wird zu einem Pool aus nummerierten Projektilen ausgebaut, wodurch Schleifen, freie Entities und eine Feuersperre als wiederverwendbares Arcade-Muster eingeführt werden.

Gegnerreihe mit Schleife
Die Vorlage erweitert das Spiel um mehrere Gegner, die mit einer for-Schleife, nummerierten Namen, berechneten Positionen und gemeinsamem Tag systematisch erzeugt werden.

Gegnerschwarm mit Schleifen
Aus der Gegnerreihe entsteht durch verschachtelte Schleifen ein zweidimensionaler Schwarm mit Zeilen, Spalten, berechneten Koordinaten und regelmäßigem Namensschema.

Treffer und Punkte
Kollisionen zwischen Schüssen und Gegnern, das Deaktivieren per alive, Punktwerte in ctx.vars und eine HUD-Anzeige verbinden Objektzustände mit Spielrückmeldung.

Gegnerschwarm gemeinsam bewegen
Die Gegnergruppe erhält eine zeitgesteuerte Schrittbewegung, bei der Schwarmgrenzen bestimmt, Richtungen gespeichert und lebende Gegner gemeinsam verschoben werden.

Spielende in Space Invaders
Dieser Baustein führt Spielzustände, Statusmeldungen, Gewinn- und Verlustbedingungen sowie das Ausblenden des Spielfelds als Abschlusslogik des Prototyps zusammen.

Space Invaders: Sauber neu starten
Der Neustart-Baustein zeigt, wie Eingabeaktion, Sperrvariable, NEUSTART und explizite Startwerte für Variablen und Entities zu einem robusten Reset zusammenspielen.

Treffer-Explosion ergänzen
Abschließend ergänzt ein Effekt-Pool kurze Explosionen mit Restzeit, ctx.dt und animierter GFX, ohne die bestehende Treffer- und Punktelogik zu verändern.
Inhalte im Überblick
Die folgende Übersicht fasst die aus der Vorlage ableitbaren Rahmendaten und fachlichen Bestandteile zusammen.
| Aspekt | Einordnung |
|---|---|
| Kategorie | frameCraft |
| Programmiersprache | Python 2 |
| Bausteine | 11 |
| Gesamtdauer | 213 min |
| Zentrale Inhalte | Spiel-Fenster, Szene, Entity, Collider, Grafik, Steuerung, Schüsse, Gegner, Kollisionen, Punkte, Spielzustände, Neustart und Explosionen |
| Unterrichtlicher Fokus | Schrittweiser Aufbau eines Space-Invaders-Prototyps mit strukturierter Spiellogik |
Die Bausteine machen Lernziele und Zwischenschritte transparent und lassen sich gut an Unterrichtsreihen zur frameCraft-Programmierung anschließen. Der Kompetenzaufbau reicht von der Grundstruktur eines Spiels bis zur Verknüpfung von Eingabe, Objektgruppen, Kollisionen und Zuständen.
Über den Demo-Zugang können Sie die Vorlage erproben und die einzelnen Bausteine passend zu Ihrer Lerngruppe auswählen oder anpassen.