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 = 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
Moyen- Avant la boucle, définis
waiting = False. - Place le déplacement de la balle, ses rebonds et le comptage des points sous
if not waiting:, et définiswaiting = Trueaprès chaque point. - Un événement KEYDOWN pour
pygame.K_SPACEdéfinitwaiting = False. - Pendant l’attente, affiche
Press Space to serveau 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()
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
1La boucle de jeu
Ouvrir une fenêtreRemplir l’arrière-plan4Deux joueurs et une balle
La balleRebondEntraînez-vous par vous-même : Playground Pygame