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.
Görev
OrtaOyunu kazanarak veya kaybederek bitir.
- Hareket eden her şeyi (tuşları, sepeti, bloğu, yakalamaları ve ıskalamaları)
if lives > 0 and score < 10:koşulunun altına girintile. - Puanı ve canları gösterdikten sonra,
lives == 0olduğundaGame overmesajını veyascore == 10olduğundaYou 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
2Olaylar ve Çarpışmalar
SepetDüşen Bir BlokKendi başına pratik yap: Pygame playground