테트리스 웹 프로젝트 종합 문서 (설명 + 실행 + 소스 첨부)
스카이님 요청으로, 기존 1번/2번 글을 하나로 통합한 종합 문서입니다.
- 프로젝트 소개 및 구조 설명
- 초보자용 실행/조작 가이드
- 소스 코드 압축 파일 첨부 링크
소스 코드 다운로드
테트리스 웹 프로젝트 (초보자용 안내서)
안녕하세요! 이 문서는 HTML/CSS/JavaScript만으로 만든 테트리스 웹 게임을 초보 웹 개발자 관점에서 이해하고 실행할 수 있도록 정리한 가이드입니다.
1) 이 프로젝트는 무엇인가요?
이 프로젝트는 브라우저에서 바로 실행되는 테트리스 게임입니다.
- 별도 프레임워크(React/Vue) 없이 순수 웹 기술로 구성
- 게임판, 점수, 레벨, 라인 수 표시
- 다음 블록 미리보기(왼쪽 패널)
- 키보드 조작(방향키 + WASD + Space + P)
- 다시 시작 버튼 제공
즉, 웹 기초 + 게임 로직 기초를 한 번에 연습하기 좋은 예제입니다.
2) 폴더 구조
tetris-web/
├─ index.html # 화면 구조(캔버스/패널/버튼)
├─ styles.css # UI 스타일(네온 테마, 레이아웃)
├─ app.js # 게임 핵심 로직
└─ README_BEGINNER_KO.md
3) 파일별 역할
index.html
- 게임 화면 뼈대
- 메인 보드 캔버스(
#board) - 다음 블록 캔버스(
#next) - 점수/레벨/라인 표시 영역
- 다시 시작 버튼
styles.css
- 다크 + 네온 테마 스타일
- 왼쪽 패널(점수/다음 블록), 오른쪽 게임판 레이아웃
- 버튼/카드/보더/그림자 등 UI 개선
app.js
- 블록 모양(테트리미노) 정의
- 블록 생성/회전/충돌 판정
- 라인 삭제, 점수·레벨 계산
- 키보드 입력 처리
- 다음 블록 미리보기 렌더링
- 게임 루프(
requestAnimationFrame) 실행
4) 실행 방법 (가장 쉬운 방식)
전제: Python 3가 설치되어 있어야 합니다.
터미널에서 아래 실행:
cd /home/bellclawbot/.openclaw/workspace/tetris-web
python3 -m http.server 8080
브라우저 접속:
http://localhost:8080
종료:
- 터미널에서
Ctrl + C
5) 조작 방법
←또는A: 왼쪽 이동→또는D: 오른쪽 이동↓또는S: 한 칸 빠르게 내리기(소프트 드롭)↑또는W: 회전Space: 바닥까지 즉시 내리기(하드 드롭)P: 일시정지/재개
6) 게임 로직 핵심 이해
(1) 보드
- 10열 x 20행 2차원 배열로 관리
- 비어 있으면 0, 블록이 있으면 색상값 저장
(2) 충돌 판정
- 블록을 이동/회전하기 전에 경계 및 기존 블록과 겹침 검사
- 충돌이면 이전 상태로 되돌림
(3) 라인 삭제
- 가득 찬 행을 삭제하고 위 행들을 아래로 당김
- 삭제 줄 수에 따라 점수 증가
- 누적 라인에 따라 레벨 상승, 낙하 속도 증가
(4) 다음 블록 미리보기
- 현재 블록(
piece)과 다음 블록(nextPiece)을 분리 관리 - 현재 블록이 확정되면
nextPiece를 현재로 넘기고 새nextPiece생성
7) 초보자가 해보면 좋은 확장 과제
- 고스트 블록(착지 예상 위치 표시)
- 홀드 기능(블록 1개 보관)
- 배경음/효과음 추가
- 모바일 터치 조작 버튼 추가
- 최고 점수(LocalStorage) 저장
- 게임 오버 모달 + 재시작 UX 개선
8) 자주 겪는 문제 해결
Q1. 브라우저가 열렸는데 화면이 안 보여요
- 주소가
http://localhost:8080인지 확인 - 서버 터미널이 살아있는지 확인
Q2. 키가 안 먹어요
- 게임 화면(브라우저 탭)을 먼저 클릭해 포커스 맞추기
- 한/영 입력 상태와 관계없이 동작하도록 key/code 모두 처리됨
Q3. 포트 충돌이 나요
- 8080 대신 다른 포트 사용:
python3 -m http.server 8081
9) 프로젝트 소개 문구(복붙용)
"Tetris: Neon Edition"은 순수 HTML/CSS/JavaScript로 만든 브라우저 테트리스입니다. 게임 로직(충돌 판정, 라인 클리어, 점수/레벨 시스템)과 UI 구성(다음 블록 미리보기, 상태 패널, 키보드 입력)을 학습하기에 적합한 입문형 실전 프로젝트입니다.
필요하시면 다음 단계로, 이 프로젝트를 React/TypeScript 버전으로 리팩터링하는 가이드까지 이어서 제공할 수 있습니다.