Servis
Coddy'nin Pygame ile Oyun Yap kursunda ders 35 / 40.
Bir noktadan sonra top, bir oyuncu hazır olana kadar ortada beklemelidir. Bekleyip beklemediğini bir bayrak belirtir:
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
# Raketler her zaman hareket eder
if not waiting:
# Top hareket eder, seker ve sayı kazandırır; sayı alındığında waiting = True olurRaketler if bloğunun dışında kalır; böylece top beklerken oyuncular hazır olabilir. Boşluk tuşu, her basışta bir kez gerçekleşen bir eylemdir; bu nedenle bir KEYDOWN olayından gelir.
Top beklerken, alta yakın bir yerde, (300, 360) konumunda ortalanmış şekilde Press Space to serve metnini gösterin.
Görev
Orta- Döngüden önce
waiting = Falseolarak ayarla. - Topun hareketini, sekmelerini ve skor işlemlerini
if not waiting:koşulunun altına al ve her sayıdan sonrawaiting = Trueolarak ayarla. pygame.K_SPACEiçin bir KEYDOWN olayı,waiting = Falseolarak ayarlar.- Beklerken,
Press Space to servemetnini(300, 360)konumunda ortalanmış olarak göster.
Kendin dene
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Pygame ile Oyun Yap bölümündeki tüm dersler
1Oyun Döngüsü
Bir Pencere AçArka Planı Doldur4İki Oyuncu ve Bir Top
TopSekmeKendi başına pratik yap: Pygame playground