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.
Görev
Orta- Hareket eden her şeyi (tuşları, sepeti, bloğu, yakalamaları ve kaçırmaları)
if lives > 0 and score < 10:altında girintileyin. - Puanı ve canları çizdikten sonra,
lives == 0olduğundaGame overyazısını veyascore == 10olduğundaYou 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
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı Doldur2Şekiller ve Renkler
Daireler, Çizgiler, ÇokgenlerKonturlar ve KöşelerŞekillerden Oluşan Bir SahneDeğişen Renkler5Blokları Yakala
SepetDüşen Bir BlokKendi başına pratik yap: Pygame playground