Servis
Pelajaran 35 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Setelah satu poin, bola harus menunggu di tengah sampai pemain siap. Sebuah penanda 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
# Raket selalu bergerak
if not waiting:
# Bola bergerak, memantul, dan mencetak skor; satu poin mengatur waiting = TrueDayung tetap berada di luar if, sehingga pemain bisa bersiap saat bola menunggu. Tombol Spasi hanya memicu aksi sekali setiap kali ditekan, jadi aksinya berasal dari peristiwa KEYDOWN.
Saat bola menunggu, tampilkan Press Space to serve di dekat bagian bawah, tepat di tengah pada (300, 360).
Tantangan
Sedang- Sebelum perulangan, tetapkan
waiting = False. - Letakkan pergerakan bola, pantulan, dan perolehan skor di bawah
if not waiting:, lalu tetapkanwaiting = Truesetelah setiap poin. - Event KEYDOWN untuk
pygame.K_SPACEmenetapkanwaiting = False. - Saat menunggu, tampilkan
Press Space to servedi 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()
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