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.

Program 5.1 Collisions
 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.

Program 5.2 Pourchasseur d’extraterrestres
 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.

Program 5.3 Collectionner les augmentations de puissance
 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

Program 5.4 Sons et animation lorsqu’il y a collision
 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.

Program 5.5 Capter les boutons de la souris
 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

Program 5.6 Capter les mouvements 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.