Menu
CoddyTech

Servis

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

Bir noktadan sonra top, bir oyuncu hazır olana kadar ortada beklemelidir. Bekleyip beklemediğini bir bayrak belirtir:

waiting = False

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
    # Raketler her zaman hareket eder
    if not waiting:
        # Top hareket eder, seker ve sayı kazandırır; sayı alındığında waiting = True olur

Raketler if bloğunun dışında kalır; böylece top beklerken oyuncular hazır olabilir. Boşluk tuşu, her basışta bir kez gerçekleşen bir eylemdir; bu nedenle bir KEYDOWN olayından gelir.

Top beklerken, alta yakın bir yerde, (300, 360) konumunda ortalanmış şekilde Press Space to serve metnini gösterin.

challenge icon

Görev

Orta

Her sayıdan sonra servis atılmasını bekle.

  1. Döngüden önce waiting = False ayarla.
  2. Topun hareketini, sekmelerini ve sayı kazanmayı if not waiting: koşulunun altına al ve her sayıdan sonra waiting = True ayarla.
  3. pygame.K_SPACE için bir KEYDOWN olayı waiting = False ayarlar. Beklerken Press Space to serve mesajını (300, 360) konumunda ortalanmış şekilde göster.

“Oyna” düğmesine bas ve topu kaçır: Boşluk tuşuna basılana kadar top ortada bekler. 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

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)
    if ball.left > 600:
        left_score += 1
        ball.center = (300, 200)
        vx = -vx
    if ball.right < 0:
        right_score += 1
        ball.center = (300, 200)
        vx = -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)
    score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
    screen.blit(score, score.get_rect(center=(300, 30)))
    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