Engagement
Leçon 35 sur 41 du cours Créer 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 = TrueLes 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).
Défi
MoyenAttends la remise en jeu après chaque point.
- Avant la boucle, définis
waiting = False. - Place le déplacement de la balle, les rebonds et le comptage des points sous
if not waiting:, et définiswaiting = Trueaprès chaque point. - Un événement KEYDOWN sur
pygame.K_SPACEdéfinitwaiting = False. Pendant l’attente, affichePress Space to servecentré en(300, 360).
Appuie sur « Jouer » et rate la balle : elle attend au milieu jusqu’à ce que tu appuies sur Espace. Puis clique sur « Vérifier ».
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 Créer des jeux avec Pygame
Entraînez-vous par vous-même : Playground Pygame