Menu
CoddyTech

Mise en jeu

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

Après un point, la balle doit attendre au milieu jusqu’à ce qu’un joueur soit prêt. Un indicateur précise si elle attend :

waiting = False

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            waiting = False
    # les raquettes bougent toujours
    if not waiting:
        # la balle se déplace, rebondit et marque ; un point définit waiting = True

Les raquettes restent en dehors du if, afin que les joueurs puissent se préparer pendant que la balle attend. La barre d’espace déclenche une action à chaque pression ; l’événement provient donc d’un événement KEYDOWN.

Pendant que la balle attend, affichez Press Space to serve près du bas, centré en (300, 360).

challenge icon

Défi

Moyen
  1. Avant la boucle, définis waiting = False.
  2. Place le déplacement de la balle, ses rebonds et le comptage des points sous if not waiting:, et définis waiting = True après chaque point.
  3. Un événement KEYDOWN pour pygame.K_SPACE définit waiting = False.
  4. Pendant l’attente, affiche Press Space to serve au centre de (300, 360).

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)

ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0

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_w]:
        left.y -= 6
    if keys[pygame.K_s]:
        left.y += 6
    if keys[pygame.K_UP]:
        right.y -= 6
    if keys[pygame.K_DOWN]:
        right.y += 6
    left.clamp_ip(screen.get_rect())
    right.clamp_ip(screen.get_rect())

    ball.x += vx
    ball.y += vy
    if ball.top <= 0 or ball.bottom >= 400:
        vy = -vy
    if ball.colliderect(left):
        vx = abs(vx)
    if ball.colliderect(right):
        vx = -abs(vx)
    if ball.left > 600:
        left_score += 1
        ball.center = (300, 200)
        vx = -vx
    if ball.right < 0:
        right_score += 1
        ball.center = (300, 200)
        vx = -vx

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), left)
    pygame.draw.rect(screen, (235, 80, 80), right)
    pygame.draw.rect(screen, (255, 196, 0), ball)
    score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
    screen.blit(score, score.get_rect(center=(300, 30)))
    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