Menu
CoddyTech

Serwis

Lekcja 35 z 40 w kursie Twórz gry w Pygame w Coddy.

Po zdobyciu punktu piłka powinna czekać na środku, aż jeden z graczy będzie gotowy. Zmienna logiczna określa, czy piłka czeka:

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
    # Paletki poruszają się cały czas
    if not waiting:
        # Piłka porusza się, odbija i zdobywa punkty; zdobycie punktu ustawia waiting = True

Paletki znajdują się poza instrukcją if, więc gracze mogą przygotować się, gdy piłka czeka. Spacja to akcja wykonywana raz na naciśnięcie, dlatego wywołuje ją zdarzenie KEYDOWN.

Gdy piłka czeka, wyświetl u dołu, na środku, tekst Press Space to serve w punkcie (300, 360).

challenge icon

Wyzwanie

Średni
  1. Przed pętlą ustaw waiting = False.
  2. Umieść ruch piłki, odbicia i zdobywanie punktów w bloku if not waiting:, a po każdym punkcie ustaw waiting = True.
  3. Zdarzenie KEYDOWN dla pygame.K_SPACE ustawia waiting = False.
  4. Podczas oczekiwania wyświetl tekst Press Space to serve wyśrodkowany w pozycji (300, 360).

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Twórz gry w Pygame

Poćwicz samodzielnie: Edytor online Pygame