Menu
CoddyTech

텍스트로 레벨 만들기

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

숫자로 벽을 하나씩 그려 레벨을 만들면 작성하는 데 시간이 오래 걸리고 수정하기도 어렵습니다. 대신 레벨을 텍스트로 입력하세요. 문자열 목록을 만들고, 타일 한 줄마다 문자열 하나를 사용하며, 타일 하나마다 문자 하나를 사용합니다.

LEVEL = [
    "################",
    "#..............#",
    "#....####......#",
    "#..............#",
    "#.........##...#",
    "#..##.....##...#",
    "#..##..........#",
    "#.........###..#",
    "#..............#",
    "####..####..####",
]

여기서 #은 벽이고 .은 빈 공간입니다. LEVEL[9]는 맨 아래 행인 문자열이며, LEVEL[9][4]는 그 문자열의 다섯 번째 문자입니다. 행은 위에서부터, 열은 왼쪽에서부터 세며, 둘 다 0부터 시작합니다.

타일의 너비가 TILE = 36픽셀일 때, col열 row행에 있는 타일은 x = col * TILE, y = row * TILE 위치에서 시작합니다. 한 행을 순회하려면 enumerate를 사용해 각 문자와 그 인덱스를 가져옵니다.

for col, char in enumerate(LEVEL[9]):
    if char == "#":
        pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))

맨 아래 행의 두 간격은 빈 상태로 유지됩니다. #만 타일을 그리기 때문입니다.

challenge icon

챌린지

쉬움

시작 코드는 맨 아래 행 전체를 갈색 막대 하나로 그립니다. 대신 맵에서 그리도록 하세요.

  1. 막대를 그리는 줄을 제거하세요.
  2. enumerate를 사용해 LEVEL[9]를 반복하세요.
  3. 각 #에 대해 (col * TILE, 9 * TILE, TILE, TILE) 위치에 WALL 사각형을 그리세요.

맵은 그대로 두세요. 초록색 사각형은 방향키로 움직이며 지금은 모든 것을 통과합니다. 이 섹션의 뒷부분에서 사각형을 막는 벽을 추가합니다.

직접 해보기

import pygame

TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#....####......#",
    "#..............#",
    "#.........##...#",
    "#..##.....##...#",
    "#..##..........#",
    "#.........###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

player = pygame.Rect(40, 40, 28, 28)

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 -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4
    if keys[pygame.K_UP]:
        player.y -= 4
    if keys[pygame.K_DOWN]:
        player.y += 4

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

게임 월드의 모든 레슨

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