Menu
CoddyTech

Beş Sayıya İlk Ulaşan

Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 19 / 31.

5 puana ilk ulaşan oyuncu kazanır. Kazananın adını, başlangıçta None olan bir değişkende tut; None, Python'da “henüz bir şey yok” anlamına gelen değerdir:

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: Space tuşu yalnızca winner is None iken servis atar.

Servis mesajının yerine kazananı (300, 120) konumunda ortalanmış şekilde göster.

challenge icon

Görev

Orta
  1. Döngüden önce winner = None ayarlayın.
  2. Puanlamadan sonra, left_score == 5 olduğunda winner değerini "Left player wins!" olarak, right_score == 5 olduğunda ise "Right player wins!" olarak ayarlayın.
  3. Boşluk tuşu yalnızca winner is None iken servis atar.
  4. Kazanan olduğunda, Press Space to serve yerine kazananı (300, 120) konumunda ortalanmış şekilde gösterin.

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

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground