image image


image

Pizza Plane Stage 3: Der Angriff der Killer-Pizzen

Natürlich hat der letzte Beitrag indirekt auch mit meiner kleinen TigerJython- und GameGrid-Tutorial-Reihe zu tun, in der sich ein kleiner, roter Doppeldecker (weniger aus historischen Gründen denn eher als eine Reminiszenz an Snoopy habe ich ihn »Red Baron« genannt) angreifenden Pizzen erwehren muß. Hier habe ich gestern den dritten Teil fertiggestellt, in dem ich stolz die namengebenden Killer-Pizzen vorstelle:

Dafür benötige ich natürlich eine weitere Klasse, die ich Enemy() genannt habe und die ebenfalls von Actor() erbt. Ihre Implementierung ist kurz und straight forward:

class Enemy(Actor):
    
    def __init__(self):
        Actor.__init__(self, True, os.path.join(DATAPATH, "pizza.png"))
        self.speed = randint(3, 6)
        
    def act(self):
        self.move(-self.speed)
        if self.getX() < -30:
            self.setX(WIDTH + randint(30, 100))
            self.setY(randint(30, HEIGHT - 30))
            self.speed = randint(3, 6)

Im Hauptprogramm werden die Pizzen in dieser Schleife zum Leben erweckt:

for _ in range(NO_ENEMIES):
    pizza = Enemy()
    win.addActor(pizza, Location(WIDTH + randint(30, 100), randint(30, HEIGHT - 30)))

Ansonsten hat sich in dieser Version kaum etwas geändert. Hier – wie gewohnt – der komplette Quellcode, damit ihr das Programm nachvollziehen könnt:

# Pizza Plane Stage 3: Klasse »Enemy«
# Background Image: »PWL« (https://opengameart.org/content/seamless-desert-background-in-parts)
# Aeroplane: Tappy Plane, Kenney (https://www.kenney.nl/assets/tappy-plane)

from gamegrid import *
from random import randint
import os

WIDTH = 720
HEIGHT = 480

DATAPATH = os.path.join(os.getcwd(), "data")
BGWIDTH    = 1067   # Breite des Hintergrundbildes
BGWIDTH2   = 533    # BGWIDTH//2 (abgerundet)
NO_ENEMIES = 10     # Anzahl der Feinde

class Background(Actor):
    
    def __init__(self):
        Actor.__init__(self, True, os.path.join(DATAPATH, "desert.png"))
        self.speed = -1
        
    def act(self):
        self.move(self.speed)
        if self.getX() < -BGWIDTH2:
            self.setX(BGWIDTH + BGWIDTH2)

class Plane(Actor):
    
    def __init__(self):
        Actor.__init__(self, True, os.path.join(DATAPATH, "planered.png"), 3)
        self.timer = 5
        self.updown = 2
        
    def act(self):
        if isKeyPressed(38):    # UP
            if self.getY() > 20:
                self.setY(self.getY() - self.updown)
        if isKeyPressed(40):    # DOWN
            if self.getY() < HEIGHT - 20:
                self.setY(self.getY() + self.updown)
        if self.timer == 0:
            self.showNextSprite()
            self.timer = 5
        self.timer -= 1

class Enemy(Actor):
    
    def __init__(self):
        Actor.__init__(self, True, os.path.join(DATAPATH, "pizza.png"))
        self.speed = randint(3, 6)
        
    def act(self):
        self.move(-self.speed)
        if self.getX() < -30:
            self.setX(WIDTH + randint(30, 100))
            self.setY(randint(30, HEIGHT - 30))
            self.speed = randint(3, 6)
 
win = makeGameGrid(WIDTH, HEIGHT, 1, Color.GRAY, True)
win.setTitle("Pizza Plane Stage 3: The Attack of the Killer Pizzas")
win.setSimulationPeriod(20)

bg1 = Background()
bg2 = Background()
win.addActor(bg1, Location(BGWIDTH2, 260))
win.addActor(bg2, Location(BGWIDTH + BGWIDTH2, 260))
for _ in range(NO_ENEMIES):
    pizza = Enemy()
    win.addActor(pizza, Location(WIDTH + randint(30, 100), randint(30, HEIGHT - 30)))
redBaron = Plane()
win.addActor(redBaron, Location(70, 200))

win.show()
win.doRun()

Die Bilder der Pizzen hab ich Twitters Twemojis entnommen, einer freien (CC-BY 4.0) Emoji-Sammlung, deren Lizenz selbst eine kommerzielle Nutzung erlaubt. Ich bin mir allerdings noch nicht sicher, ob es eine gute Idee ist, die Pizzastücke mit der breiten Seite nach vorne auf den Flieger prallen zu lassen, eventuell wirkt es gefährlicher, wenn ich sie um 180° horizontal spiegle (also die spitze Seite nach vorne zeigt). Still digging!

Bisher besteht diese Tutorial-Reihe aus diesen drei Tutorials:

  1. Pizza Plane mit TigerJython und GameGrid (Stage 1)
  2. Pizza Plane Stage 2: Aufrufen oder zurückrufen?
  3. Pizza Plane Stage 3: Der Angriff der Killer-Pizzen

Fortsetzung folgt …

Den Quellcode und die Assets gibt es auch wieder in meinem GitLab-Repositorium zu TigerJython.


(Kommentieren) 

image image



Ü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 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!


Werbung


image  image  image
image  image  image


image