This commit is contained in:
Horoli 2025-12-03 18:28:23 +09:00
parent 526377bb73
commit a29dc50c4c
2 changed files with 74 additions and 2 deletions

View File

@ -7,7 +7,7 @@
- **프로젝트명:** Colosseum's Choice - **프로젝트명:** Colosseum's Choice
- **플랫폼:** Flutter (Android/iOS/Web/Desktop) - **플랫폼:** Flutter (Android/iOS/Web/Desktop)
- **장르:** 텍스트 기반의 턴제 RPG + GUI (로그라이크 요소 포함) - **장르:** 텍스트 기반의 턴제 RPG + GUI (로그라이크 요소 포함)
- **상태:** 프로토타입 단계 (전투 시각화, 데이터 주도 시스템 구현 완료) - **상태:** 프로토타입 단계 (전투 시각화, 데이터 주도 시스템, 반응형 UI 구현 완료)
## 2. 현재 구현된 핵심 기능 (Feature Status) ## 2. 현재 구현된 핵심 기능 (Feature Status)
@ -16,6 +16,9 @@
1. **메인 메뉴 (`MainMenuScreen`):** 게임 시작 버튼. 1. **메인 메뉴 (`MainMenuScreen`):** 게임 시작 버튼.
2. **캐릭터 선택 (`CharacterSelectionScreen`):** 'Warrior' 직업 구현. 2. **캐릭터 선택 (`CharacterSelectionScreen`):** 'Warrior' 직업 구현.
3. **메인 게임 (`MainWrapper`):** 하단 탭 네비게이션 (Battle / Inventory). 3. **메인 게임 (`MainWrapper`):** 하단 탭 네비게이션 (Battle / Inventory).
4. **반응형 레이아웃 (Responsive UI):**
- `ResponsiveContainer` 위젯을 통해 최대 너비(600px) 및 높이(1000px) 제한.
- 웹/태블릿 환경에서도 모바일 앱처럼 중앙 정렬된 화면 제공.
### B. 전투 시스템 (`BattleProvider`) ### B. 전투 시스템 (`BattleProvider`)
@ -38,8 +41,13 @@
### D. 아이템 및 경제 (`Item`, `Inventory`) ### D. 아이템 및 경제 (`Item`, `Inventory`)
- **장비:** 무기, 방어구, 방패, 장신구. - **장비:** 무기, 방어구, 방패, 장신구.
- **아이콘 및 색상 (`ItemUtils`):**
- 무기: 빨강 삼각형 (`Icons.change_history`)
- 방패: 파랑 방패 (`Icons.shield`)
- 갑옷: 파랑 옷 (`Icons.checkroom`)
- 장신구: 보라 다이아몬드 (`Icons.diamond`)
- **가격:** JSON 고정 가격 사용. 판매 시 60% (`GameMath.floor`) 획득. - **가격:** JSON 고정 가격 사용. 판매 시 60% (`GameMath.floor`) 획득.
- **이미지:** `items.json`, `enemies.json`에 이미지 경로 필드 포함. - **인벤토리:** 장착 슬롯 및 가방(Bag) 그리드 UI 구현.
### E. 스테이지 시스템 (`StageModel`) ### E. 스테이지 시스템 (`StageModel`)
@ -52,6 +60,8 @@
- **Core Logic:** 상태 관리, 전투 루프. - **Core Logic:** 상태 관리, 전투 루프.
- **Streams:** `damageStream`, `effectStream`을 통해 UI(`BattleScreen`)에 비동기 이벤트 전달. - **Streams:** `damageStream`, `effectStream`을 통해 UI(`BattleScreen`)에 비동기 이벤트 전달.
- **`lib/game/enums.dart`:** 프로젝트 전반의 Enum 통합 관리 (`ActionType`, `RiskLevel`, `StageType` 등). - **`lib/game/enums.dart`:** 프로젝트 전반의 Enum 통합 관리 (`ActionType`, `RiskLevel`, `StageType` 등).
- **`lib/utils/item_utils.dart`:** 아이템 타입별 아이콘 및 색상 로직 중앙화.
- **`lib/widgets/responsive_container.dart`:** 반응형 레이아웃 컨테이너.
- **`lib/game/model/`:** - **`lib/game/model/`:**
- `damage_event.dart`, `effect_event.dart`: 이벤트 모델. - `damage_event.dart`, `effect_event.dart`: 이벤트 모델.
- `entity.dart`: `Character` (Player/Enemy). - `entity.dart`: `Character` (Player/Enemy).
@ -71,6 +81,13 @@
2. **이미지 리소스 적용:** JSON 경로에 맞는 실제 이미지 파일 추가 및 UI 표시. 2. **이미지 리소스 적용:** JSON 경로에 맞는 실제 이미지 파일 추가 및 UI 표시.
3. **밸런싱 및 콘텐츠 확장:** 아이템/적 데이터 추가 및 밸런스 조정. 3. **밸런싱 및 콘텐츠 확장:** 아이템/적 데이터 추가 및 밸런스 조정.
## 6. 장기 목표 (Future Roadmap / TODO)
- [ ] **Google OAuth 로그인 및 계정 연동:**
- Firebase Auth 등을 활용한 구글 로그인 구현.
- Firestore 또는 Realtime Database에 유저 계정 정보(진행 상황, 재화 등) 저장 및 불러오기 기능 추가.
- _Note: 이 기능은 게임의 핵심 로직이 안정화된 후, 완전 나중에 진행할 예정입니다._
--- ---
**이 프롬프트를 읽은 AI 에이전트는 위 내용을 바탕으로 즉시 개발을 이어가십시오.** **이 프롬프트를 읽은 AI 에이전트는 위 내용을 바탕으로 즉시 개발을 이어가십시오.**

View File

@ -0,0 +1,55 @@
# 32. 적 장비 시스템 (Enemy Equipment System)
## 1. 배경 (Background)
현재 플레이어는 장비를 통해 스탯 보너스와 특수 효과(출혈, 스턴 등)를 얻습니다. 적(Enemy) 또한 동일한 `Character` 클래스를 사용하므로, 적에게도 장비를 부여하여 다양한 전투 패턴과 난이도를 구현하고자 합니다.
## 2. 목표 (Objective)
- **적 데이터 구조 변경:** `enemies.json``equipment` 필드 추가.
- **적 생성 로직 변경:** `EnemyTemplate`에서 적 생성 시, 정의된 장비 아이템을 인벤토리에 추가하고 장착.
- **전투 로직 확인:** 적이 공격할 때 장착된 아이템의 효과(상태이상 등)가 플레이어에게 적용되는지 확인.
## 3. 작업 상세 (Implementation Details)
### A. 데이터 파일 수정 (`assets/data/enemies.json`)
- 적 정의에 `equipment` 필드(List<String> - Item ID) 추가.
- 예시:
```json
{
"name": "Goblin",
"baseHp": 20,
"baseAtk": 5,
"baseDefense": 5,
"image": "assets/images/enemies/goblin.png",
"equipment": ["dagger_001"] // Dagger for bleed effect
}
```
### B. `lib/game/data/enemy_table.dart` 수정
- `EnemyTemplate` 클래스에 `List<String> equipmentIds` 필드 추가.
- `fromJson` 메서드에서 `equipment` 필드 파싱.
- `createCharacter` 메서드 수정:
- `ItemTable.get(id)`를 사용하여 아이템 인스턴스 생성.
- 생성된 아이템을 적의 인벤토리에 추가(`addToInventory`)하고 장착(`equip`).
- _Note: `ItemTable`에 ID로 아이템을 찾는 기능이 없다면 추가 필요._
### C. `lib/game/data/item_table.dart` 확인 및 수정
- 아이템을 ID로 조회하는 기능(`getItem(String id)`)이 있는지 확인하고, 없다면 구현.
- 현재 `items.json`에는 ID 필드가 명시적으로 없을 수 있으므로, `id` 필드를 추가하거나 기존 `name`을 ID로 사용할지 결정 필요 (ID 필드 추가 권장).
### D. `lib/providers/battle_provider.dart` 검증
- `_tryApplyStatusEffects` 메서드가 `attacker.equipment`를 순회하므로, 적이 공격할 때도 로직이 정상 동작하는지 확인.
- 별도의 코드 수정은 필요 없을 것으로 예상되나, 테스트를 통해 검증.
## 4. 검증 (Verification)
- **데이터 로드 테스트:** 앱 실행 시 `enemies.json` 파싱 에러가 없는지 확인.
- **전투 테스트:**
- 특정 장비(예: 출혈 단검)를 가진 적(예: 고블린)과 전투.
- 적의 공격 성공 시, 플레이어에게 출혈(Bleed) 효과가 적용되는지 로그 및 UI로 확인.
- 적 정보 창(구현되어 있다면) 또는 로그를 통해 적이 장비를 착용하고 있는지 확인.