Kiste
EN

Hangman

Das Wortratespiel — fünf Themen mit je 30 Begriffen, eine klickbare Bildschirm-Tastatur und Konfetti, wenn du gewinnst. Ganz ohne Rangliste, komplett in Kiste.

Hangman im Spiel

Kostenlos selber bauen

Hangman ist quelloffen. Lade den Quelltext, öffne ihn in der Kiste-IDE (oder bau ihn auf der Kommandozeile mit kiste build hangman.ki) — es ist derselbe Code, aus dem das fertige Spiel entsteht. Die vier Klänge liegen bei.

Alles Nötige zum Bauen bringt Kiste selbst mit — kein LLVM, kein GCC, nichts extra zu installieren.

So gebaut

Hangman ist ein reines Kiste-Programm. Es nutzt nur die eingebauten Module gui (Fenster, Zeichnen, Tasten, Maus), klang, liste, zufall, text und wert — keine fremde Spiel-Engine. Hier sind die interessantesten Stellen.

1 · Themen und Zufallswort

Die Wörter stecken in einer verschachtelten Liste: fünf Themen, je 30 Begriffe. Ein Griff mit zufall.ganz zieht das nächste Wort — die Buchstaben sind groß und ohne Umlaute, damit das Raten über die 26er-Tastatur eindeutig bleibt.

// Fünf Themen als verschachtelte Listen, je 30 Begriffe.
nimm themen = ["Tiere", "Länder", "Essen", "Sport", "Weltraum"]
nimm woerter = [
    ["HUND", "KATZE", "PFERD", "MAUS", "ELEFANT", ...],   // Tiere
    ["DEUTSCHLAND", "FRANKREICH", "ITALIEN", ...],        // Länder
    ...
]

// Ein Zufallswort aus dem gewählten Thema.
funktion naechstes_wort() {
    wort = woerter[thema][zufall.ganz(0, 29)]
    geraten = ""
    fehler = 0
}

2 · Ist das Wort gelöst?

geraten ist einfach ein Text, an den jeder geratene Buchstabe angehängt wird. Gelöst ist das Wort, wenn jeder seiner Buchstaben darin vorkommt — wiederhole c in text.zeichen(wort) läuft Zeichen für Zeichen durch.

// Sind alle Buchstaben des Wortes schon geraten?
funktion ist_geloest() {
    wiederhole c in text.zeichen(wort) {
        wenn nicht text.enthält(geraten, c) { gib falsch }
    }
    gib wahr
}

3 · Ein Buchstabe, drei Ausgänge

Jeder Rateversuch endet auf eine von drei Arten: richtig (weiter), daneben (ein Fehler mehr) oder das letzte fehlende Zeichen ist da (gewonnen). Sechs Fehler bedeuten das Aus.

// Ein geratener Buchstabe: richtig, daneben — oder das Wort ist gelöst.
funktion rate_buchstabe(b) {
    wenn text.enthält(geraten, b) { gib }     // schon genutzt
    geraten = "{geraten}{b}"
    wenn text.enthält(wort, b) {
        wenn ist_geloest() {
            serie = serie + 1
            modus = 2                          // gewonnen → Feier
            konfetti_start()
        }
    } sonst {
        fehler = fehler + 1
        wenn fehler >= 6 { modus = 3 }         // sechs Fehler → verloren
    }
}

4 · Die Bildschirm-Tastatur

Statt echter Knopf-Widgets sind die 26 Buchstaben auf die Leinwand gezeichnet — drei Reihen im QWERTZ-Muster. Jede Kachel färbt sich nach ihrem Zustand, und beim Klick prüft eine kleine Trefferabfrage, welche Kachel getroffen wurde. (Die echte Tastatur geht natürlich auch.)

// Jede Buchstaben-Kachel weiß selbst, ob sie schon geraten wurde:
// grün für einen Treffer, rot-gedimmt fürs Danebengreifen.
für c = 0 bis n - 1 {
    nimm b = text.zeichen_bei(zeile, c)
    nimm fuell = "#1e293b"
    wenn text.enthält(geraten, b) {
        wenn text.enthält(wort, b) { fuell = "#064e3b" }   // richtig
        sonst { fuell = "#1a1015" }                        // falsch
    }
    gui.rechteck_rund(bild, x, y, KEY_W, KEY_H, 12, fuell, rand, 2)
    text_mitte(x + KEY_W div 2, y + 14, b, txt, 27)
}

5 · Der Galgen mit Mimik

Der Galgen steht immer; mit jedem Fehler kommt ein Körperteil dazu — und das Gesicht des Männchens wird sichtbar nervöser, vom neutralen Strich bis zum erschrockenen O. Alles nur aus gui.kreis und gui.linie.

// Pro Fehler kommt ein Körperteil dazu — und das Gesicht wird nervöser.
wenn fehler >= 1 { gui.kreis(bild, kx, ky, 26, koerper) }        // Kopf
wenn fehler >= 5 {
    gui.kreis(bild, kx, ky + 10, 5, "#0f172a")                   // Mund: großes O
} sonstwenn fehler >= 3 {
    gui.linie(bild, kx - 8, ky + 12, kx + 8, ky + 8, "#0f172a", 3)  // Sorgenfalte
}
wenn fehler >= 2 { gui.linie(bild, kx, ky + 26, kx, ky + 118, koerper, 5) }  // Rumpf

6 · Konfetti zum Sieg

Löst du das Wort, regnet es Konfetti: 70 kleine Rechtecke, jedes mit eigener Farbe, Geschwindigkeit und Lebensdauer — dieselbe „parallele Listen"-Technik wie bei den Partikeln im Sternjäger. Ein Zeitgeber bewegt sie 60-mal pro Sekunde und zeichnet die Szene neu.

// Beim Lösen regnet es Konfetti: 70 bunte Rechtecke mit Schwerkraft.
funktion konfetti_start() {
    für i = 0 bis 69 {
        liste.hänge_an(cf_x, zufall.ganz(120, BREITE - 120))
        liste.hänge_an(cf_y, zufall.ganz(-60, 100))
        liste.hänge_an(cf_vy, zufall.ganz(3, 8))          // fällt nach unten
        liste.hänge_an(cf_col, KONFETTI[zufall.ganz(0, 5)])
        liste.hänge_an(cf_life, zufall.ganz(70, 150))
    }
}

// Ein Zeitgeber treibt die Feier an und zeichnet 60-mal pro Sekunde neu.
nimm uhr = gui.bei_zeit(16, funktion(t) {
    wenn modus == 2 { konfetti_bewegen() }
    zeichne()
})

Das ist das ganze Rezept: ein paar Listen, ein Text voller geratener Buchstaben, gezeichnete Kacheln und ein Zeitgeber für die Feier. Der komplette Quelltext liegt dem Download oben bei — ändere die Themen, füg eigene Wörter hinzu, mal dir dein eigenes Männchen.