한 줄 요약
공은 쉬지 않고 앞으로 달리고, 나는 "왼쪽 대각선 ↔ 오른쪽 대각선"을 바꾸는 입력 하나만 가집니다. 트랙은 70~140픽셀마다 방향이 반대로 꺾이기 때문에, 꺾이는 시점 전후의 아주 짧은 시간 안에 입력을 넣는 것이 전부입니다. 규칙이 하나뿐이어서 오히려 "얼마나 일찍, 얼마나 늦게까지 괜찮은가"를 숫자로 알면 감이 훨씬 빨리 잡힙니다. 아래 수치는 모두 이 페이지 게임 코드의 상수에서 계산했습니다.
조작과 규칙
- 입력은 하나입니다. 캔버스 클릭(또는 터치), 스페이스바 중 무엇을 하든 공의 좌우 이동 방향이 즉시 반대로 바뀝니다.
- 공과 트랙은 모두 한 단계(1/60초)에 전진 거리만큼 대각선(45도)으로 움직입니다. 공은 항상 화면 가운데에 그려지고 트랙이 공의 위치에 맞춰 스크롤됩니다.
- 트랙은 공 중심에서 좌우 34픽셀(폭 68픽셀)이며, 공의 중심이 트랙 중심선에서 34픽셀을 넘게 벗어나면 추락해 게임이 끝납니다. 공의 반지름은 8픽셀이지만 판정은 중심만 쓰므로 공이 가장자리에 걸쳐 보여도 중심이 안쪽이면 살아 있습니다.
- 트랙은 70~140픽셀 길이의 직선 구간이 이어지며 구간마다 방향이 정반대로 바뀝니다. 길이는 난수로 정해져 같은 길이가 반복되지 않습니다.
- 속도는 시작 2에서 단계마다 0.0015씩 올라 5(최대)에서 멈춥니다. 점수는 전진 거리를 10으로 나눈 값입니다.
- 일시정지 버튼 또는 P 키로 멈출 수 있고, 게임이 끝난 직후 0.5초 동안은 급하게 누른 입력이 새 판을 시작하지 않습니다. 게임은 화면 주사율과 관계없이 초당 60단계로 진행됩니다.
- 최고 기록은 이 브라우저의 localStorage(키
zigzagPathBest)에 저장되며 서버로 전송되지 않습니다. 사이트 데이터를 지우면 초기화됩니다.
왜 대각선 두 방향만으로 충분히 어려운가
트랙 중심선과 공은 둘 다 한 단계에 전진 거리와 같은 폭만큼 옆으로 움직입니다. 방향이 같으면 둘의 간격은 변하지 않고, 방향이 반대가 되면 간격이 전진 거리의 두 배 속도로 벌어집니다. 그래서 트랙이 꺾인 뒤 공이 이전 방향 그대로 가면 1픽셀 전진할 때마다 2픽셀씩 중심선에서 멀어지고, 추락선인 34픽셀에 닿기까지 남은 거리는 전진으로 환산해 최대 17픽셀뿐입니다. 이것이 타이밍 오차가 허용되는 폭의 정체입니다.
시간이 지나며 달라지는 것: 속도와 여유 시간
표의 "허용 오차 창"은 공이 중심선에 정확히 있을 때, 꺾이는 순간을 기준으로 앞뒤 합쳐 몇 밀리초 안에 입력해야 하는지를 나타냅니다(34픽셀 ÷ 속도). 좌우로 쪼개면 각각 그 절반이 일찍 또는 늦게 누를 수 있는 한계입니다. "시야"는 화면 위쪽으로 보이는 트랙 길이(340픽셀)를 속도로 나눠 몇 초 앞을 미리 볼 수 있는지 계산한 값입니다.
| 경과 시간(초) | 속도(px/단계) | 그때까지 점수 | 허용 오차 창(ms) | 미리 보이는 시간(초) | 직선 구간 길이(초) |
|---|---|---|---|---|---|
| 0 | 2.00 | 0 | 283 | 2.83 | 0.58 ~ 1.17 |
| 5 | 2.45 | 66 | 231 | 2.31 | 0.48 ~ 0.95 |
| 10 | 2.90 | 147 | 195 | 1.95 | 0.40 ~ 0.80 |
| 20 | 3.80 | 348 | 149 | 1.49 | 0.31 ~ 0.61 |
| 33.3 | 5.00 | 699 | 113 | 1.13 | 0.23 ~ 0.47 |
| 60 | 5.00 | 1500 | 113 | 1.13 | 0.23 ~ 0.47 |
표에서 읽을 수 있는 가장 중요한 변화는 허용 오차 창이 처음 약 280밀리초에서 최대 속도에서는 약 110밀리초로 반 이상 줄어든다는 점입니다. 반응 속도 자체는 변하지 않았는데 요구되는 정밀도가 바뀌는 것이므로, 후반에는 "보고 누르기"가 아니라 "미리 박자 맞추기"가 필요합니다. 한편 시야는 2.83초에서 1.13초로 줄어듭니다.
목표 점수까지 걸리는 시간
속도가 오르는 구간에서는 전진 거리가 시간의 제곱에 가깝게 늘어나고, 최대 속도에 닿은 뒤에는 초당 30점씩 일정하게 쌓입니다. 속도가 최대에 닿는 시점은 2000단계(약 33.3초)이고 이때 점수는 약 700점입니다. "꺾임 횟수"는 직선 구간의 평균 길이(105픽셀)로 나눈 추정치입니다.
| 목표 점수 | 필요한 생존 시간(초) | 대략적인 꺾임 횟수 |
|---|---|---|
| 100 | 7.2 | 10 |
| 300 | 17.8 | 29 |
| 500 | 26.2 | 48 |
| 700 | 33.3 | 67 |
| 1000 | 43.3 | 95 |
| 2000 | 76.7 | 190 |
속도별 박자표: 분당 몇 번 눌러야 하나
속도를 고정해 놓고 보면 이 게임은 사실상 리듬 게임입니다. 직선 구간의 평균 길이 105픽셀을 지나는 데 걸리는 시간이 곧 "한 박"이고, 구간 길이가 70~140픽셀 사이에서 무작위로 바뀌므로 실제 박자는 평균의 ±3분의 1 안팎에서 흔들립니다. 아래 표의 "일정 지연 한계"는 입력이 항상 같은 시간만큼 늦는다고 가정할 때 추락하지 않는 최대 지연이고, 마지막 열은 50밀리초 지연이 있을 때 중심선과 벌어지는 최대 간격입니다. 추락선은 34픽셀이므로 이 값이 34에 가까울수록 위험합니다.
| 속도(px/단계) | 평균 한 박(ms) | 분당 꺾임 횟수 | 일정 지연 한계(ms) | 50ms 지연 시 최대 간격(px) |
|---|---|---|---|---|
| 2 | 875 | 69 | 142 | 12.0 |
| 3 | 583 | 103 | 94 | 18.0 |
| 4 | 438 | 137 | 71 | 24.0 |
| 5 | 350 | 171 | 57 | 30.0 |
입력 지연이 있는 기기에서 계산해 보기
무선 마우스, 터치스크린, 화면 출력 지연이 큰 TV 연결 같은 환경에서는 눈에 보이는 순간과 입력이 반영되는 순간 사이에 일정한 지연이 끼어듭니다. 이 게임에서 "일정한 지연"은 예시 2와 같은 원리로 치명적이지 않습니다. 모든 입력이 같은 시간만큼 늦으면 중심선과의 간격이 0과 지연에 비례한 값 사이를 오갈 뿐이기 때문입니다. 그래서 같은 지연이라도 속도가 올라가면 위험이 커집니다. 지연이 같아도 그 시간 동안 이동하는 거리가 속도에 비례해 늘어나기 때문입니다.
- 속도 3.0에서 50밀리초 지연이면 입력이 약 9픽셀 늦게 반영되어 최대 간격이 약 18픽셀입니다. 추락선 34픽셀까지 여유가 약 16픽셀 남습니다.
- 속도 5.0에서 같은 50밀리초 지연이면 입력이 15픽셀 늦게 반영되어 최대 간격이 30픽셀로 추락선에 4픽셀 차이까지 다가옵니다. 여기에 사람의 타이밍 흔들림이 조금만 더해져도 추락합니다.
- 속도 5.0에서 80밀리초 지연이면 간격이 48픽셀로 추락선을 넘으므로, 보이는 대로 누르면 구조적으로 버틸 수 없고 꺾임을 예측해서 일찍 눌러야 합니다.
이 수치는 지연이 모든 입력에서 같다는 단순화한 계산이며 실제 기기의 지연은 매번 조금씩 다릅니다. 지연이 의심되면 같은 기기에서 반응 속도 테스트를 해 보고, 평소 결과보다 크게 느리게 나오는지 비교해 보는 것이 쉬운 확인 방법입니다.
연습 단계별 목표 정하기
표의 값을 기준으로 단계를 나누면 막연히 반복하는 것보다 목표가 분명해집니다. 앞의 목표 점수 표를 함께 보며 "지금 내가 어느 속도 구간에서 죽는가"를 먼저 파악하세요.
- 1단계, 점수 0~300: 속도가 2.0에서 약 3.6까지 올라가는 구간입니다. 허용 오차 창이 비교적 넓어 눈으로 보고 누르는 습관을 만드는 시기입니다. 이때 박자를 일정하게 누르는 연습을 하지 않으면 이후 구간에서 들쭉날쭉함이 그대로 드러납니다.
- 2단계, 점수 300~700: 속도가 약 3.6에서 상한 5.0에 닿기까지의 구간입니다. 화면 위쪽의 다음 꺾임을 보면서 누르는 연습을 하세요. 지금 누르는 꺾임이 아니라 그다음 구간 길이를 눈으로 가늠하는 습관이 필요해지는 구간입니다.
- 3단계, 점수 700 이상: 속도 상한 5.0에 도달한 뒤입니다. 속도가 더 오르지 않으므로 이후에는 같은 난이도가 계속되고, 실력은 박자를 얼마나 일정하게 유지하느냐로 갈립니다. 점수가 오르는 속도도 초당 30점으로 고정이라 기록 차이는 곧 생존 시간 차이입니다.
검산 예시
예시 1. 오차 한계. 속도 2.0에서 트랙이 꺾인 뒤 공이 이전 방향으로 계속 가면 중심선과의 간격은 전진 1픽셀당 2픽셀씩 늘어납니다. 중심선에 있던 공이 34픽셀을 넘으려면 전진 17픽셀, 즉 17 ÷ 2.0 = 8.5단계(약 142밀리초)가 필요합니다. 속도 5.0에서는 17 ÷ 5.0 = 3.4단계, 약 57밀리초뿐입니다.
예시 2. 일정하게 늦는 것은 괜찮고, 들쭉날쭉한 것이 위험합니다. 꺾임 하나에서 입력이 전진 거리 τ픽셀만큼 늦거나 일찍 들어가면 중심선과의 간격이 2τ만큼 바뀌고, 방향이 매번 반대로 바뀌므로 간격이 변하는 부호도 매번 바뀝니다. 그래서 항상 16픽셀씩 늦는 입력은 간격이 +32, 0, +32, 0으로 오가며 계속 살아남습니다. 반면 한 번 12픽셀 늦고 다음 번에 12픽셀 일찍 누르면 +24, 그다음 +24가 더해져 48이 되어 추락합니다(두 경우 모두 코드의 판정 규칙을 그대로 옮긴 시뮬레이션으로 확인). 늦거나 빠른 정도가 일정할수록 안전합니다.
예시 3. 최대 속도에서의 점수 증가. 속도 5.0이면 초당 5 × 60 = 300픽셀을 전진하므로 점수가 초당 30점씩 오릅니다. 최대 속도 직전까지 약 700점을 쌓으므로 점수 1000은 약 43.3초 생존해야 도달합니다.
코드 규칙에서 나오는 공략
- 누르는 박자를 일정하게 유지하세요. 위 예시 2처럼 오차의 크기보다 오차가 일정한지가 더 중요합니다. 꺾임을 약간 앞질러 눌러 일정하게 일찍 누르는 방식도 같은 이유로 안전합니다.
- 멀리 보세요. 공 바로 앞이 아니라 화면 위쪽 트랙의 꺾임을 읽고, 직선 구간 두세 개의 길이를 눈으로 대략 재서 박자를 예측하면 반응 시간의 한계를 넘을 수 있습니다.
- 중심선에 가깝게 유지하세요. 한 번 크게 벗어나면 다음 오차 한계가 줄어듭니다. 가운데에 있을 때 허용 오차는 양쪽 17픽셀이지만, 이미 한쪽으로 쏠려 있으면 그 쪽의 여유가 줄어듭니다.
- 시작은 방향이 이미 맞습니다. 첫 구간은 공의 방향이 트랙과 같게 시작되므로 첫 꺾임까지 가만히 두어도 됩니다. 처음부터 연타하면 오히려 스스로 벗어납니다.
- 입력은 누른 순간 반영됩니다. 스페이스바를 계속 누르고 있어도 키 반복 입력은 무시되므로 방향이 연속으로 바뀌지 않습니다. 박자에 맞춰 한 번씩 눌러야 합니다.
흔한 실수와 한계
- 방향 전환을 두 번 연속으로 눌러 원래 방향으로 돌아오는 실수가 가장 많습니다. 꺾임 하나당 입력은 한 번입니다.
- 게임이 끝난 뒤 바로 입력하면 새 판이 시작되지만, 종료 직후 0.5초 동안은 무시됩니다. 점수를 확인한 뒤 눌러도 늦지 않습니다.
- 트랙 모양은 난수로 만들어지므로 같은 트랙을 외워서 반복할 수 없습니다. 난수는 보안용이 아닌 Math.random()입니다.
- 장애물, 아이템, 보너스가 없고 트랙 폭과 꺾임 각도(45도)는 고정입니다. 난이도가 오르는 요소는 속도 하나뿐입니다.
- 입력 지연이 있는 환경(블루투스 마우스, 일부 모바일 브라우저)에서는 위 허용 오차 창이 실제로는 더 좁게 느껴질 수 있습니다.
자주 묻는 질문
트랙이 꺾이는 시점을 미리 알 수 있나요?
네. 공 앞쪽으로 340픽셀 거리의 트랙이 미리 그려져서, 처음에는 약 2.83초, 최대 속도에서는 약 1.13초 앞의 꺾임까지 볼 수 있습니다.
일부러 방향을 안 바꾸면 어떻게 되나요?
첫 꺾임(최대 140픽셀 전진 이내)이 오면 공이 트랙 반대 방향으로 벗어나기 시작하고, 전진 17픽셀 안팎에서 추락합니다. 입력 없이는 한 구간 이상 버틸 수 없습니다.
게임이 갑자기 두 배로 빨라진 것 같아요.
화면 주사율과 관계없이 초당 60단계로 진행되도록 맞춰져 있으므로, 120Hz 화면에서도 속도가 두 배가 되지 않습니다. 새 게임 버튼을 여러 번 눌러도 화면 갱신은 한 번에 하나만 돌기 때문에 속도가 겹쳐 빨라지지 않습니다.
최고 기록은 어디에 저장되나요?
이 브라우저의 localStorage에 zigzagPathBest 키로 저장됩니다. 서버에 보내지 않으며 다른 기기와 동기화되지 않습니다. 브라우저의 사이트 데이터를 지우면 사라집니다.
모바일에서는 어떻게 하나요?
캔버스를 탭하면 방향이 바뀝니다. 화면 스크롤이 일어나지 않도록 캔버스 위 터치 동작은 게임에 전달되도록 막아 두었습니다.
일시정지 중에 방향을 바꿀 수 있나요?
아니요. 일시정지 상태에서는 클릭이나 스페이스바 입력이 무시되고, 계속하기를 누르면 시간 누적값이 초기화되어 정지 직전 상태에서 바로 이어집니다. 정지한 사이에 쌓인 시간이 한꺼번에 처리되지 않으므로 계속하기 직후에 갑자기 앞으로 튀지 않습니다.
탭이 백그라운드로 가면 게임은 어떻게 되나요?
브라우저가 화면 갱신을 멈추면 게임 진행도 함께 멈춥니다. 한 번의 화면 갱신에서 처리하는 시간은 최대 100밀리초로 제한되어 있어서, 오랜만에 돌아왔을 때 밀린 시간이 한꺼번에 반영되어 추락하는 일은 없습니다.
다른 반사신경 게임
점프 타이밍은 장애물 점프 게임, 좌우 이동은 차선 피하기 레이싱 게임, 좁은 길 따라가기는 흔들리지 않는 손 따라 그리기 게임, 순수 반응 속도 측정은 반응 속도 테스트에서 해볼 수 있습니다.