Menu
CoddyTech

Kazan ya da Kaybet

Coddy'nin Pygame Journey'sinin Oyun Döngüsü bölümünün bir parçası. Ders 29 / 32.

Oyun sona erer. Can sayısı 0'a ulaştığında kaybedersin, skor 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 koy:

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

Çizim, bu if'in dışında kalır: ekranda son kare görünmeye devam eder ve sonucun üzerine çizilir.

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) konumunda olacak şekilde yerleştirilmiş Rect'idir. Bir Rect'e çizim yaparken sol üst köşesi kullanıldığından metin ortalanır.

challenge icon

Görev

Orta
  1. Hareket eden her şeyi (tuşları, sepeti, bloğu, yakalamaları ve kaçırmaları) if lives > 0 and score < 10: altında girintileyin.
  2. Puanı ve canları çizdikten sonra, lives == 0 olduğunda Game over yazısını veya score == 10 olduğunda You win! yazısını (240, 160) konumunda ortalanmış şekilde gösterin.

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

Oyun Döngüsü bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground