docs: CLAUDE.md 및 감사 보고서 업데이트

- CLAUDE.md 아키텍처 문서 최신화
- 감사 보고서 수정 사항 반영
This commit is contained in:
JiWoong Sul
2026-02-23 15:49:46 +09:00
parent e13e8032d9
commit dadd25837d
2 changed files with 175 additions and 151 deletions

View File

@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## 프로젝트 개요
Askii Never Die는 Progress Quest 6.4 (Delphi 원본)를 Flutter로 100% 동일하게 복제하는 오프라인 싱글플레이어 RPG입니다. 네트워크 기능은 모두 제외되며, 원본 알고리즘과 데이터를 그대로 유지해야 합니다.
Askii Never Die는 Progress Quest 6.4의 핵심 메커니즘을 기반으로, 독자적 세계관("디지털 판타지")과 확장된 시스템으로 재구성한 오프라인 싱글플레이어 방치형 RPG입니다. 네트워크 기능은 제외됩니다.
## 빌드 및 실행
@@ -27,29 +27,53 @@ flutter test
```
lib/
├── main.dart # 앱 진입점
├── data/pq_config_data.dart # PQ 정적 데이터 (Config.dfm 추출)
├── main.dart # 앱 진입점
├── data/ # 정적 데이터 (Config.dfm 추출 + 확장)
│ ├── pq_config_data.dart # PQ 원본 정적 데이터
│ ├── class_data.dart # 직업 데이터
│ ├── race_data.dart # 종족 데이터
│ ├── skill_data.dart # 스킬 데이터
│ ├── potion_data.dart # 포션 데이터
│ ├── story_data.dart # 스토리 데이터
│ └── game_text_l10n.dart # 게임 텍스트 번역
├── l10n/ # 앱 UI 다국어 리소스 (arb)
└── src/
├── app.dart # MaterialApp 설정
├── app.dart # MaterialApp 설정
├── core/
│ ├── engine/ # 게임 루프 및 진행 로직
│ │ ├── progress_loop.dart # 타이머 기반 메인 루프 (원본 200ms)
│ │ ├── progress_service.dart # 틱 처리, 경험치/레벨업 로직
│ │ ├── game_mutations.dart # 상태 변경 함수
│ │ ── reward_service.dart # 보상 처리
├── model/
│ │ ├── game_state.dart # 핵심 상태: Traits, Stats, Inventory, Equipment, SpellBook, ProgressState, QueueState
│ │ ├── pq_config.dart # Config 데이터 접근
│ │ ├── equipment_slot.dart # 장비 슬롯 정의
│ │ ── save_data.dart # 저장 데이터 구조
├── storage/ # 세이브 파일 처리
└── util/
├── deterministic_random.dart # 결정론적 RNG (재현 가능)
── pq_logic.dart # 원본 로직 포팅 (odds, randSign 등)
└── roman.dart # 로마 숫자 변환
└── features/
├── front/front_screen.dart # 임시 프론트 화면
── game/game_session_controller.dart # 게임 세션 관리
│ ├── engine/ # 게임 루프 및 진행 로직
│ │ ├── progress_loop.dart # 타이머 기반 메인 루프
│ │ ├── progress_service.dart # 틱 처리, 경험치/레벨업 로직
│ │ ├── game_mutations.dart # 상태 변경 함수
│ │ ── reward_service.dart # 보상 처리
│ ├── combat_calculator.dart # 전투 계산
│ │ ├── combat_tick_service.dart # 전투 틱 처리
│ │ ├── arena_service.dart # 아레나 시스템
│ │ ├── skill_service.dart # 스킬 시스템
│ │ ── item_service.dart # 아이템 처리
│ ├── potion_service.dart # 포션 시스템
│ ├── shop_service.dart # 상점 시스템
├── story_service.dart # 스토리 진행
── ... # 기타 서비스
├── model/ # 게임 상태 및 데이터 모델
│ ├── animation/ # ASCII 애니메이션 데이터/렌더링
├── audio/ # 오디오 서비스
── storage/ # 세이브/설정 저장소
│ ├── notification/ # 알림 서비스
│ ├── constants/ # 상수 정의
│ ├── l10n/ # 게임 데이터 번역 유틸
│ └── util/ # 유틸리티 (RNG, 로직 헬퍼 등)
├── features/
│ ├── front/ # 타이틀/세이브 선택 화면
│ ├── new_character/ # 캐릭터 생성 화면
│ ├── game/ # 게임 진행 화면 (메인)
│ │ ├── controllers/ # 전투 로그, 오디오 컨트롤러
│ │ ├── managers/ # 통계, 부활, 속도 부스트 등
│ │ ├── pages/ # 탭별 페이지 (장비, 인벤토리, 퀘스트 등)
│ │ └── widgets/ # UI 위젯
│ ├── arena/ # 아레나 전투 화면
│ ├── hall_of_fame/ # 명예의 전당
│ └── settings/ # 설정 화면
└── shared/ # 공통 테마/위젯
example/pq/ # Delphi 원본 소스 (참조용, 빌드 대상 아님)
test/ # 단위/위젯 테스트
@@ -69,10 +93,9 @@ test/ # 단위/위젯 테스트
## 핵심 규칙
### 원본 충실도
- `example/pq/` 내 Delphi 소스의 알고리즘/데이터를 100% 동일하게 포팅
- 원본 로직 변경 필요 시 반드시 사용자 승인 필요
- 새로운 기능, 값, 처리 로직 추가 금지 (디버깅 로그 예외)
### 원본 참조 정책
- `example/pq/`는 참조용으로 유지
- 원본 알고리즘은 참고하되 독자적 확장/수정 허용
### 데이터 관리
- 정적 데이터(몬스터, 아이템, 주문 등)는 `Config.dfm`에서 추출하여 JSON/Dart const로 관리
@@ -87,11 +110,13 @@ test/ # 단위/위젯 테스트
- SRP(Single Responsibility Principle) 준수
### 화면 구성
- 2개 화면만 사용: 캐릭터 생성 화면, 게임 진행 화면
- 주요 화면: 프론트, 캐릭터 생성, 게임 진행, 아레나, 명예의 전당, 설정
- 화면 내 요소는 위젯 단위로 분리
## 원본 소스 참조 (example/pq/)
> 참고용으로만 사용. 원본 로직을 그대로 따를 의무는 없음.
| 파일 | 핵심 함수/라인 | 역할 |
|------|----------------|------|
| `Main.pas:523-1040` | `MonsterTask` | 전투/전리품/레벨업 |
@@ -105,7 +130,6 @@ test/ # 단위/위젯 테스트
- `pubspec.yaml` 의존성 변경
- 플랫폼 빌드 설정 (Android/iOS/desktop)
- 네트워크 접근 도입
- 원본 데이터/알고리즘 수정
- 대규모 파일 삭제 또는 구조 변경
## 커밋 규칙