HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
kollisionen
Deutsch   English   Français   

5. COLLISIONS DANS LA GRILLE

 

 

TU APPRENDRAS ICI...

 

que les interactions entre les personnages jouent un rôle très important dans la programmation de jeux. Pour détecter les collisions dans une grille, tu vérifies si plusieurs Actors se trouvent dans la même cellule.

La méthode getActorsAt() renvoie une liste de tous les Actors qui se trouvent dans une cellule donnée. Si une cellule contient au maximum un Actor, tu peux utiliser la méthode getOneActorAt(), qui renvoie l'Actor ou None si aucun Actor ne se trouve dans cette cellule.

 

 

EXAMPLES

 

 

Example1: Pacman avale des pilules
 

Au début, des pilules de la classe Pill sont placées à des positions libres choisies au hasard dans la grille à l'aide de la méthode getRandomEmptyLocation(). Pacman se déplace dans la grille et mange les pilules. La méthode getOneActorAt(self.getLocation(), Pill)permet de vérifier si une pilule se trouve à la position actuelle. Si c'est le cas, on la fait disparaître avec actor.hide().

À la place de la méthode hide(), on peut également utiliser actor.removeSelf(). Dans ce cas, l'Actor est définitivement supprimé et ne peut plus être réaffiché avec show().
 

Programme:

# 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, False)
paki = Pacman()
addActor(paki, Location(0, 0))
for i in range(20):
    addActor(Pill(), getRandomEmptyLocation())
show()
doRun() 
► Copy to clipboard

 

 

À RETENIR...

 

Avec l'instruction actor = getOneActorAt(self.getLocation, Pill), tu peux vérifier si une pilule se trouve à la position actuelle. Si c'est le cas, la condition if actor != None: renvoie True et tu peux faire disparaître la pilule avec actor.hide().

 

 

À FAIRE PAR TOI-MÊME

 

1.

Un poisson nettoie la mer
Crée un Actor animé Fish() avec les sprites fish_0.gif et fish_1.gif, ainsi qu'un Actor Alga() avec le sprite alga.gif. Dans la fenêtre de jeu avec l'image de fond reef.gif, crée 20 algues à des positions choisies au hasard.

Le poisson doit nettoyer la mer, c'est-à-dire parcourir tout le terrain de jeu et manger toutes les algues.

 
 

2.

Un fantôme change la couleur des créatures
Crée un Actor Ghost() avec le sprite ghost.png et un Actor animé Creature() avec les sprites creature_0.gif et creature_1.gif.

Crée 30 Actors de la classe Creature à des positions choisies au hasard. Le fantôme démarre dans la cellule (0, 0) et parcourt toute la fenêtre de jeu. Lorsqu'il rencontre une créature, celle-ci change de couleur.