Menu
CoddyTech

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 = -vx

ball.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.

challenge icon

Görev

Kolay

Topun 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