Menu
CoddyTech

Servis

Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 17 dari 31.

Setelah suatu poin, bola harus menunggu di tengah sampai pemain siap. Sebuah flag 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
    # Bet selalu bergerak
    if not waiting:
        # Bola bergerak, memantul, dan mencetak skor; satu poin mengatur waiting = True

Paddle tetap berada di luar if, sehingga pemain bisa bersiap saat bola menunggu. Space adalah aksi sekali tekan, jadi aksi ini berasal dari event 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, atur waiting = False.
  2. Letakkan pergerakan bola, pantulan, dan penambahan skor di dalam if not waiting:, lalu atur waiting = True setelah setiap poin.
  3. Event KEYDOWN untuk pygame.K_SPACE mengatur 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()

Semua pelajaran di Proyek

Latihan sendiri: Playground Pygame