# 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%로 계산되는지 확인.
- 데이터 로딩 시 이미지 필드가 정상적으로 파싱되는지 확인 (테스트 코드 활용).
