텍스트 RPG
코드 읽기 · 실행 흐름 추적 · 데이터 흐름 분석
짧은 예제 코드에서 벗어나 하나의 텍스트 RPG를 읽으며, 수업에서 배운 Python 문법이 실제 프로그램 안에서 어떻게 연결되는지 살펴본다.
관련 Coding Practice
| 연습 영역 | 연결되는 내용 |
|---|---|
| 기초 문법 | 입력값 · 문자열 처리 · 데이터 변화 |
| 제어 구조 | 명령 분기 · 전투 반복 · break |
| 함수 | 매개변수 · 반환값 · 함수 호출 흐름 |
| 파일·예외 | 저장·불러오기 · JSON · FileNotFoundError |
| 클래스 | RPG 코드를 읽기 위한 객체·속성·메서드 보충 |
| 알고리즘 | 상태 변화와 전체 실행 흐름 추적 |
| 종합 | 명령 분석 · 상태 변화 · 함수 · 반복을 연결한 종합 문제 |
전체 코드를 처음부터 모두 이해하는 것이 목표가 아니다. 문법 찾기 → 실행 흐름 추적 → 데이터 흐름 분석의 순서로 읽으며, 함수의 입력·처리·반환값과 객체의 값 변화를 따라가는 데 초점을 둔다. 클래스 문법 자체는 학습 범위로 다루지 않으며, 필요한 경우 보충 개념: 클래스를 참고한다.
전체 실행 흐름
사용자 입력 ↓ Game.run() ↓ CommandParser.parse() ↓ Game.process_command() ↓ 이동 · 전투 · 아이템 · 대화 · 퀘스트 · 저장/불러오기 ↓ 상태 변경 ↓ 다음 입력 또는 종료
게임의 중심 흐름은 Game.run() → CommandParser.parse() → Game.process_command()로 이어지고, 선택된 명령에 따라 각 기능을 담당하는 함수로 작업이 전달된다.
모듈 지도
| 모듈 | 수업에서 보는 핵심 |
|---|---|
| 01. 라이브러리와 공통 도구 | import, 함수, 난수, 최솟값·최댓값 |
| 02. 정해진 값 관리 | 프로그램에서 사용하는 상태와 방향 값 |
| 03. 게임 데이터 | 아이템·스킬·몬스터·퀘스트의 값과 상태 |
| 04. 인벤토리 | 리스트, for, if, return |
| 05. 플레이어 | 능력치 계산, 장비, 성장과 값의 변화 |
| 06. 명령어 분석 | 문자열 입력을 분석하여 실행할 명령 결정 |
| 07. 피해 계산 | 매개변수 → 계산 → 반환값 |
| 08. 보상 처리 | 몬스터 정보가 플레이어 경험치·골드로 전달되는 과정 |
| 09. 방·세계·이벤트 | 현재 위치, 이동 관계, 이벤트 실행 |
| 10. NPC와 퀘스트 | 상태 변화와 반복 처리 |
| 11. 전투 | 전투 반복, 함수 호출, HP 변화, 반환값 |
| 12. 저장·불러오기 | 파일 입출력, JSON, 예외 처리 |
| 13. 게임 데이터 만들기 | 리스트·딕셔너리와 게임 데이터 구성 |
| 14. 게임 흐름 연결 | 명령 분기, 기능 호출, 반복 실행 |
| 15. 실행 | input(), 게임 생성, 프로그램 시작 |
모듈별 전체 코드
수업용 코드북의 15개 모듈을 각각 열어 보거나, 전체 코드를 한 파일로 이어서 확인할 수 있다.
예제 1 · 입력값이 프로그램 시작으로 이어지는 과정
input()으로 받은 문자열을 확인한 뒤, 빈 문자열이면 기본 이름을 저장한다. 그 값을 이용해 게임을 만들고 run()을 호출하면서 전체 프로그램이 시작된다.
예제 2 · 입력 → 분석 → 실행
반복문 안에서 입력을 받고, 입력 문자열을 명령으로 바꾼 뒤, 해당 기능을 실행한다. 종료 조건이 만족되면 break로 반복을 끝낸다.
예제 3 · 조건에 따른 명령 분기
하나의 입력이 여러 기능 중 어디로 이동하는지를 if / elif로 확인할 수 있다. 각 분기에서는 필요한 함수를 호출하고, 일부 함수의 반환값은 다음 판단에 다시 사용된다.
연습
- 플레이어 이름을 입력하지 않고 Enter만 눌렀을 때 어떤 값이
Game()으로 전달되는지 코드 근거와 함께 설명해 보자. 상태를 입력했을 때input()부터 출력까지 어떤 함수와 조건을 거치는지 순서대로 적어 보자.불러오기를 실행했는데 저장 파일이 없다면 어떤 반환값이 어떤 조건 판단에 사용되는지 추적해 보자.