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.