Menu
CoddyTech

Mengenai Pemukul

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

Saat bola menyentuh pemukul, bola harus bergerak kembali ke arah sebaliknya. ball.colliderect(right) memberi tahu kamu bahwa keduanya bersentuhan.

Membalik tanda dengan vx = -vx memiliki jebakan. Jika bola masih berada di dalam pemukul pada frame berikutnya (bola mengenai ujung pemukul, atau pemukul bergerak hingga menindihnya), tandanya akan dibalik lagi dan lagi: bola bergetar di dalam pemukul.

Tetapkan arahnya, bukan membalik tandanya. abs(vx) adalah vx tanpa tandanya, jadi nilainya selalu positif:

if ball.colliderect(left):
    vx = abs(vx)
if ball.colliderect(right):
    vx = -abs(vx)

Setelah mengenai pemukul kiri, bola selalu bergerak ke kanan, dan setelah mengenai pemukul kanan, bola selalu bergerak ke kiri, berapa pun lama keduanya bersentuhan.

challenge icon

Tantangan

Sedang

Setelah bola memantul dari dinding, saat bola bertabrakan dengan left, tetapkan vx = abs(vx); saat bola bertabrakan dengan right, tetapkan vx = -abs(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

    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()
quiz iconUji dirimu

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

Semua pelajaran di Proyek

Latihan sendiri: Playground Pygame