Rakete Vur
Coddy'nin Pygame ile Oyun Yap kursunda ders 32 / 40.
Top rakete değdiğinde diğer yöne gitmelidir. ball.colliderect(right) birbirlerine değdiklerini söyler.
İşareti tersine çevirmenin, vx = -vx, bir tuzağı vardır. Top sonraki karede hâlâ raketin içindeyse (raketin ucuna takılmışsa veya raket topun üzerine hareket etmişse), işareti tekrar tekrar tersine çevrilir: top raketin içinde titrer.
İşareti tersine çevirmek yerine yönü ayarla. abs(vx), işareti olmadan vx değeridir; bu yüzden her zaman pozitiftir:
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)Sol raketten seken top her zaman sağa, sağ raketten seken top ise her zaman sola gider; kaç kare boyunca temas ederlerse etsinler.
Görev
OrtaDuvar sekmesinden sonra, top left ile çarpıştığında vx = abs(vx) olarak ayarla; right ile çarpıştığında vx = -abs(vx) olarak ayarla.
Kendin dene
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()
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