Menu
CoddyTech

Dolup Taşan Gökyüzü

Coddy'nin Pygame Journey'sinin Oyun Penceresinde Python bölümünün bir parçası. Ders 32 / 32.

Gökyüzünde yirmi yıldız olduğunda oyun sona erer. İki şey değişir: tıklamalar artık yıldız eklemez ve bunu belirten bir mesaj gösterilir. Her ikisi de aynı listeyi okur:

if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 20:
    stars.append(event.pos)
if len(stars) == 20:
    message = font.render("The sky is full!", True, (230, 230, 240))
    screen.blit(message, message.get_rect(center=(320, 240)))

message.get_rect(center=(320, 240)), ortası (320, 240) konumuna yerleştirilmiş metin görselinin dikdörtgenidir. Görseli bu konumda eklemek, uzunluğu ne olursa olsun metni pencerenin ortasına yerleştirir.

Burada > 20 yerine == 20 koşulunu test edin: sınır, listeyi 20 öğede durdurur; dolayısıyla listede hiçbir zaman daha fazlası bulunmaz.

Gökyüzü dolduğunda, ona bakmaktan başka yapacak bir şey kalmaz. 2. bölümde, bir tuşla oyunun nasıl yeniden başlatılacağı ve oyunun kazanma ya da kaybetme durumuyla nasıl bitirileceği gösteriliyor.

challenge icon

Görev

Orta

Night Sky'ı tamamla:

  1. Yalnızca len(stars) < 20 iken tıklamayla bir yıldız ekle.
  2. len(stars) == 20 olduğunda, (320, 240) noktasında ortalanmış şekilde The sky is full! ifadesini (230, 230, 240) renginde göster.

Kendin dene

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# Oyun döngüsünden önce gerekli ayarları burada yap.
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            stars.append(event.pos)

    # Her karede bir kez değişiklikleri burada yap.

    screen.fill((20, 24, 48))
    # Ekranı doldurduktan sonra çizimleri burada yap.
    pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
    pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
    for star in stars:
        colour = (255, 255, 255)
        if random.randint(1, 30) == 1:
            colour = (110, 120, 170)
        pygame.draw.circle(screen, colour, star, 3)
    text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Oyun Penceresinde Python bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground