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.