Menu
CoddyTech

성채의 첫 번째 방

Coddy Pygame 여정의 프로젝트 섹션에 포함된 레슨. 31개 중 21번째.

다음 게임은 Rune Keep입니다. 위에서 내려다본 모습의 기사가 세 개의 방으로 된 성채에 갇혀 있습니다. 각 방에는 열쇠와 잠긴 문, 몬스터가 있습니다. 열쇠를 찾고, 문을 열고, 다음 방으로 가서 하트를 모두 가지고 탈출하세요.

방은 Moss Caves에서처럼 텍스트 맵입니다. 48픽셀 타일로 이루어진 14열 10행이며, 672 x 480 창을 채웁니다. #은 벽입니다. 나머지 문자는 다음 레슨에서 생명력을 얻습니다. P는 기사, K는 열쇠, D는 문, S는 슬라임, H는 물약입니다. 지금은 모두 바닥입니다.

Room 클래스는 맵에서 방에 포함된 모든 것을 만듭니다. 나중에 기사는 방에서 방으로 걸어가며, 새로운 방은 한 줄로 나타냅니다. 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))

벽을 그리려면 벽의 그림을 해당 Rect 위치에 블릿합니다. screen.blit(wall_img, wall)은 이미지를 Rect의 왼쪽 위에 놓습니다.

challenge icon

챌린지

쉬움

시작 코드는 창을 열고 바닥 타일로 덮으며, 요새에 필요한 글꼴과 모든 그림을 불러와 다음 수업을 준비합니다: knight_img, key_img, slime_img 등입니다.

  1. Room.__init__에서 lines를 순회하며, 각 #에 대해 (col * TILE, row * TILE) 위치에 48 x 48 크기의 Rect를 만들어 self.walls에 추가하세요. 시작 코드에는 이미 room = Room(MAP)이 있습니다.
  2. 바닥을 그린 후, room.walls의 모든 Rect 위치에 wall_img를 blit하세요.

직접 해보기

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 = []
        # 여기서 벽을 만듭니다


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()

프로젝트의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드