Menu
CoddyTech

Oyununuzu Tamamlayın

Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 31 / 31.

Şimdi 3. adımdan 5. adıma geçelim: bir meydan okuma, bir bitiş ve metin. Rock Dodge, kayalarını bir Rect listesinde tutar: her 400 ms'de yeni bir kaya, ekranda aynı anda birçok kaya.

rocks = []

# NEW_ROCK zamanlayıcı olayı gerçekleştiğinde:
rocks.append(pygame.Rect(random.randint(0, 450), -30, 30, 30))

# her karede:
for rock in rocks:
    rock.y += 5
    if rock.colliderect(player):
        state = "lost"
rocks = [rock for rock in rocks if rock.top < 360]

Son satır bir liste kavramadır: yalnızca hâlâ ekranda olan kayaları içeren yeni bir liste oluşturur; böylece liste sonsuza kadar büyümez.

state dizesinin "playing", "lost" veya "won" olması, Sky Runner'da olduğu gibi her karenin ne yapacağını belirler. pygame.time.get_ticks() ise oyun başladığından beri geçen milisaniyeleri verir; bu da bir zamanlayıcı sağlar: kazanmak için 20 saniye hayatta kal.

Oyunun yolculuk boyunca öğrendiğin her şeyi kullanabilir: liste yerine bir sprite Group, resimler, çarpışma anında bir ses, müzik, oyundan önce bir menü, en yüksek skor, metin haritalarından oluşturulmuş odalar.

Oyunun sana özgü olsun: renkleri, hızları ve kuralları değiştir. Sonra oyna. Kazanmak çok zorsa ya da kaybetmek çok kolaysa, eğlenceli olana kadar sayıları değiştir.

challenge icon

Görev

Kolay

Oyununuzu şu özelliklere sahip olacak şekilde tamamlayın:

  1. Kendi kendine hareket eden bir şey.
  2. Ekranda puan veya zamanlayıcı gibi metinler.
  3. Bir bitiş: kazanma yolu, kaybetme yolu veya ikisi birden.

Kontroller; metin olup olmadığını, hiçbir tuşa basılmıyorken hareket eden bir şey bulunup bulunmadığını, oyunun hata vermeden 30 saniye çalışıp çalışmadığını ve pencerenin kapanıp kapanmadığını inceler. Diğer her şey size kalmış: şekiller veya resimler, ses efektleri, müzik, durumlar ve haritaların hepsi uygundur.

Kendin dene

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Rock Dodge")
clock = pygame.time.Clock()

player = pygame.Rect(220, 320, 40, 20)

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]:
        player.x -= 7
    if keys[pygame.K_RIGHT]:
        player.x += 7
    player.clamp_ip(screen.get_rect())

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground