# 설정/튜토리얼/성능/테스트

> 메인 문서: [game-system-overhaul-index.md](game-system-overhaul-index.md)

---

## 1. 설정 화면

| 설정 항목 | 옵션 |
|----------|------|
| 게임 속도 | 0.5x, 1x, 2x, 5x |
| 자동 저장 간격 | 1분, 5분, 10분 |
| SFX 볼륨 | 0-100% |
| BGM 볼륨 | 0-100% |
| 진동 | 켜기/끄기 (모바일) |
| 알림 표시 | 켜기/끄기 |
| 전투 로그 | 간략/상세/끄기 |
| 언어 | 한국어/English |

### 1.1 데이터 관리 설정

| 설정 항목 | 설명 | 경고 |
|----------|------|------|
| 튜토리얼 초기화 | 튜토리얼 다시 보기 | - |
| 도움말 초기화 | 모든 도움말 팁 다시 표시 | - |
| 캐시 삭제 | 임시 파일 삭제 | - |
| 설정 초기화 | 모든 설정을 기본값으로 | 확인 필요 |
| 현재 캐릭터 삭제 | 현재 슬롯 데이터 삭제 | 2중 확인 필요 |
| 모든 데이터 삭제 | 전체 초기화 | 3중 확인 + 입력 확인 |

### 1.2 데이터 삭제 확인 UI

```
┌─────────────────────────────────────┐
│                                     │
│   ⚠️ 모든 데이터 삭제                │
│                                     │
│   이 작업은 되돌릴 수 없습니다!     │
│                                     │
│   삭제될 항목:                      │
│   • 모든 캐릭터 (5개 슬롯)          │
│   • 명예의 전당 기록                │
│   • 업적                            │
│   • 통계                            │
│   • 설정                            │
│                                     │
│   확인하려면 "삭제합니다"를 입력:   │
│   ┌───────────────────────────┐     │
│   │                           │     │
│   └───────────────────────────┘     │
│                                     │
│        [ 취소 ] [ 삭제 ]            │
│                                     │
└─────────────────────────────────────┘
```

---

## 2. 성능 최적화

| 항목 | 현재 | 개선 방안 |
|------|------|----------|
| 상태 업데이트 | 매 틱마다 전체 rebuild | 변경된 부분만 업데이트 |
| 애니메이션 | Timer 기반 | AnimationController 사용 |
| 저장 | 자동 저장 빈번 | 변경 감지 후 디바운스 |

---

## 3. 테스트 전략

| 테스트 유형 | 대상 | 도구 |
|------------|------|------|
| 유닛 테스트 | 전투 계산, 스탯 계산 | flutter_test |
| 위젯 테스트 | UI 컴포넌트 | flutter_test |
| 통합 테스트 | 전체 게임 플로우 | integration_test |
| 밸런스 테스트 | 시뮬레이션 | 커스텀 도구 |

---

## 4. 튜토리얼 시스템

### 4.1 튜토리얼 흐름

```
첫 실행 감지 → 튜토리얼 시작 → 단계별 가이드 → 완료 보상 → 본 게임 시작
```

### 4.2 튜토리얼 단계

| 단계 | 내용 | 하이라이트 UI | 완료 조건 |
|------|------|--------------|----------|
| 1 | 게임 소개 | 전체 화면 | 탭하여 계속 |
| 2 | 캐릭터 스탯 설명 | 스탯 패널 | 스탯 패널 탭 |
| 3 | 전투 시스템 설명 | 전투 영역 | 첫 몬스터 처치 |
| 4 | 장비 시스템 설명 | 장비 패널 | 첫 장비 장착 |
| 5 | 스킬 사용 설명 | 스킬 바 | 첫 스킬 사용 |
| 6 | 경험치/레벨업 설명 | 경험치 바 | 레벨 2 달성 |
| 7 | 퀘스트 설명 | 퀘스트 패널 | 첫 퀘스트 확인 |
| 8 | 사망/부활 설명 | 안내 팝업 | 탭하여 계속 |
| 9 | 설정 및 기타 | 설정 버튼 | 설정 화면 열기 |
| 10 | 튜토리얼 완료 | 보상 팝업 | 보상 수령 |

### 4.3 튜토리얼 UI

```
┌─────────────────────────────────────┐
│  ┌─────────────────────────────┐    │
│  │    하이라이트된 영역        │◄───│ 이 부분을 탭해보세요!
│  └─────────────────────────────┘    │
│                                     │
│  ══════════════════════════════     │
│  스탯은 전투력에 직접 영향을        │
│  미칩니다. STR은 공격력,            │
│  CON은 HP에 영향을 줍니다.          │
│  ══════════════════════════════     │
│                                     │
│         [ 다음 ] [ 건너뛰기 ]       │
└─────────────────────────────────────┘
```

### 4.4 튜토리얼 완료 보상

| 보상 | 수량 |
|------|------|
| 골드 | 500 |
| 초보자 무기 | 1 |
| 초보자 방어구 | 1 |
| 경험치 물약 | 1 |

### 4.5 구현 방안

```dart
class TutorialService {
  int currentStep = 0;
  bool isCompleted = false;

  void startTutorial();
  void nextStep();
  void skipTutorial();
  void completeStep(int step);
  Widget? getHighlightWidget();
  String getCurrentMessage();
}

class TutorialOverlay extends StatelessWidget {
  final int step;
  final VoidCallback onNext;
  final VoidCallback onSkip;
}
```

### 4.6 튜토리얼 관련 파일

| 파일 | 역할 |
|------|------|
| `core/service/tutorial_service.dart` | **신규** - 튜토리얼 로직 |
| `features/game/widgets/tutorial_overlay.dart` | **신규** - 튜토리얼 UI |
| `data/tutorial_data.dart` | **신규** - 튜토리얼 텍스트 |

---
