Atani 퀴즈
프로그래머스 코테 연습
C++
던전 탈출 텍스트 RPG
- CMake + Ninja 빌드 환경 추가
- 지금까지 MSBuild/cl.exe를 직접 호출해서 빌드했는데, VSCode와 Visual Studio에서 빌드 설정이 따로 놀았다. CMakeLists.txt를 추가해 CMake 기반으로 전환하고
.vscode/tasks.json,c_cpp_properties.json도 CMake+Ninja 조합에 맞게 정리해서 여러 환경에서 같은 빌드 설정을 공유하도록 했다.
- 지금까지 MSBuild/cl.exe를 직접 호출해서 빌드했는데, VSCode와 Visual Studio에서 빌드 설정이 따로 놀았다. CMakeLists.txt를 추가해 CMake 기반으로 전환하고
- Monster 다형성 제거, 데이터 기반으로 전환
- 지금까지
Goblin/Slime/Wolf가 각각Monster를 상속받아attack()을 오버라이드하고 있었는데, 실제로는 출력 메시지만 다르고 로직(player.takeDamage(ap))은 완전히 동일했다.MonsterInfo에attackMessage필드를 추가하고Monster::attack()을 하나로 합쳐서, 서브클래스 3개(Goblin,Slime,Wolf)를 통째로 삭제했다. - 몬스터를 새로 추가할 때마다 클래스를 만들 필요 없이
MonsterInfo데이터 한 줄만 추가하면 되도록 바뀌면서, 던전 2단계(오크, 홉고블린, 다이어울프) / 3단계(오우거, 트롤, 와이번) 몬스터를 데이터로만 추가했다.
- 지금까지
- 포션 레시피 재료를 그룹 단위 매칭으로 변경
- 기존
PotionRecipe는{"허브", 1}처럼 재료 이름을 정확히 문자열로 매칭했는데, 실제 아이템 체계(몬스터 드롭템)와 안 맞았다.MaterialGroupenum(Dungeon1/2/3MonsterDrop)을 만들고materialGroupItems로 그룹 → 아이템 목록을 매핑해서, "1단계 던전 몬스터 아이템 중 1종"처럼 그룹 단위로 재료를 검색/소비하도록 바꿨다.
- 기존
- 포션 제작(
craftPotion) 기능 추가- 연금술 공방 메뉴에 "4. 포션 제작"을 추가했다. 레시피의 각 재료 그룹마다 인벤토리에 필요 수량을 가진 아이템이 있는지 먼저 전부 확인하고, 하나라도 부족하면 제작을 취소하고, 다 있으면 그때 실제로 소비하도록 순서를 나눴다.
WorkshopManagement가 재료를 확인/소비하려면PlayerInventory가 필요해서,showWorkshopMenu()/ControlWorkshopMenu()에PlayerInventory&를 넘기도록 시그니처를 바꿨다.
- 던전을 클리어하고 얻은 아이템이 인벤토리가 가득 찼다며 추가가 안되길래 확인해봤더니 maxCapacity를 만들고 정작 사용해야하는 곳에는 추가를 안했었다..
getTotalItemCount() < 10처럼 하드코딩돼 있던 최대 수량을PlayerInventory의maxCapacity멤버로 옮겼다.
- 던전 전투 중 인벤토리 열람 가능
- 지금까지는 전투 턴마다 무조건 공격만 할 수 있었는데, "1. 공격 2. 인벤토리"로 선택지를 나눠서 전투 중에도 인벤토리를 확인할 수 있도록 했다.
