2026-03-31 TIL (26일차)
2026-03-31 TIL (26일차)
팀프로젝트
ShopScene 구현
- 상태 플래그를 활용한 통합 인벤토리 구현
- 새로운 씬을 파지 않고,
SceneManager의IsShopMode라는 전역 플래그를 활용했습니다. - 기존
InventoryScene하나로 ‘아이템 사용 모드’와 ‘상점 판매 모드(60% 골드 환급)’를 분리하여 코드 중복을 최소화했습니다.
- 새로운 씬을 파지 않고,
- 힙 손상(Use-After-Free)
- 씬 전환(
Replace_Scene,Return_Scene) 직후 객체가 소멸(delete)되면서 발생하던 메모리 접근 에러를 정확히 파악했습니다. - 씬 전환 함수 호출 바로 밑에
return;을 추가하여, 상점에서의 메모리 해제가 몬스터 인벤토리까지 터뜨리던 문제를 해결했습니다.
- 씬 전환(
보스 기믹 구현 (퀴즈)
일반적인 타격 전투가 아닌, 4지선다 퀴즈를 풀며 공방을 주고받는 보스 패턴을 구현했습니다.
- 상태 머신(FSM)의 유연한 확장
- 기존
BattleScene의 전투 흐름 제어 변수인battleState에 새로운 페이즈를 추가했습니다.9(퀴즈 도입) ➡️10(출제 및 선택) ➡️11(정답 / 보스 타격) ➡️12(오답 / 플레이어 피해)
- 별도의 씬을 만들지 않고 보스만의 특수 페이즈 분기 처리를 완료했습니다.
- 기존
- 스마트한 UI 재사용
if (battleState != 10)조건문을 활용해 퀴즈 출제 시에만 기본 메뉴(공격, 방어, 아이템 등)를 렌더링하지 않도록 처리했습니다.- 기존 하단 메뉴가 있던 동일한 콘솔 좌표를 재활용하여 4지선다 선택지를 덮어씌움으로써, 화면 깜빡임이나 씬 전환 없이 퀴즈 연출을 완성했습니다.
- 데이터와 로직의 분리 (MVC 패턴 설계)
static const std::vector<QuizData>를 사용해 문제 은행을 캡슐화하고,GetRandomQuiz()함수로 필요한 문제 하나만 뽑아오게 설계했습니다.- 기대 효과: 향후 퀴즈가 100개, 1000개로 늘어나도 전투 씬의 코드는 길어지지 않는 확장성(Scalability)을 확보했습니다.
This post is licensed under CC BY 4.0 by the author.
