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 pausednot paused transforme True en False, et inversement. Ajoute la pause à la condition qui lance le jeu, et affiche Paused lorsqu’elle est active.
Défi
Moyen- Avant la boucle, définis
paused = False. - Dans la boucle d’événements, inverse la valeur de
pausedlorsque la touche d’un événement KEYDOWN estpygame.K_p. - Exécute le jeu uniquement lorsqu’il n’est pas en pause :
if lives > 0 and score < 10 and not paused:. - Lorsque
pausedest vrai, affichePausedau 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()
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