Menu
CoddyTech

Gagner ou perdre

Leçon 15 sur 41 du cours Créer des jeux avec Pygame de Coddy.

Une partie se termine. Ici, tu perds quand le nombre de vies atteint 0 et tu gagnes quand le score atteint 10. Tant qu’aucun de ces événements ne s’est produit, la partie continue.

Place tout ce qui bouge sous une seule condition, afin que tout s’arrête à la fin de la partie :

if lives > 0 and score < 10:
    # les touches, le panier, le bloc, les prises et les ratés

Le dessin reste en dehors de ce if : l’écran affiche toujours la dernière image, avec le résultat par-dessus.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)) est le Rect de l’image du texte, positionné de sorte que son centre se trouve en (240, 160). L’affichage avec un Rect utilise son coin supérieur gauche, donc le texte est centré.

challenge icon

Défi

Moyen

Termine le jeu par une victoire ou une défaite.

  1. Indente tout ce qui bouge (les touches, le panier, le bloc, les attrapés et les ratés) sous if lives > 0 and score < 10:.
  2. Après le score et les vies, affiche Game over lorsque lives == 0, ou You win! lorsque score == 10, au centre de (240, 160).

Appuie sur « Jouer » et laisse tomber trois blocs : Game over s’affiche et le jeu s’arrête. Puis appuie sur « Vérifier ».

Essayez vous-même

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
        lives -= 1
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Toutes les leçons de Créer des jeux avec Pygame

Entraînez-vous par vous-même : Playground Pygame