update
This commit is contained in:
@@ -82,6 +82,16 @@
|
||||
2. **2라운드:** 콜로세움 (Colosseum)
|
||||
3. **3라운드:** 왕의 투기장 (King's Arena) - 최종 보스(Final Boss) 등장.
|
||||
|
||||
### F. 시스템 및 설정 (System & Settings)
|
||||
|
||||
- **설정 페이지 (Settings Screen):**
|
||||
- 게임 재시작 (Restart Game) 및 메인 메뉴로 돌아가기 (Return to Main Menu) 기능.
|
||||
- 하단 네비게이션 바(BottomNavigationBar)에 설정 탭 추가.
|
||||
- **로컬 저장 (Local Storage):**
|
||||
- `shared_preferences`를 사용하여 스테이지 클리어 시 자동 저장.
|
||||
- 메인 메뉴에서 '이어하기 (CONTINUE)' 버튼을 통해 저장된 시점부터 게임 재개 가능.
|
||||
- 저장 데이터: 스테이지 진행도, 턴 수, 플레이어 상태(체력, 장비, 인벤토리 등).
|
||||
|
||||
## 3. 핵심 파일 및 아키텍처
|
||||
|
||||
- **`lib/providers/battle_provider.dart`:**
|
||||
@@ -104,13 +114,14 @@
|
||||
## 4. 작업 컨벤션 (Working Conventions)
|
||||
|
||||
- **Prompt Driven Development:** `prompt/XX_description.md` 유지.
|
||||
- **Language:** **모든 프롬프트 파일(prompt/XX_...)은 반드시 한국어(Korean)로 작성해야 합니다.**
|
||||
- **State Management:** `Provider` + `Stream` (이벤트성 데이터).
|
||||
- **Data:** JSON 기반.
|
||||
|
||||
## 5. 다음 단계 작업 (Next Steps)
|
||||
|
||||
1. **아이템 시스템 고도화:** `items.json`에 `rarity`, `tier` 필드 추가 및 `ItemTable` 로직 수정.
|
||||
2. **상점 구매 기능:** `Shop` 스테이지 구매 UI 구현 (Tier/Rarity 기반 목록 생성).
|
||||
2. **[x] 상점 구매 기능:** `Shop` 스테이지 구매 UI 구현 (Tier/Rarity 기반 목록 생성).
|
||||
3. **적 등장 테이블 구현:** 스테이지별 등장 가능한 적 목록(`enemy_table_pool`) 설정 및 적용.
|
||||
4. **이미지 리소스 적용:** JSON 경로에 맞는 실제 이미지 파일 추가 및 UI 표시.
|
||||
5. **밸런싱 및 콘텐츠 확장:** 아이템/적 데이터 추가 및 밸런스 조정.
|
||||
@@ -144,3 +155,6 @@
|
||||
- [x] 39_luck_system.md
|
||||
- [x] 40_ui_update_summary.md
|
||||
- [x] 41_refactoring_presets.md
|
||||
- [x] 42_item_rarity_and_tier.md
|
||||
- [x] 43_shop_system.md
|
||||
- [x] 44_settings_and_local_storage.md
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# 42. 아이템 시스템 고도화: 희귀도, 티어 및 랜덤 생성 (Item System Enhancement: Rarity, Tier & Random Generation)
|
||||
|
||||
## 목표 (Objective)
|
||||
아이템 시스템을 전면적으로 개편하여 게임의 깊이와 파밍의 재미를 더합니다. 단순한 스탯 증가가 아닌, 희귀도(Rarity)에 따른 **접두사(Prefix) 시스템**과 **랜덤 이름 생성(Random Name Generation)**을 도입하여 아이템의 다양성을 확보하고, 보상 시스템을 개선하여 플레이어에게 더 나은 경험을 제공합니다.
|
||||
|
||||
## 주요 변경 사항 (Key Changes)
|
||||
|
||||
### 1. 희귀도 시스템 (Rarity System)
|
||||
- **`ItemRarity` Enum 정의:**
|
||||
- **`magic` (파랑):** 기본 등급. 50% 확률로 접두사(Prefix)가 붙어 소폭의 스탯 보너스를 받음.
|
||||
- **`rare` (노랑):** 상위 등급. **100% 확률로 랜덤 이름(Name Generator)이 생성**되며, 강력한 접두사 효과(다중 스탯 보너스)가 적용됨.
|
||||
- **`legendary` (주황):** 전설 등급. 고유한 이름과 강력한 효과 유지.
|
||||
- **`unique` (보라):** 최상위 등급. 게임을 뒤집을 수 있는 특수 능력 보유.
|
||||
- **설정:** `ThemeConfig` 및 `ItemConfig`에서 색상 및 등장 확률(60/30/9/1) 관리.
|
||||
|
||||
### 2. 티어 및 스케일링 (Tier & Scaling)
|
||||
- **티어 구분 (`ItemTier`):**
|
||||
- `tier1`: 1라운드 (지하 불법 투기장)
|
||||
- `tier2`: 2라운드 (콜로세움)
|
||||
- `tier3`: 3라운드 (왕의 투기장)
|
||||
- **스케일링 제거:** 밸런스 조정을 용이하게 하기 위해, 기존의 '스테이지 비례 스탯 자동 증가' 로직을 제거하고, 티어별 고정 스탯과 접두사 시스템으로 대체함.
|
||||
|
||||
### 3. 접두사 시스템 (Prefix System)
|
||||
- **데이터 (`ItemPrefixTable`):**
|
||||
- **Magic 접두사:** "Sharp"(공+2), "Sturdy"(체+10) 등 단일 스탯 강화.
|
||||
- **Rare 접두사:** "Deadly"(공+5, 운+5), "Guardian's"(방+3, 체+20) 등 복합/강력 스탯 강화.
|
||||
- **슬롯 필터링:** 접두사마다 적용 가능한 장비 슬롯(`allowedSlots`)을 지정하여, 방패에 '치명적인'이 붙는 등의 어색함 방지.
|
||||
|
||||
### 4. 랜덤 이름 생성기 (Name Generator)
|
||||
- **목적:** Rare 등급 아이템의 특별함을 강조하기 위해 기존 이름 대신 멋진 랜덤 이름을 부여.
|
||||
- **구조 (`NameGenerator`):**
|
||||
- **형용사 + 명사 조합:** "Crimson Reaper", "Shadow Guard" 등.
|
||||
- **슬롯별 명사 풀:** 무기(Fang, Blade), 방어구(Wall, Plate), 방패(Aegis, Barrier) 등 부위에 맞는 명사 사용.
|
||||
- **적용:** Rare 아이템 생성 시 100% 확률로 이름이 변경됨 (스탯은 Rare 접두사 효과를 따름).
|
||||
|
||||
### 5. 보상 시스템 (Reward System)
|
||||
- **골드 보상:**
|
||||
- 전투 승리 시 골드(10 + 스테이지*5 + 랜덤) 자동 획득.
|
||||
- 보상 팝업 헤더 우측 상단에 획득 골드량 표시.
|
||||
- **아이템 보상:**
|
||||
- 현재 스테이지 티어에 맞는 아이템 3종 랜덤 제시.
|
||||
- **스킵 옵션 ("Skip Reward"):** 원하지 않는 아이템을 받지 않고 넘어갈 수 있는 선택지 추가.
|
||||
- **UI 개선:** 희귀도별 텍스트 색상 및 테두리 적용으로 시각적 정보 강화.
|
||||
|
||||
## 구현 완료 항목 (Implementation Status)
|
||||
- [x] `ItemRarity`, `ItemTier` Enum 및 데이터 모델 업데이트.
|
||||
- [x] `items.json` 데이터 마이그레이션 (Common->Magic, Epic->Legendary 등).
|
||||
- [x] `ItemTable.getRandomItem` 구현 (가중치 기반 랜덤 선택).
|
||||
- [x] `ItemPrefixTable` 및 `NameGenerator` 구현.
|
||||
- [x] `ItemTemplate.createItem` 로직 수정 (접두사 및 랜덤 이름 적용).
|
||||
- [x] `InventoryScreen` 및 `BattleScreen` UI 업데이트 (희귀도 색상, 보상 팝업 개선).
|
||||
- [x] 테스트 코드(`item_rarity_tier_test.dart`, `item_random_test.dart`) 업데이트 및 검증 완료.
|
||||
@@ -0,0 +1,31 @@
|
||||
# 43. 상점 시스템 구현 (Shop System Implementation)
|
||||
|
||||
## 목표 (Objective)
|
||||
플레이어가 획득한 골드를 소비하여 장비를 구매하고 전력을 강화할 수 있는 상점 시스템을 구현합니다. 상점은 랜덤하게 생성된 아이템을 제공하며, 리롤(새로고침) 기능을 통해 전략적인 아이템 파밍을 지원합니다.
|
||||
|
||||
## 구현 내용 (Implementation Details)
|
||||
|
||||
### 1. 데이터 및 로직 (`BattleProvider`)
|
||||
- **`_generateShopItems()`:** 현재 스테이지 티어에 맞는 랜덤 아이템 4개를 생성하는 로직 분리.
|
||||
- **`rerollShopItems()`:** 50골드를 지불하고 상점 아이템 목록을 새로고침하는 기능.
|
||||
- **수정 사항:** `StageModel`의 `shopItems` 필드가 `final`이므로, 리스트 자체를 재할당하는 대신 기존 리스트의 내용을 `clear()` 후 새로운 아이템으로 `addAll()`하는 방식으로 변경하여 런타임 에러를 방지했습니다.
|
||||
- **`buyItem(Item item)`:** 골드를 차감하고 아이템을 인벤토리에 추가하며, 상점 목록에서 해당 아이템을 제거하는 기능.
|
||||
|
||||
### 2. UI (`ShopUI` in `stage_ui.dart`)
|
||||
- **헤더:** 'Merchant' 타이틀과 현재 보유 골드 표시 (황금색 강조).
|
||||
- **아이템 목록 (GridView):**
|
||||
- 2열 카드 형태의 그리드 레이아웃.
|
||||
- 희귀도(Rarity)에 따른 이름 색상 및 테두리 적용.
|
||||
- 아이템 아이콘, 이름, 주요 스탯 요약 표시.
|
||||
- **가격 버튼:** 보유 골드에 따라 활성/비활성화. 클릭 시 구매 확인 팝업 출력.
|
||||
- **하단 버튼:**
|
||||
- **Reroll (50 G):** 목록 새로고침 버튼 (골드 부족 시 비활성화).
|
||||
- **Leave Shop:** 상점을 떠나 다음 스테이지로 이동.
|
||||
|
||||
### 3. 테스트 및 복구 (Test & Restoration)
|
||||
- **임시 테스트 설정 (완료):**
|
||||
- 초기 골드 200G로 시작.
|
||||
- 첫 스테이지를 강제로 상점(Shop)으로 설정.
|
||||
- **정상 설정으로 복구 완료:**
|
||||
- 초기 골드 **50G**로 시작.
|
||||
- 상점은 **매 5번째 스테이지**마다 등장하도록 복구.
|
||||
@@ -0,0 +1,40 @@
|
||||
# 44. 설정 페이지 및 로컬 저장 (Settings Page & Local Storage)
|
||||
|
||||
## 1. 목표 (Goal)
|
||||
- `BottomNavigationBar`에 "설정 (Settings)" 페이지를 추가합니다.
|
||||
- 설정 페이지에 "메인 메뉴로 나가기 (Return to Main Menu)" 및 "다시 시작하기 (Restart Game)" 버튼을 추가합니다.
|
||||
- 스테이지 클리어 시 진행 상황(스테이지, 턴, 플레이어 상태)을 로컬 스토리지(`shared_preferences`)에 자동 저장하는 기능을 구현합니다.
|
||||
- 메인 메뉴에 저장된 데이터가 있을 경우 "이어하기 (CONTINUE)" 버튼을 표시하고 기능을 연결합니다.
|
||||
|
||||
## 2. 구현 상세 (Implementation Details)
|
||||
|
||||
### 의존성 (Dependencies)
|
||||
- `shared_preferences` 패키지 추가.
|
||||
|
||||
### 로컬 저장소 (`SaveManager`)
|
||||
- **파일:** `lib/game/save_manager.dart`
|
||||
- **기능:**
|
||||
- `saveGame`: `BattleProvider`의 상태(스테이지, 턴, 플레이어 스탯, 인벤토리, 장비)를 JSON으로 직렬화하여 SharedPreferences에 저장.
|
||||
- `loadGame`: 저장된 데이터를 불러와 역직렬화.
|
||||
- `hasSaveData`: 저장 파일 존재 여부 확인.
|
||||
- `clearSaveData`: 저장 데이터 삭제 (리셋/디버그 용).
|
||||
|
||||
### 데이터 직렬화 (Data Serialization)
|
||||
- **수정된 클래스:** `Character`, `StatusEffect`.
|
||||
- **메서드:** `toJson()` 및 `fromJson()` 메서드 추가.
|
||||
- **아이템 처리:** `Item` 객체 자체를 저장하는 대신 ID를 저장하고, 로드 시 `ItemTable`을 통해 복구.
|
||||
|
||||
### UI 변경 사항 (UI Changes)
|
||||
- **설정 화면 (`SettingsScreen`):**
|
||||
- `lib/screens/settings_screen.dart` 생성.
|
||||
- 버튼: "게임 재시작 (Restart Game)", "메인 메뉴로 (Return to Main Menu)".
|
||||
- **메인 래퍼 (`MainWrapper`):**
|
||||
- `BottomNavigationBar`에 "Settings" 탭 추가.
|
||||
- **메인 메뉴 (`MainMenuScreen`):**
|
||||
- `StatefulWidget`으로 변환.
|
||||
- 초기화 시 저장 데이터 확인.
|
||||
- 저장 데이터 존재 시 "이어하기 (CONTINUE)" 버튼 표시.
|
||||
|
||||
### 전투 로직 통합 (Battle Logic Integration)
|
||||
- **자동 저장:** `_prepareNextStage` (스테이지 클리어 후 실행) 내부에서 `SaveManager.saveGame` 호출.
|
||||
- **불러오기:** `BattleProvider`에 `loadFromSave` 메서드를 추가하여 JSON 데이터로부터 상태 복구.
|
||||
Reference in New Issue
Block a user