Python lernen · Schritt 14 von 14
Im MUD: dein erstes eigenes kleines Falkenmoor

Zum Spiel · 12.09.2026

Drei Räume — dein erstes Textabenteuer

Der Abschluss der Reihe: Du baust in einer Datei ein eigenes Drei-Räume-Abenteuer — ohne Flask, ohne Datenbank. Und weißt danach, warum Falkencode der nächste Schritt ist.

Jetzt kommt zusammen, was die ganze Reihe aufgebaut hat: Dictionaries für die Räume, eine Liste fürs Inventar, eine Schleife als Spielschleife, Konditionen für Türen, input für die Eingabe. Am Ende steht ein lauffähiges Textabenteuer in einer einzigen Datei — dein eigenes Mini-Falkenmoor.

Der Bauplan

  • Räume als Dictionary: Name → Beschreibung + Ausgänge.
  • Zustand: raum (wo bin ich), inventar (Liste), siegreich (wahr/ unwahr).
  • Spielschleife: Raum zeigen, Befehl lesen, reagieren — bis „ende“ oder Sieg.
  • Eine verschlossene Tür: Ohne Schlüssel im Inventar bleibt die Kammer zu.

Schritt 1 — die Welt als Daten

raeume = {
    "hof": {"text": "Ein Hof. Norden: eine Tür. Osten: der Keller.",
            "exits": {"norden": "kammer", "osten": "keller"}},
    "keller": {"text": "Dunkler Keller. Ein Schlüssel liegt da.",
               "exits": {"westen": "hof"}},
    "kammer": {"text": "Eine Kammer. In der Mitte: eine Truhe.",
               "exits": {"sueden": "hof"}},
}

Das ist exakt das Muster aus dem JSON-Artikel: Räume unter ihren Namen, Ausgänge als Richtung → Zielraum. Falkenmoors world.json hat 228 solcher Einträge — dein Abenteuer beginnt mit drei.

Schritt 2 — Zustand und Spielschleife

raum = "hof"
inventar = []
siegreich = False

while True:
    print("\n== " + raum + " ==")
    print(raeume[raum]["text"])
    befehl = input("> ").strip().lower()
    # … Befehle folgen

Schritt 3 — die Befehle

    if befehl == "ende":
        break
    elif befehl in ("n", "s", "o", "w"):
        richtung = {"n": "norden", "s": "sueden",
                    "o": "osten", "w": "westen"}[befehl]
        ziel = raeume[raum]["exits"].get(richtung)
        if ziel is None:
            print("Da ist kein Weg.")
        elif raum == "hof" and ziel == "kammer" and "Schlüssel" not in inventar:
            print("Die Tür ist verschlossen — du brauchst einen Schlüssel.")
        else:
            raum = ziel
    elif befehl == "nimm schluessel" and raum == "keller":
        inventar.append("Schlüssel")
        print("Schlüssel genommen.")
    elif befehl == "oeffne truhe" and raum == "kammer":
        print("Die Truhe kracht auf: 100 Gold! Du hast gewonnen!")
        break
    elif befehl == "schau":
        print("Inventar:", inventar or "leer")
    else:
        print("Möglich: n/s/o/w · schau · nimm schluessel · oeffne truhe · ende")

Das komplette Programm zum Testen

Hier das Ganze zusammen — direkt hier im Editor lauffähig (input() öffnet ein Fenster; endet die Welt in einer Endlosschleife, lädst du die Seite neu. Lokal läuft es mit python3 abenteuer.py):

Übungen

Übung 1 — Der vierte Raum

Baue einen Raum garten westlich vom Hof (mit eigener Beschreibung) und ergänze die Ausgänge beidseitig.

Musterlösung zeigen
# im raeume-Dict:
#   "garten": {"text": "Ein Garten voller Kräuter.",
#             "exits": {"osten": "hof"}},
# im Hof-Dict die Ausgänge:
#   "exits": {"norden": "kammer", "osten": "keller", "westen": "garten"}

Übung 2 — Der Inventar-Befehl

Ergänze den Befehl inventar, der die Liste ausgibt — oder „leer“, wenn nichts drin ist.

Musterlösung zeigen
    elif befehl == "inventar":
        print("Inventar:", inventar or "leer")

Übung 3 — Erst gewinnen, dann feiern

Sorge dafür, dass oeffne truhe beim zweiten Mal nur noch „Sie ist offen.“ sagt statt erneut Gold zu zählen. (Tipp: die Variable siegreich existiert schon.)

Musterlösung zeigen
    elif befehl == "oeffne truhe" and raum == "kammer":
        if siegreich:
            print("Sie ist offen. Gold ist Gold.")
        else:
            siegreich = True
            print("100 Gold! Du hast gewonnen!")

Übung 4 — Höflichkeit zahlt sich aus

Gib bei unbekannten Befehlen zusätzlich den aktuellen Raum aus, damit der Spieler weiß, wo er steht.

Musterlösung zeigen
    else:
        print("Möglich: n/s/o/w · schau · nimm schluessel · oeffne truhe · ende")
        print("(Du bist in:", raum + ")")

Was Falkenmoor extra macht

Dein Abenteuer ist ein Ein-Personen-Spiel: eine Schleife, ein Held, eine Welt im Speicher. Falkenmoor muss zusätzlich vieles: viele Spieler gleichzeitig bedienen (WebSocket), jeden Spielstand dauerhaft speichern (SQLite), Kämpfe, Quests, Gilden und zwei Sprachen berechnen und verwalten — und eine Welt aus world.json lesen, statt sie ins Programm zu tippen.

Genau diese Schicht heißt Falkencode. Und nun die wichtigste Faustregel der Reihe: Fang bei engine.py an, nicht bei app.py — die Spiellogik erklärt die Welt, der Webserver ist nur die Tür davor. Die Serie dazu wartet in der Kategorie Falkencode.

Mehr aus der Kategorie „Zum Spiel“

← Zurück zum Lehrpfad