Class Bola
Pelajaran 38 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Bola terdiri dari sebuah Rect dan dua angka, serta memiliki empat tugas: bergerak, mengenai paddle, mengatur ulang, dan menggambar. class menyatukan data dan fungsi yang menggunakannya:
class Ball:
def __init__(self):
self.rect = pygame.Rect(293, 193, 14, 14)
self.vx = 5
self.vy = 4
def move(self):
self.rect.x += self.vx
self.rect.y += self.vyball = Ball() membuat object bola dan menjalankan __init__. Di dalam class, self adalah object tersebut, jadi self.vx adalah vx milik bola ini. Fungsi dalam class disebut method: ball.move() memanggil salah satunya.
Perulangan utama kemudian terbaca seperti aturan permainan: ball.move(), ball.hit(left, 1), ball.hit(right, -1), ball.reset(), ball.draw(screen). Permainan berjalan sama seperti sebelumnya.
Tantangan
SulitTulis ulang bola sebagai class Ball di bagian atas file, dengan:
__init__:self.rect,self.vx = 5,self.vy = 4move(): menggerakkan bola dan memantulkannya dari sisi atas dan bawahhit(paddle, way): saat terjadi tabrakan,self.vx = way * abs(self.vx)dan sudut tembakannyareset(): kembali ke tengah,vxdibalikdraw(surface)
Buat ball = Ball() dan gunakan method-nya dalam perulangan. Ganti ball.left dengan ball.rect.left dan seterusnya. Game harus tetap dimainkan dengan cara yang sama.
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
waiting = False
winner = None
running = True
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:
if winner is None:
waiting = 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())
if not waiting:
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
if ball.colliderect(left):
vx = abs(vx)
vy = (ball.centery - left.centery) // 6
if ball.colliderect(right):
vx = -abs(vx)
vy = (ball.centery - right.centery) // 6
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
waiting = True
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -vx
waiting = True
if left_score == 5:
winner = "Left player wins!"
elif right_score == 5:
winner = "Right player wins!"
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)))
if winner is not None:
message = font.render(winner, True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(300, 120)))
elif waiting:
message = font.render("Press Space to serve", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(300, 360)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Buat Game dengan Pygame
1Perulangan Game
Buka JendelaIsi Latar4Dua Pemain dan Sebuah Bola
BolanyaMemantulLatihan sendiri: Playground Pygame