HomeTurtlegrafikGPanelRobotikGameGrid WebTigerPython
 Python - Online
kollisionen

5. KOLLIONEN IN GITTER

 

 

DU LERNST HIER...

 

dass die Interaktion zwischen den Spielfiguren bei der Game-Programmierung von grosser Wichtigkeit sind. Bei den Kollisionen im Gitter überprüfst du, ob sich mehrere Actors in der gleichen Gitterzelle befinden.

Die Methode getActorsAt() gibt alle Actors, die sich in einer bestimmten Zelle befinden in einer Liste zurück. Befindet sich in einer Zelle nur ein oder kein Actor, kannst du die Methode getOneActorAt() verwenden, welche den Actor oder None zurückgibt, wenn kein Actor in der Zelle ist.

 

 

MUSTERBEISPIELE

 

 

Beispiel1: Der Pacman schlickt Pillen
 

Zu Beginn werden 10 Pillen der Klasse Pill mit der Methode getRandomEmptyLocation() an zufällig gewählte freie Positionen im Gitter gesetzt. Der Pacman läuft durch das Gitter und isst die Pillen. Mit der Methode getOneActorAt(self.getLocation(), Pill)kann überprüft werden, ob sich an der aktuellen Position eine Pille befindet. Wenn ja, lässt man sie mit actor.hide() verschwinden.

Anstelle der Methode hide() kann auch actor.removeSelf() verwendet werden. Dabei wird der Actor endgültig vernichtet und kann mit reset() nicht mehr zurückgeholt werden.
 

Programm:

# Gg5.py
from gamegrid import *

# ------------- class Pacman --------------------------
class Pacman(Actor):
     def __init__(self):
         Actor.__init__(self, "sprites/pacman.gif", 2)
     def act(self):
         self.move()
         self.tryToEat()
         self.showNextSprite()
         if self.getX() == 9:
             self.turn(90)
             self.setHorzMirror(True)
         if self.getX() == 0:
             self.turn(270)
             self.setHorzMirror(False)                
     def tryToEat(self):
        self.show(0)
        actor = getOneActorAt(self.getLocation(), Pill)
        if actor != None:
            actor.hide()
            self.show(1)                  
                    
 # ------------- class Pill ---------------------------
class Pill(Actor):
     def __init__(self):
         Actor.__init__(self, "sprites/pill_0.gif")
                        
# ---------------- main ------------------------------
makeGameGrid(10, 10, 60, Color.red)
paki = Pacman()
addActor(paki, Location(0, 0))
for i in range(20):
    addActor(Pill(), getRandomEmptyLocation())
show()
doRun() 
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Mit actor = getOneActorAt(self.getLocation, Pill) kannst du überprüfen, ob sich eine Pille an der aktuellen Position befindet. Wenn ja (if (actor != None): gibt True zurück), lässt du sie mit actor.hide() verschwinden.

 

 

ZUM SELBST LÖSEN

 

1.

Erzeuge einen animierten Actor Fish() mit den Spites fish_0.gif und fish_1.gif und einen Actor Alga() mit dem Sprite alga.gif. An zufällig gewählten Positionen ein im Spielfenster mit dem Hintergrundbild reef.gif werden 20 Algen erzeugt. Der Fisch soll das Meer säubern, d.h. das ganze Spielfeld durchlaufen und alle Algen fressen.  
 

2.
Erzeuge einen Actor Ghost() mit dem Spite ghost.png und einen animierten Actor Creature() mit den Sprites creature_0.gif und creature_1.gif. An zufällig gewählten Positionen werden 30 Creatur-Actors erzeugt. Der Ghost startet in der Zelle (0, 0) läuft das ganze Spielfenster durch. Wenn auf eine Creature trifft, wechselt diese Ihre Farbe.