Menu
CoddyTech

Pukul Pemukul

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

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

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

Tetapkan arahnya alih-alih 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 jumlah frame bola bersentuhan dengan pemukul.

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 Buat Game dengan Pygame

Latihan sendiri: Playground Pygame