- README: 프로젝트 설명, 기능, 기술 스택, 빌드, 구조, 라이선스 - ARCHITECTURE: 계층 다이어그램, 데이터 흐름, DI, 수익화, 저장, 테스트
104 lines
4.2 KiB
Markdown
104 lines
4.2 KiB
Markdown
# Ascii Never Die
|
|
|
|
Progress Quest 6.4의 핵심 메커니즘을 기반으로, "디지털 판타지" 세계관과 확장된 시스템으로 재구성한 오프라인 싱글플레이어 방치형 RPG.
|
|
|
|
## 스크린샷
|
|
|
|
<!-- TODO: 스크린샷 추가 -->
|
|
| 타이틀 | 캐릭터 생성 | 게임 진행 |
|
|
|--------|-------------|-----------|
|
|
|  |  |  |
|
|
|
|
| 아레나 | 명예의 전당 | 설정 |
|
|
|--------|-------------|------|
|
|
|  |  |  |
|
|
|
|
## 주요 기능
|
|
|
|
- **6개 화면** -- 타이틀/세이브 선택, 캐릭터 생성(3d6 스탯 롤), 게임 진행(장비/인벤토리/퀘스트/스킬/전투로그/스토리), 아레나 PvP, 명예의 전당, 설정
|
|
- **완전 오프라인** -- 네트워크 불필요. 모든 게임 데이터와 세이브가 로컬에 저장
|
|
- **수익화** -- AdMob 리워드/인터스티셜 광고 + IAP 광고 제거/프리미엄
|
|
- **다국어 지원** -- 한국어, 영어, 일본어 (앱 UI + 게임 데이터)
|
|
- **ASCII 아트 애니메이션** -- Canvas 기반 전투/탐험/마을 씬, 종족별 캐릭터 프레임
|
|
- **보안** -- 세이브 파일 HMAC-SHA256 무결성 검증, IAP 영수증 RSA 서명 검증
|
|
|
|
## 기술 스택
|
|
|
|
| 구분 | 기술 |
|
|
|------|------|
|
|
| 프레임워크 | Flutter 3.x / Dart ^3.9.2 |
|
|
| 상태 관리 | Stream + 직접 관리 |
|
|
| 코드 생성 | freezed + json_serializable |
|
|
| DI | GetIt (서비스 로케이터) |
|
|
| 광고 | google_mobile_ads 7.x |
|
|
| 인앱결제 | in_app_purchase 3.x |
|
|
| 보안 저장 | flutter_secure_storage, crypto (HMAC), pointycastle (RSA) |
|
|
| 오디오 | just_audio |
|
|
| 폰트 | JetBrainsMono (ASCII), PressStart2P (레트로 UI) |
|
|
|
|
## 빌드 및 실행
|
|
|
|
```bash
|
|
# 의존성 설치
|
|
flutter pub get
|
|
|
|
# 코드 생성 (freezed/json_serializable)
|
|
dart run build_runner build --delete-conflicting-outputs
|
|
|
|
# 실행 (-d macos, -d chrome, -d android 등)
|
|
flutter run
|
|
|
|
# 검증
|
|
dart format --set-exit-if-changed .
|
|
flutter analyze
|
|
flutter test
|
|
```
|
|
|
|
## 프로젝트 구조
|
|
|
|
```
|
|
lib/
|
|
├── main.dart # 앱 진입점
|
|
├── data/ # 정적 게임 데이터 (종족, 직업, 스킬, 포션, 스토리)
|
|
├── l10n/ # 앱 UI 다국어 리소스 (arb)
|
|
└── src/
|
|
├── app.dart # MaterialApp 설정
|
|
├── core/
|
|
│ ├── engine/ # 게임 루프, 전투, 보상, 스킬 등 30개 서비스
|
|
│ ├── model/ # GameState, 장비, 스킬, 전투 등 데이터 모델
|
|
│ ├── infrastructure/ # AdMob, IAP 외부 서비스 구현
|
|
│ ├── di/ # GetIt 서비스 로케이터 + 인터페이스
|
|
│ ├── audio/ # BGM/SFX 오디오 서비스
|
|
│ ├── storage/ # 세이브/설정/통계 저장소
|
|
│ └── util/ # RNG, 밸런스 상수, PQ 로직 헬퍼
|
|
├── features/
|
|
│ ├── front/ # 타이틀/세이브 선택
|
|
│ ├── new_character/ # 캐릭터 생성
|
|
│ ├── game/ # 메인 게임 (탭별 페이지 + 위젯)
|
|
│ ├── arena/ # 아레나 PvP
|
|
│ ├── hall_of_fame/ # 명예의 전당
|
|
│ └── settings/ # 설정
|
|
└── shared/ # 테마, 레트로 위젯, ASCII 애니메이션
|
|
|
|
example/pq/ # Delphi 원본 소스 (참조용)
|
|
test/ # 단위/위젯/회귀 테스트 (25개 파일)
|
|
```
|
|
|
|
아키텍처 상세는 [ARCHITECTURE.md](ARCHITECTURE.md) 참조.
|
|
|
|
## 릴리즈 이력
|
|
|
|
| 버전 | 날짜 | 주요 내용 |
|
|
|------|------|-----------|
|
|
| 1.1.0 | 2026-03-30 | IAP RSA 검증, HMAC 세이브, CI, 테스트 105개 추가 |
|
|
| 1.0.1 | 2026-03-19 | 초기 릴리즈 (Google Play 내부 테스트) |
|
|
|
|
전체 변경 이력은 [CHANGELOG.md](CHANGELOG.md) 참조.
|
|
|
|
## 라이선스
|
|
|
|
비공개 프로젝트. 무단 배포 금지.
|
|
|
|
Progress Quest 원본 소스(`example/pq/`)는 참조용으로만 포함되어 있습니다.
|
|
폰트 라이선스: JetBrains Mono (SIL OFL 1.1), Press Start 2P (SIL OFL 1.1).
|