Menu
CoddyTech

Soluklaşma ve Küçülme

Coddy'nin Pygame Journey'sinin Ses ve Oyun Hissi bölümünün bir parçası. Ders 10 / 23.

Sönene kadar aynı kalan bir kıvılcım, söndürülmüş bir nokta gibi görünür. Gerçek kıvılcımlar soğur: sönerken küçülür ve renk değiştirir. Bunun için gereken sayı zaten sende var: parçacığın life değeri. Çizerken boyutu ve rengi bu değerden hesapla.

Yarıçap doğrudan yaşam süresine bağlı olabilir:

radius = p["life"] // 10 + 1

Kalan 40 kare için yarıçap 5 olur; 9 veya daha az kare kaldığında ise 1 olur. + 1, yarıçapı 1 veya daha fazla tutar: yarıçapı 0 olan bir daire çizilmez ve kıvılcım erken söner.

Renk için sıcaktan soğuğa doğru birkaç adımdan seçim yap:

if p["life"] > 25:
    color = (255, 220, 80)
elif p["life"] > 10:
    color = (255, 140, 40)
else:
    color = (180, 50, 40)

Önce en büyük sayıyı kontrol et. Ters sırayla yazıldığında life > 10, 30 yaşam süresini de yakalar ve sarı dalı hiçbir zaman çalışamaz.

challenge icon

Görev

Orta

Boşluk tuşu, her biri 40 kare yaşayan 8 kıvılcımdan oluşan bir halka oluşturur. Uçarken renklerinin giderek soğumasını sağla:

  1. Her kıvılcımı life // 10 + 1 yarıçapıyla çiz.
  2. Ömrü 25'in üzerindeyken sarı (255, 220, 80), 10'un üzerindeyken turuncu (255, 140, 40), daha sonra koyu kırmızı (180, 50, 40) renkte çiz.

Kendin dene

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ring of Sparks")
clock = pygame.time.Clock()

DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            for vx, vy in DIRECTIONS:
                particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})

    for p in particles:
        p["x"] += p["vx"]
        p["y"] += p["vy"]
        p["life"] -= 1

    screen.fill((20, 20, 36))
    for p in particles:
        if p["life"] > 0:
            pygame.draw.circle(screen, (255, 220, 80), (p["x"], p["y"]), 4)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Ses ve Oyun Hissi bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground