Menu
CoddyTech

Pause

Leçon 16 sur 40 du cours Créez des jeux avec Pygame de Coddy.

Il existe deux façons de lire le clavier. pygame.key.get_pressed() indique quelles touches sont maintenues enfoncées à l’instant présent, à chaque image : c’est la bonne méthode pour se déplacer. Un événement KEYDOWN survient une seule fois, à l’image où l’on appuie sur la touche : c’est la bonne méthode pour les actions qui se produisent une seule fois par pression.

Mettre le jeu en pause est une action qui ne doit se produire qu’une seule fois par pression. Avec get_pressed, maintenir P enfoncée un instant activerait et désactiverait la pause à chaque image. Avec l’événement, elle bascule une seule fois :

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_p:
            paused = not paused

not paused transforme True en False, et inversement. Ajoute la pause à la condition qui lance le jeu, et affiche Paused lorsqu’elle est active.

challenge icon

Défi

Moyen
  1. Avant la boucle, définis paused = False.
  2. Dans la boucle d’événements, inverse la valeur de paused lorsque la touche d’un événement KEYDOWN est pygame.K_p.
  3. Exécute le jeu uniquement lorsqu’il n’est pas en pause : if lives > 0 and score < 10 and not paused:.
  4. Lorsque paused est vrai, affiche Paused au centre de (240, 160).

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

    if lives > 0 and score < 10:
        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))
    if lives == 0:
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    elif score == 10:
        message = font.render("You win!", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

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

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