Menu
CoddyTech

Servis

Pelajaran 35 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.

Setelah satu poin, bola harus menunggu di tengah sampai pemain siap. Sebuah penanda menunjukkan apakah bola sedang menunggu:

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
    # Raket selalu bergerak
    if not waiting:
        # Bola bergerak, memantul, dan mencetak skor; satu poin mengatur waiting = True

Dayung tetap berada di luar if, sehingga pemain bisa bersiap saat bola menunggu. Tombol Spasi hanya memicu aksi sekali setiap kali ditekan, jadi aksinya berasal dari peristiwa KEYDOWN.

Saat bola menunggu, tampilkan Press Space to serve di dekat bagian bawah, tepat di tengah pada (300, 360).

challenge icon

Tantangan

Sedang
  1. Sebelum perulangan, tetapkan waiting = False.
  2. Letakkan pergerakan bola, pantulan, dan perolehan skor di bawah if not waiting:, lalu tetapkan waiting = True setelah setiap poin.
  3. Event KEYDOWN untuk pygame.K_SPACE menetapkan waiting = False.
  4. Saat menunggu, tampilkan Press Space to serve di tengah pada (300, 360).

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Buat Game dengan Pygame

Latihan sendiri: Playground Pygame