Menu
CoddyTech

Service

Fait partie de la section Projets du Journey Pygame de Coddy. Leçon 17 sur 31.

Après un certain temps, 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 des points ; 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 une seule fois par pression ; elle provient donc d’un événement KEYDOWN.

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

challenge icon

Défi

Moyen
  1. Avant la boucle, définissez waiting = False.
  2. Placez le déplacement de la balle, ses rebonds et le comptage des points sous if not waiting:, et définissez waiting = True après chaque point.
  3. Un événement KEYDOWN pour pygame.K_SPACE définit waiting = False.
  4. Pendant l’attente, affichez Press Space to serve centré en (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()

Toutes les leçons de Projets

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