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.
Görev
OrtaNight Sky'ı tamamla:
- Yalnızca
len(stars) < 20iken tıklamayla bir yıldız ekle. len(stars) == 20olduğunda, (320, 240) noktasında ortalanmış şekildeThe 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