Menu
CoddyTech

Kembali ke Tengah

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

Saat pemain gagal memukul bola, bola keluar dari jendela di sisi mereka. Kembalikan bola ke tengah dan kirim ke arah sisi lainnya.

if ball.right < 0 or ball.left > 600:
    ball.center = (300, 200)
    vx = -vx

ball.right < 0 berarti seluruh bola sudah melewati tepi kiri, dan ball.left > 600 berarti seluruh bola sudah melewati tepi kanan. Mengatur ball.center memindahkan Rect sehingga bagian tengahnya berada di titik tersebut; ukurannya tetap sama.

vx = -vx di sini aman: bola berada di tengah, jauh dari paddle mana pun.

challenge icon

Tantangan

Mudah

Saat seluruh bola melewati tepi kiri atau kanan, atur center-nya ke (300, 200) dan balikkan vx.

Coba sendiri

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()

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)

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)

    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)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Semua pelajaran di Proyek

Latihan sendiri: Playground Pygame