Phaser 3 테트리스 개발 스킬
MCP 활용 (필수!)
Context7 - Phaser API 조회
Phaser API 사용 전 반드시 context7로 최신 문서를 조회한다:
- resolve-library-id: "phaser"로 라이브러리 확인
- get-library-docs: 필요한 API 문서 조회
예시 상황:
- Graphics API 사용법 불확실 → context7 조회
- Input.Keyboard 사용법 불확실 → context7 조회
- Time.addEvent 사용법 불확실 → context7 조회
Sequential-thinking - 복잡한 로직
게임 로직 설계 전 sequential-thinking으로 단계별 계획 수립:
- 회전 시스템 설계
- 충돌 검사 로직
- 라인 클리어 알고리즘
테트리스 가이드라인 (Tetris Guideline)
공식 테트리스는 표준 규칙을 따른다. 아래 원칙을 준수하여 구현한다.
1. 플레이필드 (Playfield)
- 표준 크기: 10열 x 20행 (보이는 영역)
- 버퍼 영역: 상단 2-4행 (블록 스폰용, 보이지 않음)
- 셀 크기: 자유롭게 설정 (권장 20-30px)
2. 테트로미노 7종
| 이름 |
모양 |
색상 (권장) |
| I |
1x4 직선 |
하늘색 (Cyan) |
| O |
2x2 정사각형 |
노란색 (Yellow) |
| T |
T자 모양 |
보라색 (Purple) |
| S |
S자 모양 |
초록색 (Green) |
| Z |
Z자 모양 |
빨간색 (Red) |
| J |
J자 모양 |
파란색 (Blue) |
| L |
L자 모양 |
주황색 (Orange) |
3. SRS (Super Rotation System)
테트리스 공식 회전 시스템:
- 모든 블록은 중심점을 기준으로 시계방향 90도 회전
- I, O 블록은 그리드 교차점이 회전 중심
- J, L, S, T, Z 블록은 블록 중앙이 회전 중심
- 4가지 회전 상태: 0(스폰), R(시계1회), 2(180도), L(반시계1회)
참고: https://tetris.wiki/Super_Rotation_System
4. Wall Kick (벽 차기)
회전 시 충돌하면 자동으로 위치 조정 시도:
- 기본 회전 위치 시도
- 실패 시 미리 정의된 오프셋 위치들을 순차 시도
- 모든 오프셋 실패 시 회전 취소
J, L, S, T, Z 블록 킥 테이블 (0→R 예시):
(0,0) → (-1,0) → (-1,+1) → (0,-2) → (-1,-2)
I 블록은 별도의 킥 테이블 사용
참고: https://harddrop.com/wiki/SRS
5. 7-Bag Randomizer
공정한 블록 분배 시스템:
- 7종 블록을 한 세트(가방)로 묶음
- 가방 내 블록을 무작위 순서로 제공
- 가방이 비면 새 가방 생성
- 효과: 최대 12개 블록 내에 모든 종류 등장 보장
6. 스폰 규칙
- 스폰 위치: 상단 중앙 (행 21-22, 보이는 영역 위)
- 스폰 방향: 수평 (flat-side up)
- 스폰 즉시 충돌 시: 게임오버
7. Lock Delay (고정 지연)
- 바닥/블록에 착지 후 일정 시간 조작 가능
- 이동/회전 시 타이머 리셋 (무한 스핀 방지 위해 횟수 제한 권장)
- 권장: 0.5초, 최대 15회 리셋
8. 점수 시스템
| 액션 |
기본 점수 |
| 1줄 클리어 (Single) |
100 |
| 2줄 클리어 (Double) |
300 |
| 3줄 클리어 (Triple) |
500 |
| 4줄 클리어 (Tetris) |
800 |
| T-Spin |
보너스 추가 |
점수 = 기본점수 x 레벨
Phaser 3 구현 가이드
기본 설정 원칙
- type: Phaser.AUTO (WebGL 우선, Canvas 폴백)
- scene: 단일 씬 또는 다중 씬 (메뉴, 게임, 게임오버)
- 반드시 context7로 최신 config 옵션 확인
렌더링 원칙
- Graphics 객체: 한 번 생성, clear() 후 재사용
- update()에서 new 키워드 사용 금지
- 변경 시에만 다시 그리기 (needsRedraw 플래그)
입력 처리 원칙
- createCursorKeys(): 방향키 처리
- addKey(): 개별 키 추가 (Space, R 등)
- JustDown(): 키 반복 방지
타이머 원칙
- Time.addEvent(): 자동 낙하 타이머
- delay 속성 동적 변경으로 속도 조절
성능 원칙
- 60fps 유지 목표
- 객체 풀링 고려 (파티클 등)
- requestAnimationFrame 자동 관리됨
구현 순서 권장
- 기본 구조: Phaser 설정, 캔버스, 전역 변수
- 보드: 그리드 배열, 렌더링 함수
- 테트로미노: 7종 정의, 스폰, 렌더링
- 이동: 좌우 이동, 충돌 검사
- 회전: SRS 회전, Wall Kick
- 낙하: 자동 낙하, 소프트/하드 드롭
- 고정: Lock Delay, 보드에 블록 고정
- 라인 클리어: 완성 줄 감지, 제거, 위 블록 낙하
- 점수/레벨: 점수 계산, 레벨업, 속도 증가
- 게임오버: 감지, 표시, 재시작
- UI: 점수, 레벨, 다음 블록, Hold
참고 자료
1---2name: phaser-tetris3description: Phaser 3 테트리스 게임 개발 스킬. 테트리스 가이드라인(SRS, Wall Kick, 7-Bag)을 준수하여 구현한다. context7 MCP로 최신 Phaser API를 조회하고, 공식 테트리스 위키를 참고한다.4---5
6# Phaser 3 테트리스 개발 스킬
7
8## MCP 활용 (필수!)
9
10### Context7 - Phaser API 조회
11Phaser API 사용 전 반드시 context7로 최신 문서를 조회한다:
12- resolve-library-id: "phaser"로 라이브러리 확인
13- get-library-docs: 필요한 API 문서 조회
14
15예시 상황:
16- Graphics API 사용법 불확실 → context7 조회
17- Input.Keyboard 사용법 불확실 → context7 조회
18- Time.addEvent 사용법 불확실 → context7 조회
19
20### Sequential-thinking - 복잡한 로직
21게임 로직 설계 전 sequential-thinking으로 단계별 계획 수립:
22- 회전 시스템 설계
23- 충돌 검사 로직
24- 라인 클리어 알고리즘
25
26
27## 테트리스 가이드라인 (Tetris Guideline)
28
29공식 테트리스는 표준 규칙을 따른다. 아래 원칙을 준수하여 구현한다.
30
31### 1. 플레이필드 (Playfield)
32- 표준 크기: 10열 x 20행 (보이는 영역)
33- 버퍼 영역: 상단 2-4행 (블록 스폰용, 보이지 않음)
34- 셀 크기: 자유롭게 설정 (권장 20-30px)
35
36### 2. 테트로미노 7종
37| 이름 | 모양 | 색상 (권장) |
38|------|------|-------------|
39| I | 1x4 직선 | 하늘색 (Cyan) |
40| O | 2x2 정사각형 | 노란색 (Yellow) |
41| T | T자 모양 | 보라색 (Purple) |
42| S | S자 모양 | 초록색 (Green) |
43| Z | Z자 모양 | 빨간색 (Red) |
44| J | J자 모양 | 파란색 (Blue) |
45| L | L자 모양 | 주황색 (Orange) |
46
47### 3. SRS (Super Rotation System)
48테트리스 공식 회전 시스템:
49- 모든 블록은 중심점을 기준으로 시계방향 90도 회전
50- I, O 블록은 그리드 교차점이 회전 중심
51- J, L, S, T, Z 블록은 블록 중앙이 회전 중심
52- 4가지 회전 상태: 0(스폰), R(시계1회), 2(180도), L(반시계1회)
53
54참고: https://tetris.wiki/Super_Rotation_System
55
56### 4. Wall Kick (벽 차기)
57회전 시 충돌하면 자동으로 위치 조정 시도:
58- 기본 회전 위치 시도
59- 실패 시 미리 정의된 오프셋 위치들을 순차 시도
60- 모든 오프셋 실패 시 회전 취소
61
62J, L, S, T, Z 블록 킥 테이블 (0→R 예시):
63(0,0) → (-1,0) → (-1,+1) → (0,-2) → (-1,-2)
64
65I 블록은 별도의 킥 테이블 사용
66
67참고: https://harddrop.com/wiki/SRS
68
69### 5. 7-Bag Randomizer
70공정한 블록 분배 시스템:
71- 7종 블록을 한 세트(가방)로 묶음
72- 가방 내 블록을 무작위 순서로 제공
73- 가방이 비면 새 가방 생성
74- 효과: 최대 12개 블록 내에 모든 종류 등장 보장
75
76### 6. 스폰 규칙
77- 스폰 위치: 상단 중앙 (행 21-22, 보이는 영역 위)
78- 스폰 방향: 수평 (flat-side up)
79- 스폰 즉시 충돌 시: 게임오버
80
81### 7. Lock Delay (고정 지연)
82- 바닥/블록에 착지 후 일정 시간 조작 가능
83- 이동/회전 시 타이머 리셋 (무한 스핀 방지 위해 횟수 제한 권장)
84- 권장: 0.5초, 최대 15회 리셋
85
86### 8. 점수 시스템
87| 액션 | 기본 점수 |
88|------|-----------|
89| 1줄 클리어 (Single) | 100 |
90| 2줄 클리어 (Double) | 300 |
91| 3줄 클리어 (Triple) | 500 |
92| 4줄 클리어 (Tetris) | 800 |
93| T-Spin | 보너스 추가 |
94
95점수 = 기본점수 x 레벨
96
97
98## Phaser 3 구현 가이드
99
100### 기본 설정 원칙
101- type: Phaser.AUTO (WebGL 우선, Canvas 폴백)
102- scene: 단일 씬 또는 다중 씬 (메뉴, 게임, 게임오버)
103- 반드시 context7로 최신 config 옵션 확인
104
105### 렌더링 원칙
106- Graphics 객체: 한 번 생성, clear() 후 재사용
107- update()에서 new 키워드 사용 금지
108- 변경 시에만 다시 그리기 (needsRedraw 플래그)
109
110### 입력 처리 원칙
111- createCursorKeys(): 방향키 처리
112- addKey(): 개별 키 추가 (Space, R 등)
113- JustDown(): 키 반복 방지
114
115### 타이머 원칙
116- Time.addEvent(): 자동 낙하 타이머
117- delay 속성 동적 변경으로 속도 조절
118
119### 성능 원칙
120- 60fps 유지 목표
121- 객체 풀링 고려 (파티클 등)
122- requestAnimationFrame 자동 관리됨
123
124
125## 구현 순서 권장
126
1271. 기본 구조: Phaser 설정, 캔버스, 전역 변수
1282. 보드: 그리드 배열, 렌더링 함수
1293. 테트로미노: 7종 정의, 스폰, 렌더링
1304. 이동: 좌우 이동, 충돌 검사
1315. 회전: SRS 회전, Wall Kick
1326. 낙하: 자동 낙하, 소프트/하드 드롭
1337. 고정: Lock Delay, 보드에 블록 고정
1348. 라인 클리어: 완성 줄 감지, 제거, 위 블록 낙하
1359. 점수/레벨: 점수 계산, 레벨업, 속도 증가
13610. 게임오버: 감지, 표시, 재시작
13711. UI: 점수, 레벨, 다음 블록, Hold
138
139
140## 참고 자료
141
142- Tetris Guideline: https://tetris.wiki/Tetris_Guideline
143- SRS 상세: https://tetris.wiki/Super_Rotation_System
144- Wall Kick: https://harddrop.com/wiki/SRS
145- Phaser 3 공식: https://phaser.io/phaser3