1. 배경
4부는 모바일에서 터치로 블록을 조작할 수 있도록 구현한 과정이다.
2. 터치 조작 방식
스와이프 방향에 따라 블록을 움직이는 방식으로 구현했다.
- 왼쪽 스와이프 → 블록 왼쪽 이동
- 오른쪽 스와이프 → 블록 오른쪽 이동
- 아래 스와이프 → 하드 드롭
- 위 스와이프 → 블록 회전
- 제자리 탭 → 블록 회전
3. 구현 코드
function handleTouchEnd(e) {
const endX = e.changedTouches[0].clientX
const endY = e.changedTouches[0].clientY
const dx = endX - touchStartX
const dy = endY - touchStartY
// 탭 감지
if (Math.abs(dx) < 10 && Math.abs(dy) < 10) {
rotate()
playSfxRotate()
return
}
// 너무 짧은 스와이프 무시
const THRESHOLD = 30
if (Math.abs(dx) < THRESHOLD && Math.abs(dy) < THRESHOLD) return
// 방향 판단
if (Math.abs(dx) > Math.abs(dy)) {
dx < 0 ? moveLeft() : moveRight()
playSfxMove()
} else {
if (dy > 0) {
hardDrop()
playSfxDrop()
} else {
rotate()
playSfxRotate()
}
}
}
4. 배운 개념 — 탭 vs 스와이프 구분
threshold를 두 단계로 나눴다.
- 10px 미만 → 탭으로 인식 → 회전
- 30px 미만 → 너무 짧은 스와이프 → 무시
- 30px 이상 → 방향 판단 → 이동
이 구조 덕분에 손이 살짝 떨려도 오작동하지 않는다.
5. 배운 개념 — includes 패턴
if (['ArrowLeft', 'ArrowRight', 'ArrowDown'].includes(e.key)) {
stopDas()
}
3개 조건을 배열로 만들어서 includes로 체크하면 switch문보다 훨씬 간결하다.
6. 마무리
Claude Code가 가이드대로 구현했고 코드 분석하면서 전부 이해가 됐다.
완성된 테트리스는 여기서 플레이할 수 있다 → Tetris Retro
'프로젝트 > 레트로 테트리스' 카테고리의 다른 글
| Redis 제거와 복구코드 재발급 기능 구현 기록 (TDD + NestJS 트러블슈팅) (4) | 2026.06.15 |
|---|---|
| 테트리스 레트로 개발 회고 — 성능 개선부터 배포까지 (0) | 2026.06.10 |
| Claude Code로 테트리스 만들기 3부 - 반응형 레이아웃 구현 (0) | 2026.04.20 |
| Claude Code로 테트리스 만들기 2부 - 줄 삭제와 점수 시스템 구현 (0) | 2026.04.19 |
| Claude Code로 테트리스 만들기 1부 - 충돌 감지 구현 (0) | 2026.04.19 |