game/prompt/23_refactor_item_price_and_...

2.8 KiB

23. 아이템 가격 리팩토링 및 이미지 필드 추가

목표

  1. 아이템의 가격(price)을 코드 내 동적 계산이 아닌 items.json에 명시된 고정 값으로 변경합니다.
  2. 상점 구매 시 이 고정 가격을 사용하고, 판매 시에는 60%의 가격을 적용합니다.
  3. 향후 UI 개선을 위해 items.jsonenemies.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%로 계산되는지 확인.
  • 데이터 로딩 시 이미지 필드가 정상적으로 파싱되는지 확인 (테스트 코드 활용).