Ortaya Geri Dönüş
Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 15 / 31.
Bir oyuncu topu kaçırdığında top, o oyuncunun tarafında pencereden çıkar. Topu ortaya geri getir ve diğer tarafa doğru gönder.
if ball.right < 0 or ball.left > 600:
ball.center = (300, 200)
vx = -vxball.right < 0, topun tamamının sol kenarı geçtiği, ball.left > 600 ise topun tamamının sağ kenarı geçtiği anlamına gelir. ball.center değerini ayarlamak, Rect'i ortası o noktada olacak şekilde hareket ettirir; boyutu aynı kalır.
Buradaki vx = -vx güvenlidir: top ortadadır ve her iki raketten de uzaktadır.
Görev
KolayTopun tamamı sol veya sağ kenarı geçtiğinde, center değerini (300, 200) olarak ayarla ve vx değerinin işaretini değiştir.
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
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(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)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Pygame playground