Menu
CoddyTech

동굴 만들기

Coddy Pygame 여정의 게임 월드 섹션에 포함된 레슨. 35개 중 28번째.

Moss Caves는 네가 직접 만드는 플랫폼 게임이야. 이끼 낀 동굴을 달리고, 동전을 모으고, 가시와 구덩이를 뛰어넘고, 슬라임을 밟고, 열쇠를 찾아 문을 열고, 깃발에 도달해. 각 단계에서는 이 섹션에서 만든 것을 바탕으로 한 부분씩 추가해.

전체 레벨은 시작 파일에 있는 맵이며, 너비는 64칸이야. #는 지면, P는 시작 지점이고, 다른 글자는 네가 추가할 요소야. C는 동전, ^는 가시, E는 슬라임, K는 열쇠, D는 문, F는 깃발이야. 어떤 단계에서 글자를 읽기 전까지 해당 타일은 비어 있어.

먼저 지면을 만들어. 맵을 한 번 순회하면서 충돌 판정용 Rect를 walls에 채우고, 그리기용 (image, Rect) 쌍을 tiles에 채워. Tiles 장에서처럼 solid()를 사용해 풀, 흙 또는 가장자리 타일을 선택해:

rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
    # 이전과 같이 solid()로 image를 선택한다
    walls.append(rect)
    tiles.append((image, rect))
elif char == "P":
    start = rect.midbottom

플레이어는 P 타일의 아래쪽 중앙인 start에 서 있어.

challenge icon

챌린지

중급
  1. 게임 루프 전에 walls와 tiles를 만들고, 맵을 순회하세요. 각 #에 대해 Edge Tiles에서처럼 solid()를 사용해 dirt_img, grass_left_img, grass_right_img 또는 grass_img를 선택한 다음, Rect를 walls에 추가하고 쌍을 tiles에 추가하세요.
  2. P의 경우 start를 타일의 midbottom으로 설정하세요.
  3. player = player_img.get_rect(midbottom=start)를 만드세요.
  4. 게임 루프에서 배경을 그린 다음, 모든 타일을 해당 Rect 위치에 블릿하고 그다음 플레이어를 블릿하세요.

직접 해보기

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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

게임 월드의 모든 레슨

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