image image


Tutorial: Ninja Frog in Pygame Zero (Stage 1)

Letzten Donnerstag hatte ich Euch eine neunteilige Playlist vorgestellt, in der Phil Hiett einen Platformer in Pygame Zero programmierte. Schon damals hatte ich angedroht, daß ich mich auch an so etwas versuchen möchte. Nun denn, hier ist der erste Teil meiner Bemühungen, stark inspiriert von und angelehnt an Phil Hietts »Ninja Jumper«.

image

Zuerst einmal habe ich die notwendigen Importe vorgenommen (wobei das Module time erst in einer späteren Fassung benötigt wird), die Größe des Fensters und den Fenstertitel festgelegt und zwei Variablen deklariert, die für die Animation der Hintergrundfarbe benötigt werden:

import pgzrun
import pygame
import time
import sys

WIDTH = 640
HEIGHT = 480
TITLE = "🐸 Ninja Frog (1) 🐸"

blue = 130
blueforward = True

Wie Ihr dem Screenshot entnehmen könnt, kann der von mir verwendetete Texteditor Geany keine Emojis anzeigen. Das Problem ist den Machern von Geany bekannt, aber die Behebung wohl nicht so einfach (es muß wohl die verwendete C-Bibliothek für die Textdarstellung ausgetauscht werden). Daher werde ich Emojis in Strings in den folgenden Versionen erst einmal nicht verwenden (oder – wie hier – mogeln, indem ich für das Einfügen der Emojis einfach einen anderen Editor) verwende. 🤓

Dann habe ich das Rechteck für den Boden, auf dem der Ninja-Frosch steht, festgelegt, den Ninja-Frosch selber initialisiert, die Koordinaten der einzelnen Plattformen getrennt nach x- und y-Koordinate in zwei Listen gespeichert und schließlich die einzelnen Plattformen in die Liste platforms eingefügt:

ground = Rect((0, HEIGHT - 16), (WIDTH, 16))

ninja = Actor("ninja_idle1")
ninja.pos = (WIDTH/2, HEIGHT - 32)

platform_x = [20, 180, 360, 540, 100, 280, 480, 20, 180, 360, 540, 280]
platform_y = [120, 120, 120, 120, 220, 220, 220, 320, 320, 320, 320, 400]
platforms = []
for i in range(len(platform_x)):
    platforms.append(Actor("platform", (platform_x[i] + 40, platform_y[i])))

Die Methode draw() zeichnet das einfach alles:

def draw():
    screen.fill((85, 180, blue))
    screen.blit("background", (0, 0))
    screen.blit("ninjafrogground", (0, HEIGHT - 16))
    for platform in platforms:
        platform.draw()
        
    ninja.draw()

In update() passiert noch nicht viel, da wird nur background_colour_fade() aufgerufen, eine Methode, die die Hintergrundfarbe von blau nach grün und wieder zurück oszillieren läßt:

def update():
    background_colour_fade()

def background_colour_fade():
    global blue, blueforward
    if blue < 220 and blueforward:
        blue += 1
    else:
        blueforward = False
    if blue > 130 and not blueforward:
        blue -= 1
    else:
        blueforward = True

Solange der Blauanteil der Hintergrundfarbe kleiner 220 ist und blueforward = True, wird der Blauanteil erhöht, ansonsten wird blueforward auf False gesetzt. In diesem Fall wird geprüft, ob der Blauanteil größer 130 und blueforward = False ist, denn dann wird der Blauanteil vermindert. Wird die 130 erreicht wird blueforward wieder auf True gesetzt. So wird erreicht, daß der Blauanteil ständig zwischen 130 und 220 hin- und herschwingt.1

Dann gibt es da noch eine kleine, eigentlich nutzlose Methode, die nicht wirklich zum Spiel gehört:

def on_key_down():
    ## Spielende mit ESC
    if keyboard.escape:
        sys.exit()

Aber mich hatte – seitdem ich mit Pygame Zero spiele – gestört, daß das Spiel nur mit der Maus im Close Button des Spielefensters beendet werden kann. Diese Methode beendet es nun auch mit der Escape-Taste.

Zum Schluß muß das Script nur noch pgzrun.go() aufrufen, damit es aus dem Editor heraus gestartet werden kann:

pgzrun.go()

Die Bilder der Wolken und der Plattformen habe ich zwei freien (Public Domain) Tilesets entnommen, die ironischerweise beide Generic Plattformer heißen (Tileset 1 und Tileset 2) und in Tiled zusammengesetzt, während der Ninja-Frosch aus dem ebenfalls freien Tileset Pixel Adventure stammt. Doch wie immer könnt Ihr natürlich den Quellcode und sämtliche Assets in meinem GitHub-Repositorium finden.

In nächsten Stage werde ich den Frosch hüpfen lassen, damit endlich etwas passiert. Still digging!

image

  1. Für meinen Geschmack läuft der Wechsel noch etwas zu schnell ab, ich werde in zukünftigen Versionen mal mit Zahlen kleiner Eins experimentieren. 


(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