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.
Görev
KolayOyununuzu şu özelliklere sahip olacak şekilde tamamlayın:
- Kendi kendine hareket eden bir şey.
- Ekranda puan veya zamanlayıcı gibi metinler.
- 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()
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