나의 완벽한 테트리스
이것은 무엇인가
테트리스는 전설적인 게임이며 제가 매우 즐기는 게임입니다. 저는 이 게임을 정말 좋아하고 플레이하는 것을 즐깁니다. 스트레스 해소에 아주 좋습니다. 주말에 재미로, 데스크탑과 모바일 모두를 위해 브라우저 게임/앱으로 만들기로 했고, vibe 코딩 원칙을 사용해 설계했습니다. 이번 버전의 모바일 측면은 스와이프 기반 컨트롤이 잘 되어 있는 플레이-테트리스에서 영감을 받았습니다. 제 테트리스 구현을 여기에서 확인하고 플레이해보세요. 제가 생각하기에 가장 “완벽한” 버전의 테트리스입니다.
코드 너머
저는 포트폴리오용으로 테트리스 클론을 만들거나 새로운 것을 배우기 위해 이걸 만든 것이 아닙니다. 진짜로 필요해서 만들었습니다. 제가 스트레스를 받을 때, 일이 힘든 한 주이거나 삶이 쌓여갈 때, 테트리스는 실제로 저를 리셋시키는 몇 안 되는 건강한 방법 중 하나입니다. 스트레스를 받으면 저는 많이 먹는 편이고, 이게 시간이 지나면 쌓이기 때문에 부작용 없는 것이 하나 있는 것이 제게는 큰 의미가 있습니다. 블록을 10분에서 30분 정도 떨어뜨리면 제 머리가 조금 정리되는 느낌이 듭니다. 제게는 단순한 긴장 해소 이상의 것으로, 그 스트레스를 쏟아낼 수 있는 단순하고 집중된 무언가를 제공해줍니다. 심지어 테트리스가 침투성 기억과 스트레스 처리 방식에 영향을 줄 수 있다는 멋진 연구들도 있습니다. 예를 들어 트라우마 영화 실험, 실제 사고 이후 치료받은 사람들, 그리고 치료 보조로서 측정 가능한 뇌 변화가 있는 경우 등이 있습니다. 저는 이 게임을 의료 치료로 바꾸려는 것은 아니지만, 테트리스가 스트레스 관리를 실제로 돕는다는 제가 이미 느낀 것을 지지하는 과학이 있을지도 모른다는 점은 멋집니다.
그래서 저는 좋은 테트리스 버전을 찾아보기 시작했고, 문제는 아무 것도 제가 원하는 방식으로 플레이되게 맞지 않았다는 것입니다. iOS 앱 스토어의 모바일 앱들은 광고와 소액 결제들로 가득합니다. 웹 버전들은 지연이 있거나 폰에서 끔찍하게 느껴졌습니다. 클래식 NES 버전은 훌륭하지만 에뮬레이터와 추가 하드웨어가 필요합니다. 저는 문제를 해결할 수 있을 거라 생각하며 Miyoo Mini도 샀지만, 결국 테트리스만 하려고 두 번째 기기를 들고 다니게 되었을 뿐이었습니다. 어느 순간 저는 적절한 버전을 찾는 데 드는 시간이 그냥 하나를 만드는 데 드는 시간보다 더 많다는 것을 깨달았습니다.
현대 브라우저들과 Claude Code 같은 LLM 도구들, 그리고 vibe 코딩 같은 워크플로우 덕분에 제가 원하던 테트리스를 직접 만들기에 적절한 시기라는 느낌이 들었습니다. 빠르고, 최소한의 것, 광고 없음, 계정 없음, 앱 스토어 없음. 그냥 제 폰과 노트북에서 동작하고 제가 완전히 제어하는 브라우저 게임. 대략 하루 만에 작동하는 버전을 만들었고, 데스크탑과 모바일 양쪽에서 감각을 맞추고 견고하게 만들기 위해 하루 정도 더 간헐적으로 작업한 후 만족스러운 상태가 되었습니다.
제가 이걸 공유하는 이유는, 만약 이것이 저에게 도움이 된 것처럼 다른 단 한 사람이라도 스트레스를 해소하는 데 도움이 된다면 그것만으로도 저는 정말 기쁠 것이기 때문입니다. 작은 것이지만 때로는 작은 것이 바로 당신에게 필요한 전부일 수 있습니다.
특징
- 클래식 10x20 테트리스 보드
- 데스크탑에서는 전체 키보드 컨트롤, 모바일에서는 터치 제스처 컨트롤
- 표준 세븐-백(piece seven-bag) 랜덤라이저
- 홀드 피스와 다음 피스 미리보기
- 피스가 착지할 위치를 보여주는 고스트 피스 투영
- 레벨 기반 속도 곡선과 동적 락 딜레이
- 점수, 라인, 레벨 및 최고점 추적을 로컬 스토리지에 지속 저장
- 소프트 드롭 및 하드 드롭 점수 시스템
- 재개, 재시작, 종료, 음악/효과음 음소거, 소스 코드 링크가 있는 게임 내 메뉴
- 라인 클리어 플래시 애니메이션과 사운드 효과
- iOS 안전 영역 지원(Dynamic Island, 노치, 홈 인디케이터)
- 서비스 워커를 통한 오프라인 지원(첫 방문 후 인터넷 없이 동작)
- PWA로 설치 가능(iOS/Android에서 홈 화면에 추가하여 앱처럼 사용 가능)
조작
데스크탑 (키보드)
| 동작 | 키 |
|---|---|
| 이동 | ← → 또는 A D |
| 소프트 드롭 | ↓ 또는 S |
| 하드 드롭 | Space |
| 시계 방향 회전 | ↑ W X |
| 반시계 방향 회전 | Z |
| 홀드 | C 또는 LShift |
| 메뉴 | Esc 또는 M |
| 소스 코드 | G (타이틀 화면) |
모바일 (터치)
| 동작 | 제스처 |
|---|---|
| 이동 | 왼쪽 / 오른쪽 스와이프 |
| 소프트 드롭 | 누른 상태에서 아래로 드래그 |
| 하드 드롭 | 아래로 빠르게 플릭 |
| 시계 방향 회전 | 탭 |
| 홀드 | 위로 빠르게 플릭 |
난이도 곡선
이 버전의 속도 곡선과 락 딜레이는 클래식과 현대 테트리스 게임들이 난이도 진행을 처리하는 방식을 연구하여 조정했습니다. 원래의 NES 테트리스에서는 중력(한 행당 떨어지는 시간)이 레벨 29에서 한 프레임당 한 행에 도달하여 많은 사람들에게 사실상 플레이가 불가능해지는 유명한 “킬 스크린”이 발생합니다. 그건 정말로 설계된 종료가 아니라 하드웨어와 DAS(Delayed Auto Shift)가 드롭 속도를 따라잡기에는 너무 느렸던 것의 부작용이었습니다. Willis Gibson이 2024년에 그 한계를 넘어 레벨 157에서 게임을 종료시켰을 때 이를 증명했습니다.
TGM (Tetris: The Grand Master) 같은 현대 게임들은 이것을 다르게 해결했습니다. 단순히 조각이 더 빨라지다가 게임이 깨지게 하지 않고, TGM은 중력을 20G(즉시 낙하)로 캡하여 제한하고 락 딜레이와 DAS 같은 다른 타이밍 창을 좁혀 난이도를 높입니다. 테트리스 가이드라인 표준은 최대 15번의 이동 리셋으로 500ms 락 딜레이를 사용하며, 이 버전도 이를 따릅니다. TGM2 데스 모드와 TGM3 시라세에 대한 연구는 경쟁 플레이의 실질적 하한이 빠른 DAS와 함께 약 250ms의 락 딜레이 정도라는 것을 보여주었고, 133ms 이하의 영역은 전문 선수들의 범주라는 것을 보여주었습니다.
이 모든 것을 바탕으로, 이 버전의 속도 곡선은 중력을 즉시 낙하로 가지지 않고 1행당 33ms로 캡합니다(이는 NES 레벨 19~28과 유사). 또한 DAS는 레벨이 올라갈수록 170ms에서 100ms로 스케일되어 락 딜레이 동안 보드를 횡단할 수 있도록 했습니다. 목표는 고레벨이 잔인하게 빠르게 느껴지되 공정하게 느껴지도록 만드는 것이며, 원래 NES 방식처럼 단순히 입력 속도보다 속도가 빨라지는 접근법보다 Tetris 99와 TGM이 엔드게임 난이도를 처리하는 방식에 더 가깝게 만드는 것이었습니다.
내부 구조
- 데스크탑과 모바일(세로) 모두에 최적화된 반응형 디자인
- 성능을 위한 사전 렌더링된 블록 스프라이트와 그리드 배경
- 피스 회전을 위해 Super Rotation System(SRS) 스타일의 월 킥 사용
- 플릭과 드래그를 신뢰성 있게 구분하기 위한 속도 기반 터치 제스처 감지
- 중력 속도와 락 딜레이를 위한 레벨 기반 타이밍 시스템
- 하이스코어와 오디오 설정은
localStorage에 지속 저장 - 배경 음악 출처 NmCCQxVBfyM
- 라인 클리어 사운드 효과 출처 UMViM2tHrOk
- 이 프로젝트는 MIT 라이선스 하에 완전한 오픈 소스입니다
- 다음 AI 도구들을 사용하여 제작됨:
- Claude Code CLI - 코딩/개발
- Gemini CLI - 코딩/개발
- Cha CLI - 코딩 및 문서 작성
- xAI Grok - 로고 및 아이콘
- Perplexity - 버그 조사
- Google Search - SVG 및 기타 자산 검색
- YouTube + yt-dlp - 오디오 클립 소싱
- FFmpeg - 오디오 파일 편집
마무리 생각
이 프로젝트는 동기가 기술적이지 않고 개인적인 그런 프로젝트 중 하나였습니다. 저는 단지 광고 없이, 추가 하드웨어 없이, 언제든 사라지거나 변경될 수 있는 다른 사람의 앱에 의존하지 않는, 제가 원하는 방식으로 작동하는 테트리스 버전을 원했습니다. 최신 인공지능 도구들과 바이브 코딩을 사용해 짬짬이 작업하여 약 일주일 만에 아이디어에서 완성된 게임으로 나아갈 수 있었다는 사실은 지금 소프트웨어 개발이 어디에 와 있는지를 잘 보여줍니다.
만든 이후로 저는 거의 매일 이 버전을 사용해왔고, 지금도 여전히 제가 필요로 하는 것을 정확히 수행합니다. 이 게임은 스트레스를 주는 일에서 잠시 벗어나 몇 분 동안 단순한 것에 집중하고 더 맑은 정신으로 돌아오는 데 도움을 줍니다. 만약 직접 해보고 당신에게도 같은 효과가 있다면, 그보다 더 바랄 것이 없습니다. 그리고 포크하고 싶거나, 속도 곡선을 조정하거나, 조작 방식을 바꾸거나, 이 위에 기능을 추가하고 싶다면 마음껏 해보세요. 버그를 찾거나 제안이 있으면 GitHub 저장소에 이슈를 열어주세요. 이것이 이 프로젝트를 오픈 소스로 공개한 이유 전부입니다.