Menu
CoddyTech

Ruang Pertama Menara

Termasuk bagian Proyek dalam perjalanan Pygame di Coddy. Pelajaran 21 dari 31.

Game berikutnya adalah Rune Keep: seorang ksatria yang terlihat dari atas, terjebak di sebuah benteng dengan tiga ruangan. Setiap ruangan memiliki kunci, pintu terkunci, dan monster. Temukan kuncinya, buka pintunya, capai ruangan berikutnya, dan keluar dengan hati yang masih tersisa.

Ruangan adalah peta teks, seperti di Moss Caves: 14 kolom kali 10 baris ubin berukuran 48 piksel, yang memenuhi jendela berukuran 672 kali 480. # adalah dinding. Huruf lainnya akan hidup di pelajaran berikutnya: P adalah ksatria, K adalah kunci, D adalah pintu, S adalah slime, H adalah ramuan. Untuk saat ini, semuanya adalah lantai.

class Room membangun semua yang ada di dalam ruangan dari petanya. Nantinya ksatria berjalan dari satu ruangan ke ruangan lain, dan setiap ruangan baru cukup dibuat dengan satu baris: Room(MAP2).

class Room:
    def __init__(self, lines):
        self.walls = []
        for row, line in enumerate(lines):
            for col, char in enumerate(line):
                if char == "#":
                    self.walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))

Untuk menggambar dinding, blit gambarnya pada Rect-nya: screen.blit(wall_img, wall) menempatkan gambar di sudut kiri atas Rect.

challenge icon

Tantangan

Mudah

Kode awal membuka jendela, menutupinya dengan ubin lantai, lalu memuat font dan semua gambar yang dibutuhkan keep, siap digunakan di pelajaran berikutnya: knight_img, key_img, slime_img, dan seterusnya.

  1. Di Room.__init__, telusuri lines dan tambahkan Rect berukuran 48 kali 48 pada posisi (col * TILE, row * TILE) ke self.walls untuk setiap #. Kode awal sudah membuat room = Room(MAP).
  2. Setelah menggambar lantai, gambar wall_img pada setiap Rect di room.walls.

Coba sendiri

import pygame

TILE = 48
MAP = [
    "##############",
    "#............#",
    "#.P......K...#",
    "#............#",
    "#....##......D",
    "#....##......#",
    "##.#######.###",
    "#............#",
    "#...S....H...#",
    "##############",
]

pygame.init()
screen = pygame.display.set_mode((672, 480))
pygame.display.set_caption("Rune Keep")
clock = pygame.time.Clock()
font = pygame.font.Font("assets/fonts/pixel.ttf", 32)


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


floor_img = load("floor.png")
wall_img = load("wall.png")
knight_img = load("knight.png")
door_img = load("dungeon_door.png")
key_img = load("key.png")
slime_img = load("slime.png")
spider_img = load("spider.png")
heart_img = load("heart.png")
empty_img = load("heart_empty.png")
sword_img = load("sword.png")
potion_img = load("potion_red.png")


class Room:
    def __init__(self, lines):
        self.walls = []
        # buat dindingnya di sini


room = Room(MAP)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for row in range(10):
        for col in range(14):
            screen.blit(floor_img, (col * TILE, row * TILE))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Semua pelajaran di Proyek

Latihan sendiri: Playground Pygame