Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Zustandsautomat im Spiel

Nach dieser Lektion: Ich kann ein Spiel mit Zuständen und Übergängen als Zustandsautomat beschreiben.

Lektion, 55 Min.1 BefehlSpieleentwicklungs-Lab: Spielschleife, Schwerkraft und Kollisionen im Browser

Was ist ein Zustandsautomat?

Ein Zustandsautomat (englisch State Machine) ist ein Modell mit einer festen Liste von Zuständen. Regeln legen fest, wann das Spiel von einem Zustand in einen anderen wechselt. Er hält den Code übersichtlich, weil das Spiel immer in genau einem Zustand ist.

Eine Ampel ist das einfachste Beispiel. Sie zeigt Rot, Rot mit Gelb, Grün oder Gelb, und nie zwei Lichter, die sich widersprechen.

Am Ende dieser Lektion

Notiz

Ich kann ein Spiel mit Zuständen und Übergängen als Zustandsautomat beschreiben.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Zustanddie Lage, in der das Spiel gerade istspielt
Ereignisetwas, das passiert und einen Wechsel auslösen kannpause
Übergangder Wechsel von einem Zustand in einen anderen
Zustandsautomatein Modell aus Zuständen, Ereignissen und Übergängen
Eingabewas Spielende tun: eine Taste drücken, klicken, tippen
Zustandstabelleeine Tabelle, die für jeden Zustand und jedes Ereignis den nächsten Zustand nennt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Spiel ist immer in genau einem Zustand

Ein Spiel kann bereit sein, laufen, pausiert sein oder vorbei sein. Jeder dieser Zustände verlangt anderen Code: Im Zustand "spielt" bewegt das Update die Figuren, im Zustand "pausiert" tut es nichts.

Ein Ereignis löst einen Übergang aus. Ein Druck auf die Pausetaste führt von "spielt" nach "pausiert". Das Diagramm zeigt ein eigenes Beispiel mit vier Zuständen.

Wechseln Sie den Zustand mit Schaltflächen

Code: web
<p id="anzeige">Zustand: bereit</p>
<button onclick="ereignis('start')">start</button>
<button onclick="ereignis('pause')">pause</button>
<button onclick="ereignis('verloren')">verloren</button>
<button onclick="ereignis('neustart')">neustart</button>

Die Zustandstabelle sagt, was passiert

Eine Zustandstabelle nennt für jeden Zustand und jedes Ereignis den nächsten Zustand. Steht eine Kombination nicht in der Tabelle, bleibt das Spiel im alten Zustand.

Das ist ein Vorteil: Sie sehen auf einen Blick, was erlaubt ist. Ein Druck auf start im Zustand "vorbei" tut nichts, solange kein Übergang dafür eingetragen ist.

Die Zustandstabelle des Beispiels

ZustandEreignisNeuer Zustand
bereitstartspielt
spieltpausepausiert
spieltverlorenvorbei
pausiertpausespielt
vorbeineustartspielt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eingaben werden gespeichert, die Schleife liest sie

Eine Taste meldet sich nur im Moment des Drückens. Das Spiel braucht aber in jedem Bild die Antwort auf die Frage: Ist die Taste gerade unten?

Deshalb speichert das Spiel die Eingabe. Beim Drücken setzt es einen Merker auf wahr, beim Loslassen auf falsch. Das Update liest nur den Merker und kennt keine Tasten.

Ein häufiger Fehler

Warnung

Viele nehmen für jeden Zustand einen eigenen Schalter, etwa istPause und istVorbei. Dann können beide gleichzeitig wahr sein, und das Spiel ist in einem unmöglichen Zustand. Ein Zustandsautomat hat eine Variable mit einem Wert.

Das Spiel des Labs hat zwei Zustände

"Catch the stars" hat keine Pause und kein Menü. Es kennt nur zwei Zustände: Das Spiel läuft, oder es ist vorbei. Eine Variable gameOver hält das fest.

Das Update endet sofort, wenn gameOver wahr ist. Ein Druck auf die Leertaste oder auf Restart setzt das Spiel zurück. Alles andere in dieser Lektion ist ein eigenes Beispiel.

Die Stellen finden, an denen gameOver wechselt

Befehl
docker exec jupyter grep -n "gameOver = " game/game.js

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Zeilen genügen für zwei Zustände

Das Kommando gibt zwei Zeilen aus. Zeile 48 setzt gameOver auf false: Das passiert in newGame, beim Start und beim Neustart.

Zeile 83 setzt gameOver auf true. Das passiert im Update, sobald das letzte Leben verloren ist. Das ist der ganze Übergang des Spiels.

Über dieses Lab und seinen Quellcode: Spieleentwicklungs-Lab: Spielschleife, Schwerkraft und Kollisionen im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.