Eigentlich hatte ich ja etwas ganz anderes vor, aber das neue Release von Shoes hatte mich dazu verleitet, das Processing-Bespielprogramm der rennenden Orks auch in Shoes zu implementieren. Im Großen und Ganzen habe ich dazu das hier schon einmal verwendete Grundgerüst genutzt und das fertige Programm sieht dann so aus:
# encoding: utf-8
FPS = 15
speed = 5
x = rand(320-32)
y = -48
Shoes.app width: 320, height: 320 do
background "images/map.png"
orc = image "images/orc1.png", left: x, top: y
animate(FPS) do |frame|
y += speed
if frame % 4 == 1
orc.path = "images/orc1.png"
elsif frame % 4 == 3
orc.path = "images/orc3.png"
else
orc.path = "images/orc2.png"
end
orc.move x, y
if y >= 320 then
x = rand(320-32)
y = -48
end
end
end
Shoes kennt nicht die Möglichkeit, einzelne Sprites aus einem Sheet heraus zu kopieren und dann zur Animation zu verwenden (zumindest habe ich sie nicht gefunden), da das Toolkit zum Bildwechsel immer einen Pfad zur Bilddatei verlangt. Daher habe ich die einzelnen Sprites mit dem Gimp herausgeschnitten und als einzelne Dateien im Programm verwendet. Dabei komme ich mit drei Bildern aus, da der zweite und der vierte Schritt (der »stehende« Ork) identische Bilder verwenden.
Hier die Bilder für die unter Euch, die das auch einmal in Shoes nachprogrammieren wollen:
Als Hintergrund habe ich wieder eine 32x32 Pixel große Kachel (map.png
) verwendet. Shoes kachelt ja bekanntlich – wenn nicht anders prgrammiert – den Hintergrund vollständig mit solchen kleinen Bildchen.
Als nächstes habe ich mir dann überlegt, daß es doch nett wäre, wenn viele Orks mit unterschiedlichen Geschwindigkeiten und unterschiedlichen Startpositionen über den Monitor wuseln würden. Dazu habe ich das Programm wie folgt erweitert:
# encoding: utf-8
FPS = 15
num_orcs = 5
orcs = Array.new(num_orcs)
speed = Array.new(num_orcs)
x = Array.new(num_orcs)
y = Array.new(num_orcs)
Shoes.app width: 932, height: 320, title: "Running Orcs" do
background "images/map.png"
for i in 0..num_orcs do
x[i] = rand(900)
y[i] = rand(100)*-1 - 48
orcs[i] = image "images/orc1.png", left: x[i], top: y[i]
speed[i] = rand(5) + 5
end
animate(FPS) do |frame|
for i in 0..num_orcs do
y[i] += speed[i]
if (frame + i) % 4 == 1
orcs[i].path = "images/orc1.png"
elsif (frame + i) % 4 == 3
orcs[i].path = "images/orc3.png"
else
orcs[i].path = "images/orc2.png"
end
orcs[i].move x[i], y[i]
if y[i] >= 320 then
x[i] = rand(900)
y[i] = rand(100)*-1 - 48
speed[i] = rand(5) + 5
end
end
end
end
Die wichtigste Änderung ist, daß ich die Orks in ein Array
gepackt habe und dann in einer Schleife jedem Ork per Zufall eine eigene Position und eine eigene Geschwindigkeit zuweise. (Eigentlich sind es zwei Schleifen, aber die erste Schleife dient nur der Initialisierung.) Das Spielfeld hat zugegebenermaßen ein ungewöhnliches Format, aber das ist nur der Tatsache geschuldet, daß ich einen Screenshot in eben diesem Format oben in die Seite einbauen wollte.
Damit die Orks nicht im Gleichschritt über das Bild rennen, habe ich auch die einzelnen Pfade von jedem Ork in Abhängigkeit von der Schleifenvariable i
gesetzt. Das kann man sicher eleganter lösen, sieht aber auch so schon sehr cool aus.
Damit hat man fast ein komplettes Spiel. Als nächstes könnte man unten einen Zauberer hinstellen, der sich nur nach rechts und links bewegen kann und mit Hilfe seines magischen Stabs die Orks vernichten soll. Das heißt: Jeder Ork, der vom Zauberer abgefangen wird, ist vernichtet, bringt dem Zauberer magische Lebenspunkte für den Highscore und ist aus dem Rennen (ey, es ist Irrsinn, aber es ist ein Spiel). Im Gegenzug nimmt jeder Ork, der durchkommt, dem Zauberer magische Lebenspunkte.
Vielleicht programmiere ich das tatsächlich mal. So viel zu Spielen und so wenig Zeit.
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung