create-ax-project 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/create.js +97 -40
- package/package.json +5 -2
- package/template/.claude/CLAUDE.md +0 -7
- package/template/.claude/commands/CLAUDE.md +0 -0
- package/template/.claude/hooks/CLAUDE.md +0 -0
- package/template/.claude/skills/ai-collaboration/CLAUDE.md +0 -0
- package/template/.claude/skills/auto-checkpoint/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/CLAUDE.md +0 -0
- package/template/.claude/skills/context-compression/prompts/CLAUDE.md +0 -0
- package/template/.claude/skills/output-validator/CLAUDE.md +0 -0
- package/template/.claude/skills/smart-handoff/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/CLAUDE.md +0 -0
- package/template/.claude/skills/stage-transition/prompts/CLAUDE.md +0 -0
- package/template/config/CLAUDE.md +0 -0
- package/template/scripts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/HANDOFF.md +0 -110
- package/template/stages/01-brainstorm/inputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/inputs/project_brief.md +0 -40
- package/template/stages/01-brainstorm/outputs/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/outputs/ideas.md +0 -159
- package/template/stages/01-brainstorm/outputs/requirements_analysis.md +0 -222
- package/template/stages/01-brainstorm/prompts/CLAUDE.md +0 -0
- package/template/stages/01-brainstorm/templates/CLAUDE.md +0 -0
- package/template/stages/02-research/HANDOFF.md +0 -158
- package/template/stages/02-research/outputs/CLAUDE.md +0 -0
- package/template/stages/02-research/outputs/feasibility_report.md +0 -176
- package/template/stages/02-research/outputs/tech_research.md +0 -403
- package/template/stages/02-research/prompts/CLAUDE.md +0 -0
- package/template/stages/03-planning/HANDOFF.md +0 -168
- package/template/stages/03-planning/outputs/CLAUDE.md +0 -0
- package/template/stages/03-planning/outputs/architecture.md +0 -400
- package/template/stages/03-planning/outputs/implementation.yaml +0 -209
- package/template/stages/03-planning/outputs/project_plan.md +0 -204
- package/template/stages/03-planning/outputs/tech_stack.md +0 -176
- package/template/stages/03-planning/prompts/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/HANDOFF.md +0 -165
- package/template/stages/04-ui-ux/outputs/CLAUDE.md +0 -0
- package/template/stages/04-ui-ux/outputs/design_system.md +0 -449
- package/template/stages/04-ui-ux/outputs/user_flows.md +0 -321
- package/template/stages/04-ui-ux/outputs/wireframes.md +0 -241
- package/template/stages/04-ui-ux/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/HANDOFF.md +0 -187
- package/template/stages/05-task-management/outputs/CLAUDE.md +0 -0
- package/template/stages/05-task-management/outputs/milestones.md +0 -253
- package/template/stages/05-task-management/outputs/sprint_plan.md +0 -203
- package/template/stages/05-task-management/outputs/tasks.md +0 -402
- package/template/stages/05-task-management/prompts/CLAUDE.md +0 -0
- package/template/stages/05-task-management/templates/CLAUDE.md +0 -0
- package/template/stages/06-implementation/HANDOFF.md +0 -184
- package/template/stages/06-implementation/prompts/CLAUDE.md +0 -0
- package/template/stages/07-refactoring/HANDOFF.md +0 -82
- package/template/stages/07-refactoring/outputs/refactoring_report.md +0 -102
- package/template/stages/07-refactoring/prompts/CLAUDE.md +0 -0
- package/template/stages/08-qa/HANDOFF.md +0 -114
- package/template/stages/08-qa/outputs/qa_report.md +0 -138
- package/template/stages/08-qa/prompts/CLAUDE.md +0 -0
- package/template/stages/09-testing/HANDOFF.md +0 -118
- package/template/stages/09-testing/outputs/test_report.md +0 -146
- package/template/stages/09-testing/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/HANDOFF.md +0 -141
- package/template/stages/10-deployment/prompts/CLAUDE.md +0 -0
- package/template/stages/10-deployment/templates/CLAUDE.md +0 -0
- package/template/state/templates/CLAUDE.md +0 -0
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
# 📋 Snake Game - 태스크 목록
|
|
2
|
-
|
|
3
|
-
> 생성일: 2026-01-21
|
|
4
|
-
> 스테이지: 05-task-management
|
|
5
|
-
> 프로젝트: snake-game
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 에픽 구조
|
|
10
|
-
|
|
11
|
-
| 에픽 | 설명 | 태스크 수 |
|
|
12
|
-
|------|------|----------|
|
|
13
|
-
| **E1: 프로젝트 설정** | 초기 환경 구성 | 4 |
|
|
14
|
-
| **E2: 게임 코어** | 핵심 게임 로직 | 6 |
|
|
15
|
-
| **E3: UI 컴포넌트** | React UI 구현 | 5 |
|
|
16
|
-
| **E4: 입력 처리** | 키보드/터치 | 3 |
|
|
17
|
-
| **E5: 확장 기능** | 레벨, 최고점수 | 3 |
|
|
18
|
-
| **E6: 테스트 & 배포** | 테스트, 빌드 | 4 |
|
|
19
|
-
|
|
20
|
-
**총 태스크**: 25개
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## E1: 프로젝트 설정
|
|
25
|
-
|
|
26
|
-
### TASK-001: Vite + React + TypeScript 프로젝트 초기화
|
|
27
|
-
- **에픽**: E1-프로젝트 설정
|
|
28
|
-
- **스토리**: 개발자로서, 프로젝트 기반을 구성하고 싶다
|
|
29
|
-
- **우선순위**: Must
|
|
30
|
-
- **예상 시간**: 10분
|
|
31
|
-
- **의존성**: 없음
|
|
32
|
-
- **담당 스테이지**: 06-implementation
|
|
33
|
-
- **완료 조건**:
|
|
34
|
-
- [ ] `npm create vite@latest` 실행
|
|
35
|
-
- [ ] 의존성 설치
|
|
36
|
-
- [ ] 개발 서버 실행 확인
|
|
37
|
-
|
|
38
|
-
### TASK-002: 타입 정의 (types/index.ts)
|
|
39
|
-
- **에픽**: E1-프로젝트 설정
|
|
40
|
-
- **스토리**: 개발자로서, 타입 안전한 코드를 작성하고 싶다
|
|
41
|
-
- **우선순위**: Must
|
|
42
|
-
- **예상 시간**: 15분
|
|
43
|
-
- **의존성**: TASK-001
|
|
44
|
-
- **담당 스테이지**: 06-implementation
|
|
45
|
-
- **완료 조건**:
|
|
46
|
-
- [ ] Point, Direction, GameStatus 정의
|
|
47
|
-
- [ ] GameState, GameAction 정의
|
|
48
|
-
- [ ] GameConfig 정의
|
|
49
|
-
|
|
50
|
-
### TASK-003: 상수 정의 (constants/config.ts)
|
|
51
|
-
- **에픽**: E1-프로젝트 설정
|
|
52
|
-
- **스토리**: 개발자로서, 게임 설정값을 한 곳에서 관리하고 싶다
|
|
53
|
-
- **우선순위**: Must
|
|
54
|
-
- **예상 시간**: 10분
|
|
55
|
-
- **의존성**: TASK-002
|
|
56
|
-
- **담당 스테이지**: 06-implementation
|
|
57
|
-
- **완료 조건**:
|
|
58
|
-
- [ ] GAME_CONFIG 정의
|
|
59
|
-
- [ ] COLORS 정의
|
|
60
|
-
- [ ] INITIAL_SNAKE, DIRECTION_VECTORS 정의
|
|
61
|
-
|
|
62
|
-
### TASK-004: 글로벌 스타일 (styles/index.css)
|
|
63
|
-
- **에픽**: E1-프로젝트 설정
|
|
64
|
-
- **스토리**: 개발자로서, 디자인 토큰을 CSS 변수로 정의하고 싶다
|
|
65
|
-
- **우선순위**: Must
|
|
66
|
-
- **예상 시간**: 15분
|
|
67
|
-
- **의존성**: TASK-001
|
|
68
|
-
- **담당 스테이지**: 06-implementation
|
|
69
|
-
- **완료 조건**:
|
|
70
|
-
- [ ] CSS 변수 (색상, 폰트, 스페이싱) 정의
|
|
71
|
-
- [ ] 기본 리셋 스타일
|
|
72
|
-
- [ ] 폰트 import (Press Start 2P)
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## E2: 게임 코어
|
|
77
|
-
|
|
78
|
-
### TASK-005: useGameLoop 훅 구현
|
|
79
|
-
- **에픽**: E2-게임 코어
|
|
80
|
-
- **스토리**: 개발자로서, 60fps 게임 루프를 관리하고 싶다
|
|
81
|
-
- **우선순위**: Must
|
|
82
|
-
- **예상 시간**: 20분
|
|
83
|
-
- **의존성**: TASK-002
|
|
84
|
-
- **담당 스테이지**: 06-implementation
|
|
85
|
-
- **완료 조건**:
|
|
86
|
-
- [ ] requestAnimationFrame 기반 루프
|
|
87
|
-
- [ ] deltaTime 계산
|
|
88
|
-
- [ ] isRunning 토글 기능
|
|
89
|
-
- [ ] cleanup 처리
|
|
90
|
-
|
|
91
|
-
### TASK-006: gameReducer 구현 (engine/gameReducer.ts)
|
|
92
|
-
- **에픽**: E2-게임 코어
|
|
93
|
-
- **스토리**: 개발자로서, 게임 상태를 예측 가능하게 관리하고 싶다
|
|
94
|
-
- **우선순위**: Must
|
|
95
|
-
- **예상 시간**: 30분
|
|
96
|
-
- **의존성**: TASK-002, TASK-003
|
|
97
|
-
- **담당 스테이지**: 06-implementation
|
|
98
|
-
- **완료 조건**:
|
|
99
|
-
- [ ] 초기 상태 정의
|
|
100
|
-
- [ ] START_GAME, PAUSE_GAME, RESUME_GAME 액션
|
|
101
|
-
- [ ] TICK 액션 (뱀 이동 로직)
|
|
102
|
-
- [ ] CHANGE_DIRECTION 액션
|
|
103
|
-
- [ ] GAME_OVER, RESTART 액션
|
|
104
|
-
|
|
105
|
-
### TASK-007: collision.ts 구현 (engine/collision.ts)
|
|
106
|
-
- **에픽**: E2-게임 코어
|
|
107
|
-
- **스토리**: 개발자로서, 충돌을 정확하게 감지하고 싶다
|
|
108
|
-
- **우선순위**: Must
|
|
109
|
-
- **예상 시간**: 15분
|
|
110
|
-
- **의존성**: TASK-002, TASK-003
|
|
111
|
-
- **담당 스테이지**: 06-implementation
|
|
112
|
-
- **완료 조건**:
|
|
113
|
-
- [ ] 벽 충돌 감지 (O(1))
|
|
114
|
-
- [ ] 자기 몸 충돌 감지 (O(n))
|
|
115
|
-
- [ ] 먹이 충돌 감지
|
|
116
|
-
|
|
117
|
-
### TASK-008: renderer.ts 구현 (engine/renderer.ts)
|
|
118
|
-
- **에픽**: E2-게임 코어
|
|
119
|
-
- **스토리**: 개발자로서, 게임을 Canvas에 렌더링하고 싶다
|
|
120
|
-
- **우선순위**: Must
|
|
121
|
-
- **예상 시간**: 25분
|
|
122
|
-
- **의존성**: TASK-002, TASK-003
|
|
123
|
-
- **담당 스테이지**: 06-implementation
|
|
124
|
-
- **완료 조건**:
|
|
125
|
-
- [ ] Canvas 초기화 (clear)
|
|
126
|
-
- [ ] 그리드 렌더링
|
|
127
|
-
- [ ] 뱀 렌더링 (머리/몸통 구분)
|
|
128
|
-
- [ ] 먹이 렌더링
|
|
129
|
-
|
|
130
|
-
### TASK-009: random.ts 구현 (utils/random.ts)
|
|
131
|
-
- **에픽**: E2-게임 코어
|
|
132
|
-
- **스토리**: 개발자로서, 랜덤 먹이 위치를 생성하고 싶다
|
|
133
|
-
- **우선순위**: Must
|
|
134
|
-
- **예상 시간**: 10분
|
|
135
|
-
- **의존성**: TASK-002
|
|
136
|
-
- **담당 스테이지**: 06-implementation
|
|
137
|
-
- **완료 조건**:
|
|
138
|
-
- [ ] generateRandomPosition 함수
|
|
139
|
-
- [ ] 뱀 몸통과 겹치지 않는 위치 생성
|
|
140
|
-
|
|
141
|
-
### TASK-010: GameEngine 컴포넌트 통합
|
|
142
|
-
- **에픽**: E2-게임 코어
|
|
143
|
-
- **스토리**: 개발자로서, 게임 로직과 렌더링을 통합하고 싶다
|
|
144
|
-
- **우선순위**: Must
|
|
145
|
-
- **예상 시간**: 30분
|
|
146
|
-
- **의존성**: TASK-005, TASK-006, TASK-007, TASK-008
|
|
147
|
-
- **담당 스테이지**: 06-implementation
|
|
148
|
-
- **완료 조건**:
|
|
149
|
-
- [ ] useReducer로 상태 관리
|
|
150
|
-
- [ ] useGameLoop으로 틱 처리
|
|
151
|
-
- [ ] CanvasLayer와 UIOverlay 조합
|
|
152
|
-
- [ ] 기본 게임 플레이 동작
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## E3: UI 컴포넌트
|
|
157
|
-
|
|
158
|
-
### TASK-011: CanvasLayer 컴포넌트
|
|
159
|
-
- **에픽**: E3-UI 컴포넌트
|
|
160
|
-
- **스토리**: 사용자로서, 게임 화면을 보고 싶다
|
|
161
|
-
- **우선순위**: Must
|
|
162
|
-
- **예상 시간**: 15분
|
|
163
|
-
- **의존성**: TASK-008
|
|
164
|
-
- **담당 스테이지**: 06-implementation
|
|
165
|
-
- **완료 조건**:
|
|
166
|
-
- [ ] Canvas ref 관리
|
|
167
|
-
- [ ] renderer 함수 호출
|
|
168
|
-
- [ ] 반응형 크기 처리
|
|
169
|
-
|
|
170
|
-
### TASK-012: ScoreBoard 컴포넌트
|
|
171
|
-
- **에픽**: E3-UI 컴포넌트
|
|
172
|
-
- **스토리**: 사용자로서, 현재 점수와 최고 점수를 보고 싶다
|
|
173
|
-
- **우선순위**: Must
|
|
174
|
-
- **예상 시간**: 15분
|
|
175
|
-
- **의존성**: TASK-004
|
|
176
|
-
- **담당 스테이지**: 06-implementation
|
|
177
|
-
- **완료 조건**:
|
|
178
|
-
- [ ] 현재 점수 표시
|
|
179
|
-
- [ ] 최고 점수 표시
|
|
180
|
-
- [ ] 점수 증가 애니메이션
|
|
181
|
-
|
|
182
|
-
### TASK-013: StartScreen 컴포넌트
|
|
183
|
-
- **에픽**: E3-UI 컴포넌트
|
|
184
|
-
- **스토리**: 사용자로서, 게임 시작 전 화면을 보고 싶다
|
|
185
|
-
- **우선순위**: Should
|
|
186
|
-
- **예상 시간**: 20분
|
|
187
|
-
- **의존성**: TASK-004
|
|
188
|
-
- **담당 스테이지**: 06-implementation
|
|
189
|
-
- **완료 조건**:
|
|
190
|
-
- [ ] 로고 표시 (네온 글로우)
|
|
191
|
-
- [ ] 최고 점수 표시
|
|
192
|
-
- [ ] Start 버튼
|
|
193
|
-
|
|
194
|
-
### TASK-014: GameOverModal 컴포넌트
|
|
195
|
-
- **에픽**: E3-UI 컴포넌트
|
|
196
|
-
- **스토리**: 사용자로서, 게임 오버 시 결과를 보고 싶다
|
|
197
|
-
- **우선순위**: Must
|
|
198
|
-
- **예상 시간**: 20분
|
|
199
|
-
- **의존성**: TASK-004
|
|
200
|
-
- **담당 스테이지**: 06-implementation
|
|
201
|
-
- **완료 조건**:
|
|
202
|
-
- [ ] 모달 오버레이
|
|
203
|
-
- [ ] 최종 점수 표시
|
|
204
|
-
- [ ] NEW HIGH SCORE 표시 (조건부)
|
|
205
|
-
- [ ] Play Again 버튼
|
|
206
|
-
|
|
207
|
-
### TASK-015: MobileControls 컴포넌트
|
|
208
|
-
- **에픽**: E3-UI 컴포넌트
|
|
209
|
-
- **스토리**: 모바일 사용자로서, 터치로 뱀을 조작하고 싶다
|
|
210
|
-
- **우선순위**: Should
|
|
211
|
-
- **예상 시간**: 25분
|
|
212
|
-
- **의존성**: TASK-004
|
|
213
|
-
- **담당 스테이지**: 06-implementation
|
|
214
|
-
- **완료 조건**:
|
|
215
|
-
- [ ] D-Pad 레이아웃
|
|
216
|
-
- [ ] 터치 이벤트 처리
|
|
217
|
-
- [ ] 반응형 표시 (모바일만)
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## E4: 입력 처리
|
|
222
|
-
|
|
223
|
-
### TASK-016: useKeyboard 훅 구현
|
|
224
|
-
- **에픽**: E4-입력 처리
|
|
225
|
-
- **스토리**: 사용자로서, 방향키로 뱀을 조작하고 싶다
|
|
226
|
-
- **우선순위**: Must
|
|
227
|
-
- **예상 시간**: 20분
|
|
228
|
-
- **의존성**: TASK-002
|
|
229
|
-
- **담당 스테이지**: 06-implementation
|
|
230
|
-
- **완료 조건**:
|
|
231
|
-
- [ ] Arrow Keys / WASD 매핑
|
|
232
|
-
- [ ] ESC/P 일시정지
|
|
233
|
-
- [ ] Enter/Space 재시작
|
|
234
|
-
- [ ] 역방향 입력 무시
|
|
235
|
-
|
|
236
|
-
### TASK-017: useSwipe 훅 구현
|
|
237
|
-
- **에픽**: E4-입력 처리
|
|
238
|
-
- **스토리**: 모바일 사용자로서, 스와이프로 뱀을 조작하고 싶다
|
|
239
|
-
- **우선순위**: Should
|
|
240
|
-
- **예상 시간**: 25분
|
|
241
|
-
- **의존성**: TASK-002
|
|
242
|
-
- **담당 스테이지**: 06-implementation
|
|
243
|
-
- **완료 조건**:
|
|
244
|
-
- [ ] touchstart/touchend 이벤트
|
|
245
|
-
- [ ] 스와이프 방향 감지 (threshold 50px)
|
|
246
|
-
- [ ] passive 리스너
|
|
247
|
-
|
|
248
|
-
### TASK-018: 입력 통합 (GameEngine)
|
|
249
|
-
- **에픽**: E4-입력 처리
|
|
250
|
-
- **스토리**: 개발자로서, 모든 입력을 통합 관리하고 싶다
|
|
251
|
-
- **우선순위**: Must
|
|
252
|
-
- **예상 시간**: 15분
|
|
253
|
-
- **의존성**: TASK-010, TASK-016, TASK-017
|
|
254
|
-
- **담당 스테이지**: 06-implementation
|
|
255
|
-
- **완료 조건**:
|
|
256
|
-
- [ ] useKeyboard 연결
|
|
257
|
-
- [ ] useSwipe 연결 (모바일)
|
|
258
|
-
- [ ] MobileControls 연결
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## E5: 확장 기능
|
|
263
|
-
|
|
264
|
-
### TASK-019: 레벨 시스템 구현
|
|
265
|
-
- **에픽**: E5-확장 기능
|
|
266
|
-
- **스토리**: 사용자로서, 점수가 올라가면 게임이 빨라지길 원한다
|
|
267
|
-
- **우선순위**: Should
|
|
268
|
-
- **예상 시간**: 20분
|
|
269
|
-
- **의존성**: TASK-006
|
|
270
|
-
- **담당 스테이지**: 06-implementation
|
|
271
|
-
- **완료 조건**:
|
|
272
|
-
- [ ] 레벨 상태 추가
|
|
273
|
-
- [ ] 50점마다 레벨업
|
|
274
|
-
- [ ] 레벨업 시 속도 증가
|
|
275
|
-
|
|
276
|
-
### TASK-020: useHighScore 훅 구현
|
|
277
|
-
- **에픽**: E5-확장 기능
|
|
278
|
-
- **스토리**: 사용자로서, 최고 점수가 저장되길 원한다
|
|
279
|
-
- **우선순위**: Should
|
|
280
|
-
- **예상 시간**: 15분
|
|
281
|
-
- **의존성**: TASK-002
|
|
282
|
-
- **담당 스테이지**: 06-implementation
|
|
283
|
-
- **완료 조건**:
|
|
284
|
-
- [ ] localStorage 저장/불러오기
|
|
285
|
-
- [ ] 최고 점수 갱신 함수
|
|
286
|
-
- [ ] 에러 핸들링 (try-catch)
|
|
287
|
-
|
|
288
|
-
### TASK-021: 일시정지 기능 구현
|
|
289
|
-
- **에픽**: E5-확장 기능
|
|
290
|
-
- **스토리**: 사용자로서, 게임을 일시정지하고 싶다
|
|
291
|
-
- **우선순위**: Should
|
|
292
|
-
- **예상 시간**: 15분
|
|
293
|
-
- **의존성**: TASK-006, TASK-016
|
|
294
|
-
- **담당 스테이지**: 06-implementation
|
|
295
|
-
- **완료 조건**:
|
|
296
|
-
- [ ] PAUSE/RESUME 상태 전환
|
|
297
|
-
- [ ] PauseOverlay 컴포넌트
|
|
298
|
-
- [ ] Resume/Quit 버튼
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
## E6: 테스트 & 배포
|
|
303
|
-
|
|
304
|
-
### TASK-022: 단위 테스트 작성
|
|
305
|
-
- **에픽**: E6-테스트 & 배포
|
|
306
|
-
- **스토리**: 개발자로서, 코드 품질을 보장하고 싶다
|
|
307
|
-
- **우선순위**: Should
|
|
308
|
-
- **예상 시간**: 30분
|
|
309
|
-
- **의존성**: E2 전체
|
|
310
|
-
- **담당 스테이지**: 09-testing
|
|
311
|
-
- **완료 조건**:
|
|
312
|
-
- [ ] collision.ts 테스트
|
|
313
|
-
- [ ] gameReducer 테스트
|
|
314
|
-
- [ ] random.ts 테스트
|
|
315
|
-
- [ ] 커버리지 80%+
|
|
316
|
-
|
|
317
|
-
### TASK-023: E2E 테스트 작성
|
|
318
|
-
- **에픽**: E6-테스트 & 배포
|
|
319
|
-
- **스토리**: 개발자로서, 전체 게임 플로우를 검증하고 싶다
|
|
320
|
-
- **우선순위**: Could
|
|
321
|
-
- **예상 시간**: 30분
|
|
322
|
-
- **의존성**: TASK-022
|
|
323
|
-
- **담당 스테이지**: 09-testing
|
|
324
|
-
- **완료 조건**:
|
|
325
|
-
- [ ] 게임 시작 → 플레이 → 게임오버 플로우
|
|
326
|
-
- [ ] 점수 증가 검증
|
|
327
|
-
- [ ] 모바일 터치 테스트
|
|
328
|
-
|
|
329
|
-
### TASK-024: 빌드 설정 및 최적화
|
|
330
|
-
- **에픽**: E6-테스트 & 배포
|
|
331
|
-
- **스토리**: 개발자로서, 최적화된 프로덕션 빌드를 원한다
|
|
332
|
-
- **우선순위**: Must
|
|
333
|
-
- **예상 시간**: 15분
|
|
334
|
-
- **의존성**: E3 전체
|
|
335
|
-
- **담당 스테이지**: 10-deployment
|
|
336
|
-
- **완료 조건**:
|
|
337
|
-
- [ ] Vite 빌드 설정
|
|
338
|
-
- [ ] 번들 크기 < 200KB
|
|
339
|
-
- [ ] 소스맵 설정
|
|
340
|
-
|
|
341
|
-
### TASK-025: 배포 (GitHub Pages / Vercel)
|
|
342
|
-
- **에픽**: E6-테스트 & 배포
|
|
343
|
-
- **스토리**: 사용자로서, 웹에서 게임을 플레이하고 싶다
|
|
344
|
-
- **우선순위**: Must
|
|
345
|
-
- **예상 시간**: 20분
|
|
346
|
-
- **의존성**: TASK-024
|
|
347
|
-
- **담당 스테이지**: 10-deployment
|
|
348
|
-
- **완료 조건**:
|
|
349
|
-
- [ ] 배포 플랫폼 선택
|
|
350
|
-
- [ ] CI/CD 설정
|
|
351
|
-
- [ ] 배포 URL 확인
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
|
-
## 태스크 요약
|
|
356
|
-
|
|
357
|
-
| 우선순위 | 개수 | 예상 시간 |
|
|
358
|
-
|---------|------|----------|
|
|
359
|
-
| Must | 17 | ~5시간 |
|
|
360
|
-
| Should | 7 | ~2시간 |
|
|
361
|
-
| Could | 1 | ~30분 |
|
|
362
|
-
| **총계** | **25** | **~7.5시간** |
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## 의존성 그래프 (간략)
|
|
367
|
-
|
|
368
|
-
```
|
|
369
|
-
TASK-001 (프로젝트 초기화)
|
|
370
|
-
│
|
|
371
|
-
├─► TASK-002 (타입 정의)
|
|
372
|
-
│ │
|
|
373
|
-
│ ├─► TASK-003 (상수 정의)
|
|
374
|
-
│ │ │
|
|
375
|
-
│ │ └─► TASK-006 (gameReducer)
|
|
376
|
-
│ │ │
|
|
377
|
-
│ │ └─► TASK-010 (GameEngine)
|
|
378
|
-
│ │
|
|
379
|
-
│ ├─► TASK-005 (useGameLoop) ──► TASK-010
|
|
380
|
-
│ │
|
|
381
|
-
│ ├─► TASK-007 (collision) ──► TASK-010
|
|
382
|
-
│ │
|
|
383
|
-
│ └─► TASK-008 (renderer) ──► TASK-011 (CanvasLayer)
|
|
384
|
-
│
|
|
385
|
-
└─► TASK-004 (글로벌 스타일)
|
|
386
|
-
│
|
|
387
|
-
├─► TASK-012 (ScoreBoard)
|
|
388
|
-
├─► TASK-013 (StartScreen)
|
|
389
|
-
├─► TASK-014 (GameOverModal)
|
|
390
|
-
└─► TASK-015 (MobileControls)
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
---
|
|
394
|
-
|
|
395
|
-
## ✅ 태스크 체크리스트
|
|
396
|
-
|
|
397
|
-
- [x] 에픽 구조 정의
|
|
398
|
-
- [x] 25개 태스크 분해
|
|
399
|
-
- [x] 우선순위 지정 (MoSCoW)
|
|
400
|
-
- [x] 의존성 맵핑
|
|
401
|
-
- [x] 예상 시간 산정
|
|
402
|
-
- [x] 담당 스테이지 지정
|
|
File without changes
|
|
File without changes
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
# HANDOFF: 06-implementation → 07-refactoring
|
|
2
|
-
|
|
3
|
-
> 생성일: 2026-01-21
|
|
4
|
-
> 프로젝트: snake-game
|
|
5
|
-
> 현재 스테이지: 06-implementation (완료)
|
|
6
|
-
> 다음 스테이지: 07-refactoring
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ✅ 완료된 작업
|
|
11
|
-
|
|
12
|
-
### Sprint 1: 프로젝트 설정 + 코어 로직
|
|
13
|
-
- [x] TASK-001: Vite + React + TS 프로젝트 초기화
|
|
14
|
-
- [x] TASK-002: 타입 정의 (types/index.ts)
|
|
15
|
-
- [x] TASK-003: 상수 정의 (constants/config.ts)
|
|
16
|
-
- [x] TASK-004: 글로벌 스타일 (styles/index.css)
|
|
17
|
-
- [x] TASK-005: useGameLoop 훅
|
|
18
|
-
- [x] TASK-006: gameReducer
|
|
19
|
-
- [x] TASK-007: collision.ts
|
|
20
|
-
- [x] TASK-008: renderer.ts
|
|
21
|
-
- [x] TASK-009: random.ts
|
|
22
|
-
- [x] TASK-016: useKeyboard 훅
|
|
23
|
-
|
|
24
|
-
### Sprint 2: UI 컴포넌트 + 통합
|
|
25
|
-
- [x] TASK-010: GameEngine 통합
|
|
26
|
-
- [x] TASK-011: CanvasLayer 컴포넌트
|
|
27
|
-
- [x] TASK-012: ScoreBoard 컴포넌트
|
|
28
|
-
- [x] TASK-013: StartScreen 컴포넌트
|
|
29
|
-
- [x] TASK-014: GameOverModal 컴포넌트
|
|
30
|
-
- [x] TASK-020: useHighScore 훅
|
|
31
|
-
- [x] TASK-021: 일시정지 기능
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 📁 생성된 파일
|
|
36
|
-
|
|
37
|
-
### 타입 및 상수
|
|
38
|
-
| 파일 | 설명 |
|
|
39
|
-
|------|------|
|
|
40
|
-
| `src/types/index.ts` | 모든 게임 타입 정의 |
|
|
41
|
-
| `src/constants/config.ts` | 게임 설정, 키 매핑, 색상 등 |
|
|
42
|
-
|
|
43
|
-
### 엔진
|
|
44
|
-
| 파일 | 설명 |
|
|
45
|
-
|------|------|
|
|
46
|
-
| `src/engine/gameReducer.ts` | 게임 상태 관리 리듀서 |
|
|
47
|
-
| `src/engine/collision.ts` | 충돌 감지 함수 |
|
|
48
|
-
| `src/engine/renderer.ts` | Canvas 렌더링 함수 |
|
|
49
|
-
|
|
50
|
-
### 훅
|
|
51
|
-
| 파일 | 설명 |
|
|
52
|
-
|------|------|
|
|
53
|
-
| `src/hooks/useGameLoop.ts` | requestAnimationFrame 기반 게임 루프 |
|
|
54
|
-
| `src/hooks/useKeyboard.ts` | 키보드 입력 처리 |
|
|
55
|
-
| `src/hooks/useHighScore.ts` | 최고 점수 localStorage 관리 |
|
|
56
|
-
|
|
57
|
-
### 유틸리티
|
|
58
|
-
| 파일 | 설명 |
|
|
59
|
-
|------|------|
|
|
60
|
-
| `src/utils/random.ts` | 랜덤 위치 생성 함수 |
|
|
61
|
-
|
|
62
|
-
### 컴포넌트
|
|
63
|
-
| 파일 | 설명 |
|
|
64
|
-
|------|------|
|
|
65
|
-
| `src/components/CanvasLayer.tsx` | Canvas 래퍼 컴포넌트 |
|
|
66
|
-
| `src/components/ScoreBoard.tsx` | 점수판 컴포넌트 |
|
|
67
|
-
| `src/components/StartScreen.tsx` | 시작 화면 오버레이 |
|
|
68
|
-
| `src/components/GameOverModal.tsx` | 게임 오버 모달 |
|
|
69
|
-
| `src/GameEngine.tsx` | 메인 게임 통합 컴포넌트 |
|
|
70
|
-
|
|
71
|
-
### 스타일
|
|
72
|
-
| 파일 | 설명 |
|
|
73
|
-
|------|------|
|
|
74
|
-
| `src/styles/index.css` | 글로벌 스타일 (Neon Arcade 테마) |
|
|
75
|
-
| `src/components/*.module.css` | 컴포넌트별 CSS Modules |
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## 🎮 구현된 기능
|
|
80
|
-
|
|
81
|
-
### 핵심 기능
|
|
82
|
-
- ✅ 방향키/WASD로 뱀 조작
|
|
83
|
-
- ✅ 먹이 먹으면 뱀 성장 + 점수 증가
|
|
84
|
-
- ✅ 벽/자기 몸 충돌 시 게임 오버
|
|
85
|
-
- ✅ 점수 표시 (현재 점수, 레벨, 최고 점수)
|
|
86
|
-
- ✅ 게임 재시작 기능
|
|
87
|
-
|
|
88
|
-
### 추가 기능
|
|
89
|
-
- ✅ 레벨 시스템 (점수에 따른 속도 증가)
|
|
90
|
-
- ✅ 최고 점수 localStorage 저장
|
|
91
|
-
- ✅ 일시정지/재개 (Space 키)
|
|
92
|
-
- ✅ Neon Arcade 테마 UI
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## 🏗️ 아키텍처
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
App.tsx
|
|
100
|
-
└── GameEngine.tsx (메인 컨트롤러)
|
|
101
|
-
├── useReducer(gameReducer) - 상태 관리
|
|
102
|
-
├── useGameLoop() - 게임 루프
|
|
103
|
-
├── useKeyboard() - 입력 처리
|
|
104
|
-
├── useHighScore() - 점수 저장
|
|
105
|
-
│
|
|
106
|
-
├── ScoreBoard - 점수 표시
|
|
107
|
-
├── CanvasLayer - 게임 렌더링
|
|
108
|
-
│ └── renderer.ts - Canvas 그리기
|
|
109
|
-
├── StartScreen - 시작 화면
|
|
110
|
-
└── GameOverModal - 게임 오버
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 🧪 검증 결과
|
|
116
|
-
|
|
117
|
-
| 항목 | 상태 | 비고 |
|
|
118
|
-
|------|------|------|
|
|
119
|
-
| TypeScript 컴파일 | ✅ 통과 | `npm run build` |
|
|
120
|
-
| 번들 크기 | ✅ 204KB | 목표 200KB 근접 |
|
|
121
|
-
| 게임 플레이 | ✅ 동작 | 모든 기능 정상 |
|
|
122
|
-
| 키보드 입력 | ✅ 동작 | Arrow, WASD, Space |
|
|
123
|
-
| 충돌 감지 | ✅ 동작 | 벽, 자기 몸, 먹이 |
|
|
124
|
-
| 점수 저장 | ✅ 동작 | localStorage |
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 🔧 07-refactoring 권장 작업
|
|
129
|
-
|
|
130
|
-
### 1. 코드 최적화
|
|
131
|
-
- [ ] `renderer.ts`: 불필요한 재렌더링 방지
|
|
132
|
-
- [ ] `gameReducer.ts`: 상태 업데이트 최적화
|
|
133
|
-
- [ ] 컴포넌트 메모이제이션 (React.memo)
|
|
134
|
-
|
|
135
|
-
### 2. 코드 품질
|
|
136
|
-
- [ ] ESLint 경고 해결
|
|
137
|
-
- [ ] 미사용 import 제거
|
|
138
|
-
- [ ] 상수 매직 넘버 추출
|
|
139
|
-
|
|
140
|
-
### 3. 성능 개선
|
|
141
|
-
- [ ] Canvas 더블 버퍼링 고려
|
|
142
|
-
- [ ] 게임 루프 최적화 (프레임 스킵 방지)
|
|
143
|
-
|
|
144
|
-
### 4. 모바일 지원 (Sprint 3)
|
|
145
|
-
- [ ] useSwipe 훅 구현
|
|
146
|
-
- [ ] MobileControls 컴포넌트 추가
|
|
147
|
-
- [ ] 터치 이벤트 처리
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## 🎯 마일스톤 상태
|
|
152
|
-
|
|
153
|
-
| 마일스톤 | 상태 | 체크포인트 |
|
|
154
|
-
|---------|------|-----------|
|
|
155
|
-
| M1: MVP 기반 | ✅ 완료 | - |
|
|
156
|
-
| M2: MVP 완성 | ✅ 완료 | `checkpoint_m2_mvp` |
|
|
157
|
-
| M3: 품질 개선 | ⏳ 진행 전 | - |
|
|
158
|
-
| M4: 배포 | ⏳ 진행 전 | - |
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## 🚀 다음 단계
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
# 07-refactoring 스테이지 실행
|
|
166
|
-
/run-stage 07-refactoring
|
|
167
|
-
|
|
168
|
-
# 또는
|
|
169
|
-
/refactor
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## 📊 AI 호출 기록
|
|
175
|
-
|
|
176
|
-
| AI | 호출 시간 | 작업 | 결과 |
|
|
177
|
-
|----|----------|------|------|
|
|
178
|
-
| ClaudeCode | 13:10~14:30 | Sprint 1+2 구현 | 성공 |
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
**생성자**: ClaudeCode
|
|
183
|
-
**검토자**: -
|
|
184
|
-
**승인**: 대기
|
|
File without changes
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# HANDOFF: 07-refactoring → 08-qa
|
|
2
|
-
|
|
3
|
-
> 생성일: 2026-01-21
|
|
4
|
-
> 프로젝트: snake-game
|
|
5
|
-
> 현재 스테이지: 07-refactoring (완료)
|
|
6
|
-
> 다음 스테이지: 08-qa
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ✅ 완료된 작업
|
|
11
|
-
|
|
12
|
-
- [x] ESLint 오류 수정 (useGameLoop)
|
|
13
|
-
- [x] Ref 패턴으로 stale closure 문제 해결
|
|
14
|
-
- [x] 코드 품질 분석 완료
|
|
15
|
-
- [x] 빌드 검증 완료
|
|
16
|
-
- [x] 리팩토링 보고서 작성
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 📁 생성/수정된 파일
|
|
21
|
-
|
|
22
|
-
| 파일 | 변경 유형 | 설명 |
|
|
23
|
-
|------|----------|------|
|
|
24
|
-
| `src/hooks/useGameLoop.ts` | 수정 | Ref 패턴으로 리팩토링 |
|
|
25
|
-
| `outputs/refactoring_report.md` | 생성 | 리팩토링 보고서 |
|
|
26
|
-
| `HANDOFF.md` | 생성 | 인계 문서 |
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 🔍 코드 품질 상태
|
|
31
|
-
|
|
32
|
-
| 항목 | 상태 |
|
|
33
|
-
|------|------|
|
|
34
|
-
| ESLint | ✅ 0 errors |
|
|
35
|
-
| TypeScript | ✅ 컴파일 성공 |
|
|
36
|
-
| 빌드 | ✅ 성공 |
|
|
37
|
-
| 번들 크기 | ✅ 204KB (목표 200KB 근접) |
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 🎯 08-qa 권장 테스트 항목
|
|
42
|
-
|
|
43
|
-
### 기능 테스트
|
|
44
|
-
- [ ] 게임 시작/재시작
|
|
45
|
-
- [ ] 방향키 입력 (Arrow, WASD)
|
|
46
|
-
- [ ] 먹이 먹기 및 성장
|
|
47
|
-
- [ ] 벽 충돌 게임 오버
|
|
48
|
-
- [ ] 자기 몸 충돌 게임 오버
|
|
49
|
-
- [ ] 점수 증가 및 표시
|
|
50
|
-
- [ ] 레벨업 및 속도 증가
|
|
51
|
-
- [ ] 일시정지/재개
|
|
52
|
-
- [ ] 최고 점수 저장/불러오기
|
|
53
|
-
|
|
54
|
-
### 엣지 케이스
|
|
55
|
-
- [ ] 빠른 연속 방향 전환
|
|
56
|
-
- [ ] 벽 바로 앞에서 방향 전환
|
|
57
|
-
- [ ] 게임 오버 직후 즉시 재시작
|
|
58
|
-
- [ ] 탭 전환 후 게임 상태
|
|
59
|
-
|
|
60
|
-
### 브라우저 호환성
|
|
61
|
-
- [ ] Chrome
|
|
62
|
-
- [ ] Firefox
|
|
63
|
-
- [ ] Safari
|
|
64
|
-
- [ ] Edge
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 🚀 다음 단계
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
# 08-qa 스테이지 실행
|
|
72
|
-
/run-stage 08-qa
|
|
73
|
-
|
|
74
|
-
# 또는
|
|
75
|
-
/qa
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
**생성자**: ClaudeCode
|
|
81
|
-
**검토자**: -
|
|
82
|
-
**승인**: 대기
|