Pygame으로 만드는 나만의 RPG 게임 3강 – 타일맵 만들기와 Tiled 툴 사용법, 맵 불러오기

Pygame으로 만드는 나만의 RPG 게임 3강입니다!

지난 시간에는 맵 경계 처리와 카메라 이동을 구현해서, 캐릭터가 화면 중앙에 위치하면서 자연스럽게 맵을 탐험할 수 있도록 만들었죠.

이번 강의에서는 본격적으로 **진짜 맵 구조**, 즉 타일맵(Tilemap)을 직접 만들어보고, 이를 Pygame에 불러오는 과정을 배워봅니다.

1. 타일맵(Tilemap)이란?

타일맵은 일정한 크기의 작은 타일 이미지(예: 32×32, 48×48)를 조합해서 하나의 큰 맵을 구성하는 방식입니다.

예를 들어,

  • 잔디: tile_01.png
  • 돌: tile_02.png
  • 물: tile_03.png

이런 타일들을 격자 형태로 배치해서 하나의 지형을 만드는 것이죠.

장점은?
– 반복되는 이미지 저장 공간 절약
– 레벨 디자인 속도 향상
– 충돌 처리도 셀 단위로 관리 가능

2. Tiled Map Editor 설치

Tiled는 무료 맵 에디터입니다.

▶ 다운로드: https://www.mapeditor.org/

설치 후 다음 순서로 새 맵을 만듭니다:

  1. File → New → Tile Layer 선택
  2. 맵 크기: 50 x 30 타일 / 타일 크기: 48 x 48
  3. 타일셋 추가: 외부 이미지 파일 불러오기
  4. 맵을 자유롭게 드래그하여 디자인
  5. 파일 → Export → .json 형식으로 저장

3. 타일셋 만들기

타일셋은 여러 타일 이미지가 한 이미지에 모여 있는 스프라이트입니다.

예: 48×48 크기 타일 10개를 하나로 만든 이미지 (480×48)

저장 후 Tiled에서 불러올 때 타일 크기를 정확히 지정해야 합니다.

4. 맵 JSON 불러오기

Tiled에서 만든 JSON 맵 파일은 Python에서 불러와서 처리할 수 있습니다.

import json

with open("map.json", "r") as f:
    map_data = json.load(f)

print(map_data.keys())  # layers, tilesets, width, height 등

우리가 실제로 그려야 할 건 `layers` 안의 `data` 배열입니다. 이 배열에는 타일 번호가 저장되어 있습니다.

5. 타일맵을 화면에 그리기

import pygame
import json
import os

TILE_SIZE = 48
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

# 타일셋 이미지 (타일 10개 가로 배열)
tileset = pygame.image.load("tileset.png")

# 타일 개수 계산
TILE_COLS = tileset.get_width() // TILE_SIZE

def draw_map():
    with open("map.json", "r") as f:
        map_data = json.load(f)

    layer = map_data['layers'][0]  # 첫 번째 레이어
    data = layer['data']
    map_width = map_data['width']
    map_height = map_data['height']

    for i, tile_num in enumerate(data):
        if tile_num == 0:
            continue  # 0은 빈칸
        tile_index = tile_num - 1
        col = tile_index % TILE_COLS
        row = tile_index // TILE_COLS

        x = (i % map_width) * TILE_SIZE
        y = (i // map_width) * TILE_SIZE

        screen.blit(tileset, (x, y), (col * TILE_SIZE, row * TILE_SIZE, TILE_SIZE, TILE_SIZE))

이제 `draw_map()` 함수를 main 루프에 넣어서 호출하면 맵이 그려집니다!

6. 실습을 위한 참고 이미지 리소스

아래 무료 리소스를 활용해보세요:

7. 다음 강의 예고

4강 – NPC 만들기: 등장 위치 지정, 간단한 움직임, 상호작용 준비
다음 시간에는 맵 위에 NPC를 배치하고, 플레이어와 대화하거나 반응하는 구조를 만들어보겠습니다. 본격적인 RPG 세계관이 살아나는 순간이에요!

이 시리즈는 기획부터 시스템 구현까지, 실제 RPG 게임 제작 과정을 체험하며 배우는 실습형 강의입니다. 함께 진짜 게임을 만들어가봐요!