III단원 확장 — 게임 시스템 실습과제

학습한 트리·그래프를 스토리 분기·맵 연결·최단 경로로 확장하기 (추가 강의)

← 전체 목차 III단원 목차

이 페이지는 강의 외 추가 강의예요. III단원에서 배운 트리·그래프·DFS·BFS를 게임의 스토리 분기, 방 연결·갈 수 있는 맵, 최단 거리(경로 찾기)라는 구체적인 시스템으로 확장합니다. 자료구조 복기 → 개념 → 실제 구현 활용 순으로 짚어요.

1. 트리 — 스토리·퀘스트 분기

선택지에 따라 갈라지는 스토리는 한 루트(시작 장면)에서 자식 노드(다음 장면)로 뻗어 나가는 트리로 표현할 수 있어요. 루트 = 스토리 시작, 리프 = 엔딩·종료 지점이에요.

📌 복기: 트리

📌 트리를 쓰는 방식

딕셔너리로 "노드 → 자식들"
tree = {"start": ["scene_a", "scene_b"], "scene_a": ["end1"], "scene_b": ["end2"], "end1": [], "end2": []} — 각 노드가 키, 값이 자식 노드 리스트.
노드 클래스
각 노드에 id, text(대사), children(자식 리스트)를 두고, 선택에 따라 현재 노드를 자식 중 하나로 바꿔요.

🎮 실제 구현에서 쓰는 곳

2. 그래프 — 맵 연결·갈 수 있는 방·최단 거리

방과 방이 문으로 연결된 구조는 정점 = 방, 간선 = 연결인 그래프예요. "지금 방에서 갈 수 있는 방 목록", "목표 방까지 최단 거리"를 그래프 탐색(DFS, BFS)으로 구할 수 있어요.

📌 복기: 그래프·DFS·BFS

📌 사용하는 파이썬 API

from collections import deque
BFS에서 "다음에 방문할 정점"을 넣을 큐로 deque를 씁니다. append(다음 방), popleft()로 현재 방.
인접 리스트
adj = {"방1": ["방2", "방3"], "방2": ["방1", "방4"], ...} — 각 방에서 한 번에 갈 수 있는 방 리스트.
방문 집합
visited = set()로 이미 방문한 방을 기록해 같은 방을 두 번 방문하지 않도록 해요.

🎮 실제 구현에서 쓰는 곳