comment utiliser le clavier pour contrôler les personnages d'un jeu.
Dans des fonctions appelées fonctions de rappel (callbacks), tu définis ce qui doit se passer lorsqu'une touche du clavier est enfoncée ou relâchée. Ces fonctions ne sont pas appelées directement par le programme, mais automatiquement par le système lorsqu'une touche est actionnée. Les fonctions de rappel sont enregistrées dans makeGameGrid() à l'aide des paramètres nommés keyPressed or keyReleased in. La méthode getKeyCode()permet de déterminer le code numérique de la touche enfoncée.
EXAMPLES
Example1: Contrôler Pacman avec les touches fléchées
Pacman peut être déplacé à l'aide des touches fléchées UP, DOWN, LEFT et RIGHT. Le but est d'avaler toutes les pilules le plus rapidement possible.
Tu peux reprendre les classes Pacman et Pill de l'exemple précédent.
La fonction de rappel keyCallback(e)définit ce qui doit se passer lorsqu'une touche fléchée est enfoncée. Cette fonction reçoit le paramètre e, qui permet de déterminer le code de la touche enfoncée à l'aide de getKeyCode(). Pour les touches fléchées, les codes numériques sont 37, 38, 39 et 40.
Selon la touche fléchée enfoncée, Pacman se déplace dans l'une des quatre cellules voisines. La direction peut être définie à l'aide de la méthode setDirection(). Avec setDirection(270), Pacman se déplace vers le nord.
Programme:
# Gg6.pyfrom gamegrid import *
# --------------------- class Pacman ---------------------classPacman(Actor):
def __init__(self):
Actor.__init__(self, True, "sprites/pacman.gif", 2);
def tryToEat(self):
self.show(0)
actor = getOneActorAt(self.getLocation(), Pill);
if (actor != None):
actor.hide()
self.show(1)
# --------------------- class Pill ---------------------classPill(Actor):
def __init__(self):
Actor.__init__(self, "sprites/pill_0.gif");
def keyCallback(e):
keyCode = e.getKeyCode()if keyCode == 37: # left
paki.setDirection(180)
elif keyCode == 38: # up
paki.setDirection(270)elif keyCode == 39: # right
paki.setDirection(0)
elif keyCode == 40: # down
paki.setDirection(90)
paki.move()
paki.tryToEat()
makeGameGrid(10, 10, 60, Color.red, False, keyPressed = keyCallback)
paki = Pacman()
addActor(paki, Location(0,0))
for i in range(10):
addActor(Pill(), getRandomEmptyLocation())
show()
doRun()
La fonction de rappel keyCallback(e) est appelée automatiquement par le système lorsqu'une touche du clavier est enfoncée. Elle est enregistrée dans makeGameGrid() à l'aide du paramètre keyPressed. La méthode getKeyCode()permet de déterminer le code de la touche enfoncée. Pour les touches fléchées, les codes numériques sont 37, 38, 39 et 40.
À FAIRE PAR TOI-MÊME
1.
Piloter un robot avec les touches fléchées
Crée une fenêtre de jeu comportant 20 cellules horizontales et 20 cellules verticales, chacune d'une taille de 25 pixels, sans lignes de grille, avec l'image de fond "sprites/bg2.gif". Comme l'image du parcours du robot possède un fond transparent, tu dois également définir la couleur de fond de la fenêtre de jeu en blanc avec setBgColor(Color.white). Pour le robot, utilise l'image "sprites/mbrobot.gif".
L'Actor Robot, représenté par le sprite mbrobot.gif, doit être contrôlé à l'aide des touches fléchées pour avancer, reculer, tourner à gauche et tourner à droite afin de parcourir le circuit.
Pour que le sprite s'oriente toujours dans la direction du déplacement, tu dois placer True avant le nom du sprite lors de la création de l'Actor : Actor.__init__(self, True, "sprites/mbrobot.gif").
2.
Contrôler un poisson avec les touches fléchées
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. Place 20 algues à des positions choisies au hasard dans la fenêtre de jeu. Le poisson est contrôlé à l'aide des touches fléchées LEFT, RIGHT, UP et DOWN, jusqu'à ce qu'il ait mangé toutes les algues.