Menu
CoddyTech

Kazan ya da Kaybet

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

Bir oyun sona erer. Burada can sayısı 0'a ulaştığında kaybedersin, puan 10'a ulaştığında kazanırsın. Bunlardan hiçbiri gerçekleşmediği sürece oyun devam eder.

Oyun sona erdiğinde durmaları için hareket eden her şeyi tek bir koşulun altına yerleştir:

if lives > 0 and score < 10:
    # tuşlar, sepet, blok, yakalamalar ve kaçırmalar

Çizim bu if koşulunun dışında kalır: ekran hâlâ son kareyi, üstünde de sonucu gösterir.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)), metin görselinin ortası (240, 160) noktasına yerleştirilmiş Rect'idir. Bir Rect'e blit işlemi, sol üst köşesini kullanır; bu nedenle metin ortalanır.

challenge icon

Görev

Orta

Oyunu kazanarak veya kaybederek bitir.

  1. Hareket eden her şeyi (tuşları, sepeti, bloğu, yakalamaları ve ıskalamaları) if lives > 0 and score < 10: koşulunun altına girintile.
  2. Puanı ve canları gösterdikten sonra, lives == 0 olduğunda Game over mesajını veya score == 10 olduğunda You win! mesajını (240, 160) konumunda ortalanmış olarak göster.

“Oyna” düğmesine bas ve üç bloğu ıskala: Game over görünür ve oyun durur. Ardından “Kontrol et” düğmesine bas.

Kendin dene

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

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_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
        lives -= 1
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    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