Projekt 2 - Super Mario

Im Projekt 2 wollen wir unsere Spielfigur bewegen. „Super Mario“ soll Münzen sammeln. Die Spielzeit soll begrenzt werden und am Ende soll ein Punktestand angezeigt werden.

Vorbereitungen

Zunächst legen wir ein Projektverzeichnis (z.B.supermario) an. Im Projektverzeichnis muss sich Unterverzeichnis images mit den Bildern mario.png und money.png befinden. Die Bilder können wieder hier: https://icons8.de/icon/set/characters/color heruntergeladen werden.

Beschreibung des Programms

Zu nächst des gesamte Programm:

from random import randint WIDTH = 600 HEIGHT = 600 score = 0 game_over = False mario = Actor("mario.png") mario.pos = 100, 100 coin = Actor("money.png") coin.pos = 200, 200 def draw(): screen.fill("green") mario.draw() coin.draw() screen.draw.text("Punkte: " + str(score), color="black", topleft=(10, 10)) if game_over: screen.fill("pink") screen.draw.text("Endstand:" + str(score), topleft=(10, 10), fontsize = 60) def place_coin(): coin.x = randint(20, (WIDTH-20)) coin.y = randint(20, (HEIGHT-20)) def time_up(): global game_over game_over = True def update(): global score if keyboard.left: mario.x = mario.x - 4 elif keyboard.right: mario.x = mario.x + 4 elif keyboard.up: mario.y = mario.y - 4 elif keyboard.down: mario.y = mario.y + 4 coin_collectet = mario.colliderect(coin) if coin_collectet: score = score + 10 place_coin() clock.schedule(time_up, 20.0) place_coin()

Mit der Zeile

from random import randint

werden die Funktionen für Zufallszahlen eingebunden.

Mit

WIDTH = 600 HEIGHT = 600 score = 0 game_over = False

werden einige globale Konstanten bzw. Variablen festgelegt. WIDTH und HEIGHT legen die Größe des Spielfensters fest In score wird der Punktestand abgespeichert, game_over wird auf True gesetzt, wenn die Zeit abgelaufen ist.

Mit

mario = Actor("mario.png") mario.pos = 100, 100 coin = Actor("money.png") coin.pos = 200, 200

werden die Akteure des Spiels definiert.

def draw(): screen.fill("green") mario.draw() coin.draw() screen.draw.text("Punkte: " + str(score), color="black", topleft=(10, 10)) if game_over: screen.fill("pink") screen.draw.text("Endstand:" + str(score), topleft=(10, 10), fontsize = 60)

Mit der Funktion draw() werden die Akteure auf den Bildschirm gezeichnet und die Bildschirmfarbe auf grün gesetzt. Wenn das Spiel vorbei ist, wird die Farbe des Bildschirms geändert und der Spielstand angezeigt.

def place_coin(): coin.x = randint(20, (WIDTH-20)) coin.y = randint(20, (HEIGHT-20))

Mit der Funktion place_coin() wird die Münze an einer zufälligen Stelle auf dem Bildschirm platziert.

def time_up(): global game_over game_over = True

Die Funktion time_up() setzt die Variable game_over() auf True.

def update(): global score if keyboard.left: mario.x = mario.x - 4 elif keyboard.right: mario.x = mario.x + 4 elif keyboard.up: mario.y = mario.y - 4 elif keyboard.down: mario.y = mario.y + 4 coin_collectet = mario.colliderect(coin) if coin_collectet: score = score + 10 place_coin()

Die Funktion update() ist eine in Pygamezero vordefinierte Funktion. Sie wird sechszig mal pro Sekunde ausgeführt.

Mit der if-elif-Anweisung wird auf die Pfeiltasten der Tastatur reagiert. Die Position von Mario wird dann entsprechend verändert coin_collected wird auf True gesetzt, wenn Mario und die Münze kollidieren.

Wenn das passiert, wird der Score erhöht und die Münze an einer anderen Stelle platziert.

clock.schedule(time_up, 20.0)

Mit dieser Programmzeile wird festgelegt, wie lange das Programm läuft.

Erkärvideo

Aufgaben

Aufgabe 1

Teste den Programmcode! Verändere die Laufzeit des Programms und die Geschwindigkeit von Mario!

Aufgabe 2

Erhöhe die Anzahl der Münzen die angezeigt werden.

Aufgabe 3

Lass zusätzlich andere Münzen oder Gegenstände anzeigen, für die Mario einen anderen Score bekommt.