Menu
CoddyTech

Mağaraları İnşa Et

Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 28 / 35.

Moss Caves, kendi platform oyunun: yosunlu bir mağarada koş, paraları topla, dikenlerin ve çukurların üzerinden atla, balçıkları ez, anahtarı bul, kapıyı aç ve bayrağa ulaş. Her adım, bu bölümde yaptıklarından oluşturulan bir parça ekler.

Tüm bölüm, başlangıç projesindeki 64 sütun genişliğindeki haritadır. # zemini, P başlangıç noktasını, diğer harfler ise ekleyeceklerini gösterir: C paraları, ^ dikenleri, E balçıkları, K anahtarı, D kapıyı, F bayrağı. Bir adım ilgili harfi okuyana kadar o karo boş kalır.

Önce zemini oluştur. Harita üzerinde yapılan tek bir geçiş, çarpışmalar için walls listesini Rect nesneleriyle, çizim içinse tiles listesini (image, Rect) çiftleriyle doldurur; Tiles bölümündeki gibi solid() ile çim, toprak veya kenar karosu seçer:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # önceki gibi, solid() ile görseli seç
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

Oyuncu, P karosunun alt orta noktası olan start üzerinde durur.

challenge icon

Görev

Orta
  1. Oyun döngüsünden önce walls ve tiles oluştur, ardından harita üzerinde döngü yap. Her # için Edge Tiles bölümündeki gibi solid() kullanarak dirt_img, grass_left_img, grass_right_img veya grass_img seç ve Rect'i walls listesine, ikiliyi de tiles listesine ekle.
  2. P için start değerini karonun midbottom değerine ayarla.
  3. player = player_img.get_rect(midbottom=start) oluştur.
  4. Oyun döngüsünde, arka planı çizdikten sonra her karoyu kendi Rect'ine, ardından oyuncuyu çiz.

Kendin dene

import pygame

TILE = 36
WIDTH, HEIGHT = 576, 360

LEVEL = [
    "................................................................",
    "................................................................",
    "................................................................",
    "................................................................",
    "#..............................................................#",
    "#....................C.........................#####...........#",
    "#......CC...C................CC.....CC.........#####.....CC....#",
    "#....................#.........................D...............#",
    "#.P.........#...E....#...^.......K......E......D.C....^......F.#",
    "#######..####################..##########################..#####",
]

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Moss Caves")
clock = pygame.time.Clock()


def load(name):
    return pygame.image.load("assets/images/" + name).convert_alpha()


background = pygame.image.load("assets/backgrounds/forest.png").convert_alpha()
grass_img = load("grass.png")
grass_left_img = load("grass_left.png")
grass_right_img = load("grass_right.png")
dirt_img = load("dirt.png")
player_img = load("player.png")


def solid(row, col):
    if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
        return False
    return LEVEL[row][col] == "#"


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    for y in range(0, HEIGHT, 72):
        for x in range(0, WIDTH, 72):
            screen.blit(background, (x, y))
    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.

Dünyalar bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground