Menu
CoddyTech

Servis

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

Bir sayıdan sonra top, oyunculardan biri 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ı olduğunda waiting = True olur

Rakaların if bloğunun dışında kalması, top beklerken oyuncuların hazır olabilmesini sağlar. Boşluk tuşuna basma eylemi her basışta bir kez gerçekleşir, bu yüzden bir KEYDOWN olayından gelir.

Top beklerken, altta Press Space to serve mesajını (300, 360) konumunda ortalanmış şekilde göster.

challenge icon

Görev

Orta
  1. Döngüden önce waiting = False olarak ayarla.
  2. Topun hareketini, sekmelerini ve skor alınmasını if not waiting: bloğuna al ve her sayıdan sonra waiting = True olarak ayarla.
  3. pygame.K_SPACE için bir KEYDOWN olayı, waiting = False olarak ayarlar.
  4. Beklerken Press Space to serve metnini (300, 360) konumunda ortalanmış olarak göster.

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

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

Kendi başına pratik yap: Pygame playground