Kiste
EN

Fang die Münze

Ein Endlos-Fangspiel: schnapp dir Münzen und Diamanten, weich den Bomben aus, sammle Überraschungen — Herz (Extra-Leben), Stern (doppelte Punkte), Uhr (Zeitlupe). Wird immer schneller, mit Bestenliste. Komplett in Kiste.

Fang die Münze im Spiel

Kostenlos selber bauen

Fang die Münze ist quelloffen. Lade den Quelltext, öffne ihn in der Kiste-IDE (oder bau ihn auf der Kommandozeile mit kiste build muenzfang.ki) — es ist derselbe Code, aus dem das fertige Spiel entsteht. Die fünf Klänge liegen bei.

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

So gebaut

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

1 · Alles fällt in parallelen Listen

Statt Objekten führt das Spiel für jede Eigenschaft eine eigene Liste — Item i hat seine Position in ix[i]/iy[i], seinen Typ in it[i]. Sieben Typen, von der Bronze-Münze bis zur Uhr.

// Alle fallenden Dinge in parallelen Listen — Item i hat seine
// Position in ix[i]/iy[i], seinen Typ in it[i].
// Typ: 0 Bronze · 1 Gold · 2 Diamant · 3 Bombe · 4 Herz · 5 Stern · 6 Uhr.
nimm ix = liste.gefüllt(0, 0)
nimm iy = liste.gefüllt(0, 0)
nimm it = liste.gefüllt(0, 0)
nimm ivy = liste.gefüllt(0, 0)
nimm ialive = liste.gefüllt(0, 0)

2 · Immer schneller, immer gefährlicher

Das Endlos-Gefühl entsteht aus zwei Stellschrauben: Mit dem Level steigt die Bomben-Wahrscheinlichkeit, und die Dinge fallen schneller. Der Typ wird per gewichtetem Zufall gezogen — Münzen häufig, Diamanten und Power-ups selten.

// Mit steigendem Level fallen mehr Bomben — und alles schneller.
nimm bomb_ch = 12 + level * 2
wenn bomb_ch > 32 { bomb_ch = 32 }
wenn r < bomb_ch { t = 3 }              // Bombe
sonstwenn r < bomb_ch + 3 { t = 4 }     // Herz (selten)
sonstwenn r < bomb_ch + 6 { t = 5 }     // Stern (2x Punkte)
sonstwenn r < bomb_ch + 9 { t = 6 }     // Uhr (Zeitlupe)
sonstwenn r < bomb_ch + 15 { t = 2 }    // Diamant
sonstwenn r < bomb_ch + 45 { t = 1 }    // Gold
sonst { t = 0 }                         // Bronze

3 · Fangen oder verpassen

Die ganze Spielmechanik steckt in einer Prüfung: Ist ein Item auf Korbhöhe und nah genug an der Korbmitte? Dann ist es gefangen. Fällt es unten heraus, ist es verpasst — und eine verpasste Gold- oder Diamant-Münze reißt die Fang-Serie ab.

// Gefangen, wenn ein Item den Korb auf Höhe UND Breite erreicht.
wenn y >= KORB_Y - 8 und y <= KORB_Y + 30 und betrag(x - px) < KORB_B div 2 + 16 {
    ialive[i] = 0
    fang_item(t, x, KORB_Y)
} sonstwenn y > HOEHE + 20 {
    ialive[i] = 0
    wenn t == 1 oder t == 2 { combo = 0 }   // wertvolle Münze verpasst
}

4 · Combo, Punkte und Power-ups

Was beim Fangen passiert, hängt am Typ. Eine Bombe kostet ein Leben (und der Bildschirm blitzt rot). Sonst wächst die Combo — je fünf Fänge ein Multiplikator mehr — und Stern bzw. Uhr schalten für ein paar Sekunden doppelte Punkte oder Zeitlupe frei.

funktion fang_item(t, x, y) {
    wenn t == 3 {
        leben = leben - 1                    // Bombe kostet ein Leben
        combo = 0
        flash = 12
        wenn leben <= 0 { game_over() }
    } sonst {
        combo = combo + 1
        wenn t == 5 { doppel = 500 }          // Stern: 2x Punkte
        sonstwenn t == 6 { slow = 360 }       // Uhr: Zeitlupe
        sonst {
            nimm mult = 1 + combo div 5       // eine Fang-Serie zahlt sich aus
            wenn doppel > 0 { mult = mult * 2 }
            punkte = punkte + item_wert(t) * mult
        }
    }
}

5 · Sprites aus Kreisen und Linien

Es gibt keine Bilddateien — jede Münze, jeder Diamant, jede Bombe wird pro Bild aus gui.kreis und gui.linie zusammengesetzt. Ein heller Punkt macht aus einem Kreis eine glänzende Münze, eine kurze Linie mit Funke eine Bombe.

// Kein einziges Bild — jedes Item ist aus Kreisen und Linien gebaut.
// Eine Münze mit Glanzpunkt:
gui.kreis(bild, x, y, 15, "#b45309")
gui.kreis(bild, x, y, 11, "#f59e0b")
gui.kreis(bild, x - 4, y - 4, 3, "#fef9c3")
// Eine Bombe mit Zündschnur und Funke:
gui.kreis(bild, x, y, 15, "#0f172a")
gui.linie(bild, x + 8, y - 10, x + 13, y - 20, "#a16207", 3)
gui.kreis(bild, x + 14, y - 22, 3, "#f59e0b")

6 · Maus und Tastatur

Den Korb steuerst du am liebsten mit der Maus — gui.bei_maus_bewegung setzt seine Position direkt. Wer lieber tippt, nutzt die Pfeiltasten; beide Wege laufen gleichzeitig.

// Der Korb folgt der Maus …
gui.bei_maus_bewegung(bild, funktion(c) {
    wenn modus == 1 { px = gui.maus_x(c) }
})

// … oder den Pfeiltasten (im Game-Loop, gehaltene Tasten):
wenn gui.taste_gedrückt(fenster, "links") == 1 { px = px - SP_SPEED }
wenn gui.taste_gedrückt(fenster, "rechts") == 1 { px = px + SP_SPEED }

Das ist das ganze Rezept: ein paar parallele Listen, eine Kollisionsprüfung, ein Zeitgeber und selbst gezeichnete Sprites. Der komplette Quelltext liegt dem Download oben bei — erfinde neue Item-Typen, dreh an der Schwierigkeit, bau dein eigenes Fangspiel daraus.