# 23. 아이템 가격 리팩토링 및 이미지 필드 추가 ## 목표 1. 아이템의 가격(`price`)을 코드 내 동적 계산이 아닌 `items.json`에 명시된 고정 값으로 변경합니다. 2. 상점 구매 시 이 고정 가격을 사용하고, 판매 시에는 60%의 가격을 적용합니다. 3. 향후 UI 개선을 위해 `items.json`과 `enemies.json`에 이미지 경로 필드를 미리 추가합니다. ## 1. 아이템 가격 리팩토링 ### A. 데이터 파일 수정 (`assets/data/items.json`) - 모든 아이템 항목에 `price` 필드를 추가합니다. (예: `"price": 100`) - 적절한 가격을 설정합니다. ### B. 데이터 로더 수정 (`lib/game/data/item_table.dart`) - `ItemTemplate` 클래스에서 `price` 필드를 파싱하도록 수정합니다. - `createItem` 메서드에서 가격을 계산하는 로직을 제거하고, 템플릿의 `price`를 그대로 사용하도록 변경합니다. - 단, 스테이지 스케일링에 따라 가격이 변동되어야 한다면 그 로직은 유지하거나 수정할 수 있습니다. (현재 요구사항은 "고정된 price"이므로 기본적으로 JSON 값을 따르되, +1 강화된 아이템의 경우 가격 상승 로직이 필요할 수 있음. 일단 기본 가격은 JSON을 따르게 함) ### C. 상점 및 판매 로직 확인 - `BattleProvider` (또는 상점 로직이 있는 곳)에서 아이템 구매 시 `item.price`를 사용하도록 확인합니다. - 아이템 판매 시 `GameMath.floor(item.price * 0.6)`를 사용하여 소수점을 버리도록 로직을 수정합니다. ## 2. 이미지 필드 추가 ### A. JSON 데이터 수정 - `assets/data/items.json`: 각 아이템에 `image` 필드 추가 (예: `"image": "assets/images/items/sword.png"`) - `assets/data/enemies.json`: 각 적에게 `image` 필드 추가 (예: `"image": "assets/images/enemies/goblin.png"`) - 실제 이미지 파일은 아직 없으므로 필드만 추가합니다. ### B. 모델 클래스 수정 - `lib/game/data/item_table.dart` -> `ItemTemplate`: `image` 필드 파싱 추가. - `lib/game/model/item.dart` -> `Item`: `image` 필드 추가. - `lib/game/data/enemy_table.dart` -> `EnemyTemplate`: `image` 필드 파싱 추가. - `lib/game/model/entity.dart` -> `Character`: `image` 필드 추가 (선택적). ### C. UI 반영 (BattleScreen, Inventory) - `BattleScreen`과 인벤토리 UI에서 해당 이미지 경로를 사용할 수 있도록 준비합니다. - 이미지가 없는 경우(null 또는 파일 없음) 기존처럼 텍스트나 기본 아이콘을 표시하도록 예외 처리를 해둡니다. ## 검증 - `items.json`의 가격이 게임 내(상점/인벤토리)에 올바르게 반영되는지 확인. - 판매 시 가격이 60%로 계산되는지 확인. - 데이터 로딩 시 이미지 필드가 정상적으로 파싱되는지 확인 (테스트 코드 활용).