Spiel vorbei#
Typischerweise passiert bei einem Game-Over-Ereignis Folgendes:
Das Spiel wird angehalten
Ein Text erscheint (ggf. mit einem Highscore)
Es gibt eine Möglichkeit, das Spiel neu zu starten
Zunächst ist es sinnvoll, eine Methode zu definieren, die alle Akteure erstellt, die beim Start eines Spiels benötigt werden:
def setup():
player = Circle(40,100)
@player.register
def on_key_pressed(self, keys):
global running
if running:
if 's' in keys:
self.y += 1
if 'w' in keys:
self.y -= 1
else:
setup()
@player.register
def on_detecting_actor(self, other):
if other in enemies:
game_over()
Diese Methode erstellt ein Spielerobjekt und registriert bereits Ereignisse dafür. Wenn zum Beispiel ein anderer Akteur erkannt wird, wird die Methode game_over
ausgelöst.
In der Methode game_over
wird die Welt angehalten:
def game_over():
global running
running = False
Text(100,100, "Game Over")
world.stop()
Global wird überprüft, ob die LEERTASTE gedrückt wird – wenn die Welt angehalten ist, wird die Methode restart
ausgelöst:
@world.register
def on_key_down(self, keys):
global running
if not running and "SPACE" in keys:
restart()
Die Methode restart
entfernt alle Akteure, startet die Welt neu und ruft setup
auf:
def restart():
global running
enemies = []
for actor in world.actors:
actor.remove()
world.start()
running = True
setup()
Vollständiges Beispiel:
from miniworlds import *
import random
running = True
enemies = []
world = World()
def setup():
player = Circle(40,100)
@player.register
def on_key_pressed(self, keys):
global running
if running:
if 's' in keys:
self.y += 1
if 'w' in keys:
self.y -= 1
else:
setup()
@player.register
def on_detecting_actor(self, other):
if other in enemies:
game_over()
def game_over():
global running
running = False
Text(100,100, "Game Over")
world.stop()
def restart():
global running
enemies = []
for actor in world.actors:
actor.remove()
world.start()
running = True
setup()
def create_enemy():
global enemies
enemy = Circle(400, random.randint(0,400))
enemies.append(enemy)
@enemy.register
def act(self):
self.x -= 1
if self.x < 0:
enemies.remove(self)
self.remove()
@world.register
def act(self):
if self.frame % 50 == 0:
create_enemy()
@world.register
def on_key_down(self, keys):
global running
if not running and "SPACE" in keys:
restart()
setup()
world.run()