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 = 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 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).
Défi
Moyen- Avant la boucle, définissez
waiting = False. - Placez le déplacement de la balle, ses rebonds et le comptage des points sous
if not waiting:, et définissezwaiting = Trueaprès chaque point. - Un événement KEYDOWN pour
pygame.K_SPACEdéfinitwaiting = False. - Pendant l’attente, affichez
Press Space to servecentré 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