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