Eigentlich wollte ich ja erst das Spiel mit dem Roten Baron im Kampf gegen die pösen Pizzen fertigstellen, aber da auf der einen Seite die böse Männergrippe mich ein wenig ausgebremst hat und auf der anderen Seite Halloween vor der Türe steht, habe ich zur Feier dieses unchristlichen Feiertags mein Programm erwas umgestellt. Ich möchte irgendetwas halloweenartiges mit Kürbissen programmieren – natürlich in TigerJython:
Zur Einstimmung habe ich mir ein Ballerspiel mit der Schildkröte vorgeknöpft, das ich vor über vier Jaren – so lange ist das schon wieder her? – als außerplanmäßige Fortsetzung eines ursprünglich dreiteiligen Tutorials zur Spieleprogrammierung mit Pythons Turtle-Modul programmiert hatte. Wie immer, wenn es um Spieleprogrammierung mit Pythons Schildkröte geht, steckten da natürlich ganz viele Ideen von Christan Thompson (aka TokiyoEdtech) mit drin.
Meine eigene Turtle-Version läuft auf meinem betagten MacBook Pro doch schon ein wenig stotternd und da wollte ich in einer ersten Version ausprobieren, wie sich TigerJython performancemäßig schlägt. Und ich bin sehr zufrieden: Auch 100 Pumpkins gleiten ohne Verzögerung und ohne zu ruckeln über den Bildschirm.
Daher hier erst einmal der Quellcode dieser ersten Fassung:
# title: Pumpkin Attack
# Author: Jörg Kantel
from gamegrid import *
from random import randint
import os
WIDTH = 680
HEIGHT = 680
LEFTMARGIN = 40 + 14
RIGHTMARGIN = 640 - 14
TOPMARGIN = 40 + 14
BOTTOMMARGIN = 640 - 14
NOPUMP = 100
DATAPATH = os.path.join(os.getcwd(), "data")
class Background(Actor):
def __init__(self):
Actor.__init__(self, False, os.path.join(DATAPATH, "moonnight2.jpg"))
class Enemy(Actor):
def __init__(self):
Actor.__init__(self, False, os.path.join(DATAPATH, "pumpkin.png"))
self.speed = randint(1, 5)
def act(self):
self.move(self.speed)
if self.getX() >= RIGHTMARGIN:
self.setX(RIGHTMARGIN)
self.direction -= randint(90, 270)
elif self.getX() <= LEFTMARGIN:
self.setX(LEFTMARGIN)
self.direction -= randint(90, 270)
if self.getY() >= BOTTOMMARGIN:
self.setY(BOTTOMMARGIN)
self.direction -= randint(90, 270)
elif self.getY() <= TOPMARGIN:
self.setY(TOPMARGIN)
self.direction -= randint(90, 270)
win = makeGameGrid(WIDTH, HEIGHT, 1, Color(color("#2b3e50")), True)
win.setPosition(1300, 40)
win.setTitle("Pumpkin Attack, Stage 1 🎃") # Titelzeile mit Pumpkin-Emoji (im Editor nicht sichtbar)
win.setSimulationPeriod(20)
bg = Background()
win.addActor(bg, Location(WIDTH//2, HEIGHT//2))
for _ in range(NOPUMP):
p = Enemy()
win.addActor(p, Location(randint(54, 640 - 14), (randint(54, 640 - 14))))
p.setDirection(randint(20, 340))
win.show()
win.doRun()
Neu daran ist eigentlich nur die Methode Actor.direction()
, die die Richtung der Spielefigur in Grad erwartet. Damit kann mittels der einfachen move()
-Methode (wird von doRun()
aufgerufen) der Actor in alle Richtungen des Kompasses über den Bildschirm gescheucht werden.
An den Rändern des Spielfeldes wird der Kürbis in eine zufällige Richtung zurückgestoßen. Das ist zwar physikalisch nicht ganz korrekt, aber erstens befiehlt ja niemand, daß ich mich in meinem Spiel sklavisch an die Gesetze der Physik halten muß und zweitens macht es – da die Richtung, die die Kürbisse einschlagen werden, unvorhersehbar ist – das Spiel interessanter.
Wenn man es nicht verbietet, drehen sich die Kürbisse beim Richtungswechsel mit. Das wirkte in meinen Augen allerdings seltsam und daher habe ich es dem Gemüse verboten. Dieses »Verbot« erreicht man, indem man das zweite Argument im Konstruktor (nach self
) auf False
setzt.
Zum Schluß noch eine Überraschung: TigerJython kann Emojis! Zumindest in der Titelzeil des Spielefensters. Diese Emojis sind zwar im TigerJython-Editor nicht sichtbar, aber sie werden – wie der Screenshot zeigt – dennoch in der Titelzeile 🎃 angezeigt.
So, und jetzt werde ich – mag mich die Männergrippe auch weiterhin quälen – versuchen, bis zum nächsten Wochenende diesen bunten Halloweenzauber weiter auszubauen. Still digging!
Danach geht es aber zurück zum Roten Baron und den pösen Pizzen. Die aktuellen, politischen Nachrichten aus Italien verlangen danach. Stellt Euch einfach vor, daß jede abgeschossene Pizza ein abgeschossener Neofaschist sei.
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und ehemaliger 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
Diese Spalte wurde absichtlich leergelassen!