5. Jeux d’arcade simples
5.1. Les collisions
Dans les jeux d’arcade, il est important de savoir quand un acteur sprite est entré en collision avec un autre acteur sprite. La majorité de ce code est copié de Program 4.2 et de Program 4.5.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | WIDTH = 500
HEIGHT = 500
alien = Actor("alien")
alien.pos = (400, 50)
box = Rect((20, 20), (100, 100))
def draw():
screen.clear()
screen.draw.filled_rect(box, "red")
alien.draw()
def update():
if keyboard.right:
alien.x = alien.x + 2
elif keyboard.left:
alien.x = alien.x - 2
box.x = box.x + 2
if box.x > WIDTH:
box.x = 0
if alien.colliderect(box):
print("hit")
|
Exercice
Ajoutez du mouvement vertical (comme vous avez fait dans l’exercice Program 4.5).
Pour les plus avancés
Créez une boite qui pourchasse l’extraterrestre.
Pour les plus avancés
Affichez le nombre de fois que la boite entre en collision avec l’extraterrestre (par exemple le pointage).
5.2. Pourchasser
Au lieu de bouger constamment vers la droite, on peut rendre le mouvement conditionnel avec une déclaration if
. Ainsi, on peut faire en sorte que la boite pourchasse l’extraterrestre. La plupart du code a été copié de Program 5.1. Les lignes qui ont été nouvellement ajoutées sont surlignées. Nous avons aussi modifié ce qui arrive lorsque la boite entre en contact avec l’extraterrestre: le programme termine et vous devez le relancer pour jouer à nouveau. Ceci n’est peut-être pas ce que vous voulez dans votre jeu, mais nous allons pouvoir modifier le programme plus tard.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | WIDTH = 500
HEIGHT = 500
alien = Actor("alien")
alien.pos = (400, 50)
box = Rect((20, 20), (100, 100))
def draw():
screen.clear()
screen.draw.filled_rect(box, "red")
alien.draw()
def update():
if keyboard.right:
alien.x = alien.x + 2
elif keyboard.left:
alien.x = alien.x - 2
if box.x < alien.x:
box.x = box.x + 1
if box.x > alien.x:
box.x = box.x - 1
if alien.colliderect(box):
exit()
|
Exercice
Ajoutez du mouvement vertical (comme vous avez fait dans l’exercice précédent).
Pour les plus avancés
Créez un nouvel acteur sprite. Enregistrez son image avec le nom ennemi.png dans votre fichier code/images. Chargez l’image avec Actor(‘ennemi’) au lieu de Rect().
5.3. Augmentation de puissance
Au lieu d’être un ennemi, la boite ici est une augmentation de puissance. Lorsque le joueur entre en contact avec la boite, elle disparait et réapparait dans un nouvel emplacement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | WIDTH = 500
HEIGHT = 500
import random
alien = Actor("alien")
alien.pos = (400, 50)
box = Rect((20, 20), (100, 100))
score = 0
def draw():
screen.clear()
screen.draw.filled_rect(box, "green")
alien.draw()
def update():
global score
if keyboard.right:
alien.x = alien.x + 2
elif keyboard.left:
alien.x = alien.x - 2
if alien.colliderect(box):
box.x = random.randint(0, WIDTH)
box.y = random.randint(0, HEIGHT)
score = score + 1
print("Score:", score)
|
Exercice
Ajoutez du mouvement vertical (comme vous avez fait dans l’exercice ref{exercise:updown}).
Exercice
Affichez une image pour représenter votre nouvelle augmentation de puissance. Enregistrez-le sous le nom de powerup.png dans votre fichier code/images. Chargez l’image avec Actor(‘powerup’) au lieu de Rect().
Pour les plus avancés
Combinez ce programme avec l’ennemi du programme Program 5.2 et l’arrière-plan de Program 4.4. De plus, ajoutez n’importe quel autre élément qui vous intéresse afin de créer votre propre jeu.
5.4. Sons et animation
Pygame Zero est livré avec une autre image alien_hurt.png
et un son eep.wav
. Si vous voulez avoir plus de sons ou d’image, vous allez devoir les ajouter dans les fichiers sounds
pour vos sons et images
pour vos images.
La plupart de ce code a été copié de Program 5.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | WIDTH = 500
HEIGHT = 500
alien = Actor("alien")
alien.pos = (0, 50)
box = Rect((20, 20), (100, 100))
def draw():
screen.clear()
screen.draw.filled_rect(box, "red")
alien.draw()
def update():
if keyboard.right:
alien.x = alien.x + 2
elif keyboard.left:
alien.x = alien.x - 2
box.x = box.x + 2
if box.x > WIDTH:
box.x = 0
# PLAY SOUND AND SHOW IMAGE WHEN HIT
if alien.colliderect(box):
alien.image = 'alien_hurt'
sounds.eep.play()
else:
alien.image = 'alien'
|
Exercice
Enregistre ton propre effet sonore et ajoute-le au jeu.
Pour les plus avancés
Ajoutez plus de boites ou de sprites qui se déplacent dans différentes directions. Faites en sorte que le joueur doit éviter ces objets.
Pour les plus avancés
Ajoutez un second extraterrestre qui est contrôlé par des touches différentes ou par une manette afin de permettre à un autre joueur de jouer.
5.5. Les boutons de la souris
Ceci utilise une fonction call-back pour capter des évènements. C’est similaire à Program 5.4, mais:
La boite a été retirée.
Il y a une fonction
on_mouse_down()
qui est appelée automatiquement lorsque le joueur appuie sur le bouton de la souris.Le pointage est affiché.
Voir Program 2.17 pour plus d’informations sur les fonctions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | alien = Actor("alien")
alien.pos = (0, 50)
score = 0
def draw():
screen.clear()
alien.draw()
screen.draw.text("Score "+str(score), (0,0))
def update():
if keyboard.right:
alien.x = alien.x + 2
elif keyboard.left:
alien.x = alien.x - 2
alien.image = 'alien'
def on_mouse_down(pos, button):
global score
if button == mouse.LEFT and alien.collidepoint(pos):
alien.image = 'alien_hurt'
sounds.eep.play()
score = score + 1
|
5.6. Le déplacement de la souris
1 2 3 4 5 6 7 8 9 10 11 | # wiggle your mouse around the screen!
alien = Actor("alien")
def draw():
screen.clear()
alien.draw()
def on_mouse_move(pos):
alien.pos = pos
|
Exercice
Qu’est-ce qui arrive lorsqu’on remplace la ligne 8 par ceci:
animate(alien, pos=pos, duration=1, tween='bounce_end')
Exercice
Qu’est-ce qui arrive lorsqu’on change on_mouse_move avec on_mouse_down?
Pour les plus avancés
Créez un jeu avec un premier extraterrestre qui est contrôlé par la souris et second extratérestre qui est contrôlé par les touches du clavier.