Servis
Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 17 dari 31.
Setelah suatu poin, bola harus menunggu di tengah sampai pemain siap. Sebuah flag 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
# Bet selalu bergerak
if not waiting:
# Bola bergerak, memantul, dan mencetak skor; satu poin mengatur waiting = TruePaddle tetap berada di luar if, sehingga pemain bisa bersiap saat bola menunggu. Space adalah aksi sekali tekan, jadi aksi ini berasal dari event KEYDOWN.
Saat bola menunggu, tampilkan Press Space to serve di dekat bagian bawah, tepat di tengah pada (300, 360).
Tantangan
Sedang- Sebelum perulangan, atur
waiting = False. - Letakkan pergerakan bola, pantulan, dan penambahan skor di dalam
if not waiting:, lalu aturwaiting = Truesetelah setiap poin. - Event KEYDOWN untuk
pygame.K_SPACEmengaturwaiting = 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()
Semua pelajaran di Proyek
Latihan sendiri: Playground Pygame