Menu
CoddyTech

Beş Sayıya İlk Ulaşan

Coddy'nin Pygame ile Oyun Yap kursunda ders 37 / 41.

5 puana ulaşan ilk oyuncu kazanır. Kazananın adını, Python'da henüz hiçbir şey olmadığını belirten None ile başlayan bir değişkende tut:

winner = None

if left_score == 5:
    winner = "Left player wins!"
elif right_score == 5:
    winner = "Right player wins!"

winner is None veya winner is not None ile test et. Biri kazandıktan sonra top beklemeye devam eder: Boşluk tuşu yalnızca winner is None iken servis atar.

Kazananı, servis mesajının yerine (300, 120) konumunda ortalanmış olarak göster.

challenge icon

Görev

Orta

Maçı beş puanda bitir.

  1. Döngüden önce winner = None ayarla. Puanlama işleminden sonra, left_score == 5 olduğunda "Left player wins!", right_score == 5 olduğunda ise "Right player wins!" olarak ayarla.
  2. Boşluk tuşu yalnızca winner is None iken servis atar.
  3. Kazananı, Press Space to serve yerine (300, 120) konumunda ortalanmış olarak göster.

“Oyna” düğmesine bas: beş puana ulaşılınca kazanan gösterilir. Ardından “Kontrol et” düğmesine bas.

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
waiting = False

running = True
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

    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())

    if not waiting:
        ball.x += vx
        ball.y += vy
        if ball.top <= 0 or ball.bottom >= 400:
            vy = -vy
        if ball.colliderect(left):
            vx = abs(vx)
            vy = (ball.centery - left.centery) // 6
        if ball.colliderect(right):
            vx = -abs(vx)
            vy = (ball.centery - right.centery) // 6
        if ball.left > 600:
            left_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True
        if ball.right < 0:
            right_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True

    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)))
    if waiting:
        message = font.render("Press Space to serve", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(300, 360)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Pygame ile Oyun Yap bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground