bewegen
Deutsch   English   Français   

3. DÉPLACER LES ACTORS

 

 

TU APPRENDRAS ICI...

 

comment donner aux Actors une « vie propre » dynamique. Dès que la fonction doRun() est appelée, un cycle de simulation démarre, au cours duquel la méthode act()est appelée périodiquement.


 

Le concept fondamental de GameGrid consiste à donner aux Actors une « vie propre » dynamique. Dès que tu cliques sur le bouton Run de la barre de navigation ou que tu appelles la fonction doRun(), un cycle de simulation démarre, au cours duquel la méthode act() est appelée périodiquement. La période de simulation (vitesse) peut être modifiée à l'aide du curseur.

En cliquant sur Step, tu peux exécuter le mouvement pas à pas. Avec Reset, tu peux redémarrer la simulation.

 

 

EXAMPLES

 

 

Example1: Les poissons doivent nager d'un côté à l'autre.
 

La méthode act()est définie dans la classe Fish et doit donc posséder le paramètre self. Toutes les méthodes doivent être appelées avec self. Avec move(), , le poisson se déplace vers la cellule suivante à chaque période de simulation (200 millisecondes). Lorsque le poisson atteint le bord droit ou gauche de la fenêtre de jeu, il change sa direction de déplacement de 180°.

Le curseur de la barre de navigation permet de modifier la vitesse de déplacement.Si plusieurs objets de la classe Fish sont présents, ils se déplacent tous selon les instructions définies dans la méthode act().

 

Programme:

# Gg3.py
from gamegrid import *

# -------------- class Fish -----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if (self.getX()== 9) or (self.getX() == 0):
            self.turn(180)
 
# ----------------- main ---------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(1, 3))
wanda = Fish()
addActor(wanda, Location(6, 7))
show()
doRun()
► Copy to clipboard

Examplel 2: Le poisson doit nager d'un côté à l'autre et son image doit également être retournée de 180° lorsqu'il atteint le bord de la fenêtre de jeu.

Contrairement à l'exemple précédent, le poisson doit toujours nager vers l'avant. Pour cela, son sprite doit être inversé horizontalement lorsqu'il atteint le bord droit de la fenêtre. Au bord gauche, cette inversion doit être annulée.

La méthode setHorzMirror(True)permet d'inverser horizontalement l'image d'un sprite. Dans la cellule 9, l'image est inversée. Dans la cellule 0, l'inversion est annulée avec setHorzMirror(False).

 


Programme:

# Gg3a.py
from gamegrid import *

# --------------- class Fish ----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if self.getX()== 9: 
            self.turn(180)
            self.setHorzMirror(True)
        if self.getX()== 0:
            self.turn(180) 
            self.setHorzMirror(False)

# ------------------- main ---------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(1, 3))
show()
doRun()
► Copy to clipboard

Example 3: Le poisson doit parcourir toutes les cellules.

Le poisson démarre dans la cellule (0, 0). Lorsqu'il atteint la cellule dont la coordonnée x est égale à 9, il tourne de 90°. Comme la coordonnée x est toujours égale à 9 après le déplacement suivant, il doit tourner encore une fois. Au bord gauche, il doit chaque fois tourner de 270°

 

Programme:

# Gg3b.py
from gamegrid import *

# --------------- class Fish ----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if self.getX()== 9: 
            self.turn(90)
            self.setHorzMirror(True)
        if self.getX()== 0:
            self.turn(270) 
            self.setHorzMirror(False)

# ------------------- main ---------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(0, 0))
show()
doRun()
► Copy to clipboard

 

 

REMEMBER YOU...

 

Pour déplacer les Actors dans la fenêtre de jeu, tu utilises les méthodes suivantes

move() Déplace l'Actor vers la cellule voisine.
turn(180) Change la direction du déplacement de 180°.
getX() Renvoie la coordonnée x de la cellule actuelle.
setHorzMirror(True) Affiche l'image inversée horizontalement de l'Actor.
setHorzMirror(False) Affiche l'image originale du sprite.
isMoveValid() Renvoie True si l'Actor peut se déplacer vers la cellule suivante, c'est-à-dire s'il n'est pas au bord.

Pour que ces méthodes soient exécutées automatiquement, elles doivent être appelées dans la méthode act().

 

 

EXERCICES

 

1.

Dans une fenêtre de jeu, un Pacman est créé à la position (0, 0). Programme les déplacements suivants :
a) Pacman se déplace de cellule en cellule, de gauche à droite, puis de droite à gauche.  

b)

Pacman démarre dans la cellule (0, 0) et se déplace de cellule en cellule de manière à parcourir toute la grille de jeu.

 

 

 

c)

Pacman se déplace en suivant un carré. Lorsqu'il atteint un bord, il tourne de 90° et poursuit son déplacement. Pour vérifier si Pacman se trouve au bord de la grille, utilise la méthode isMoveValid(). Cette méthode renvoie True si l'Actor peut se déplacer vers la cellule suivante, c'est-à-dire s'il n'est pas au bord.

Si la condition if not self.isMoveValid() est remplie, Pacman se trouve au bord et doit tourner.

 
 

2.

Complète l'exercice 1b) de manière à ce que l'image du sprite Pacman soit inversée horizontalement à chaque fin de ligne.

3.

Complète l'exercice 1b) de manière à ce que Pacman retourne directement à la première cellule (0, 0) chaque fois qu'il atteint la dernière cellule (9, 9). Pour cela, utilise l'instruction :
self.setLocation(Location(0, 0))
 

ou les instructions :

self.setX(0)
self.setY(0)
Place l'Actor dans la cellule de coordonnée x égale à 0.
Place l'Actor dans la cellule de coordonnée y égale à 0.