한눈에 보는 게임 구조
스키 슬라롬은 화면 아래쪽에 고정된 스키어를 좌우로만 움직여, 위에서 내려오는 빨강·파랑 깃발 사이를 통과하는 점수 게임입니다. 스키어의 세로 위치는 바뀌지 않고 코스 쪽이 아래로 흘러내리는 방식이어서 조작은 단 하나, 가로 위치뿐입니다. 생명은 3개이고 게이트를 놓치거나 나무에 닿을 때마다 하나씩 줄며, 점수(통과한 게이트 수)에는 상한이 없어 생명이 다할 때까지 계속됩니다.
조작과 판정, 코드에서 확인한 값
- 캔버스는 480×400이고 스키어는 가로 중앙에서 시작해 세로 350 지점에 고정됩니다. 스키어의 충돌 반경은 12px입니다.
- 방향키 ←/→를 누르고 있는 동안 1프레임에 5px, 즉 초당 300px씩 움직이며 좌우 끝에서 16px 안쪽까지만 갑니다. 게임 갱신은 초당 60회로 고정되어 있어 모니터 주사율이 달라도 같은 속도입니다.
- 화면을 누르거나 드래그하면 스키어가 손가락(마우스) 가로 위치로 즉시 이동합니다. 키보드보다 훨씬 빠른 이동이어서 터치로 하면 게이트가 쉽게 느껴집니다.
- 게이트는 빨간 깃발(왼쪽)과 파란 깃발(오른쪽) 한 쌍이며, 스키어의 중심이 두 깃발 사이에 있을 때만 통과로 인정됩니다. 판정은 게이트가 스키어 높이를 지나는 짧은 한 순간(위아래 6px 범위)에 한 번만 이루어집니다.
- 나무는 게이트 뒤 60px 지점에 따라오는 삼각형 장애물로, 스키어 중심과 나무 중심의 가로 거리가 26px 미만일 때 충돌합니다. 게이트 하나당 나무가 생길 확률은 70%입니다.
- 나무는 게이트 구멍 가장자리에서 30~90px 바깥(좌우 무작위)에 생성됩니다. 다만 화면 가장자리에서 20px 안쪽으로 보정되므로 구멍이 벽 쪽에 붙어 있을 때는 이보다 가까워질 수 있습니다. 구멍의 정중앙 근처에 있으면 같은 게이트의 나무에는 대개 닿지 않습니다.
- 방향키를 누른 채 창을 벗어나거나 탭을 바꾸면 눌림 상태가 해제되고, 탭이 숨겨진 시간만큼 게임이 몰아서 진행되지 않고 멈춥니다. 방향키로 화면이 스크롤되지 않습니다(게임 진행 중).
- 최고 기록은 브라우저 localStorage의
ski-slalom-best키에 저장됩니다. 브라우저의 사이트 데이터 삭제로 지울 수 있고 다른 기기와는 공유되지 않습니다.
점수에 따라 달라지는 난이도 표
난이도는 점수에 비례해 세 가지가 함께 변합니다. 내려오는 속도는 프레임당 2.6px에서 시작해 게이트를 통과할 때마다 0.15px씩 늘고 8px에서 멈춥니다(점수 36). 게이트의 구멍 폭은 150px에서 3px씩 줄어 90px(점수 20)에서 멈추고, 다음 게이트가 나오는 간격은 95프레임에서 1.5프레임씩 줄어 55프레임(점수 27 이상)에서 멈춥니다. 아래는 이 식을 빌드할 때 계산한 값이며, 마지막 열은 좌우로 최대 150px 벗어난 다음 게이트로 옮겨 가는 데 필요한 30프레임(150px ÷ 5px)을 간격에서 뺀 여유 프레임입니다.
| 점수 | 속도(px/프레임) | 속도(px/초) | 구멍 폭(px) | 게이트 간격(프레임) | 간격(초) | 게이트 간 거리(px) | 이동 여유(프레임) |
|---|---|---|---|---|---|---|---|
| 0 | 2.60 | 156 | 150 | 95 | 1.58 | 247 | 65 |
| 5 | 3.35 | 201 | 135 | 88 | 1.47 | 295 | 58 |
| 10 | 4.10 | 246 | 120 | 80 | 1.33 | 328 | 50 |
| 15 | 4.85 | 291 | 105 | 73 | 1.22 | 354 | 43 |
| 20 | 5.60 | 336 | 90 | 65 | 1.08 | 364 | 35 |
| 25 | 6.35 | 381 | 90 | 58 | 0.97 | 368 | 28 |
| 30 | 7.10 | 426 | 90 | 55 | 0.92 | 391 | 25 |
| 36 | 8.00 | 480 | 90 | 55 | 0.92 | 440 | 25 |
| 40 | 8.00 | 480 | 90 | 55 | 0.92 | 440 | 25 |
점수 36을 넘어서면 속도, 구멍 폭, 간격이 모두 최종값에 도달하므로 그 뒤에는 난이도가 더 오르지 않습니다. 이때 게이트 사이 거리가 440px로 캔버스 높이(400px)보다 길어서 화면에는 게이트가 한 번에 하나만 보입니다.
무실점으로 달리면 얼마나 걸리나
한 번도 놓치지 않는다고 가정하고 같은 규칙을 그대로 모의 계산하면 N번째 게이트를 통과하는 시점은 다음과 같습니다. 첫 게이트가 스키어 높이에 닿는 데에만 약 140프레임(약 2.3초)이 걸립니다. 실제 판은 놓침과 충돌이 섞이므로 이 값은 이론상의 하한입니다.
| 통과 게이트 수 | 무실점 가정 시 경과 시간(초) |
|---|---|
| 1개 | 2.3 |
| 10개 | 15.1 |
| 20개 | 27.4 |
| 30개 | 37.2 |
| 50개 | 55.5 |
| 100개 | 101.3 |
검산한 예시
- 나무가 늦게 오는 시간. 나무는 게이트보다 60px 뒤에서 내려옵니다. 시작 속도(2.6px/프레임)에서는 게이트 통과 후 약 23.1프레임, 최고 속도(8px/프레임)에서는 약 7.5프레임 뒤에 판정됩니다. 최고 속도에서는 게이트를 지난 뒤 0.13초 안에 나무 판정이 따라온다는 뜻입니다.
- 구멍 폭 90px에서의 허용 오차. 스키어 중심만 보므로 구멍 중심에서 좌우 45px 미만이면 통과입니다. 키보드는 눌러 둔 동안 5px/프레임으로 움직이고 키를 떼면 관성 없이 바로 멈추므로, 구멍 안쪽 폭 90px을 키 입력 몇 번으로 채우는지가 곧 허용 오차입니다. 18프레임 정도 누르면 구멍 전체 폭만큼 움직입니다.
- 최대 어려움에서의 이동. 속도 8px/프레임, 간격 55프레임일 때 다음 구멍이 최악으로 150px 떨어져 있어도 30프레임이면 이동할 수 있어 25프레임 (약 0.4초)의 여유가 남습니다. 키를 늦게 누르는 것이 아니라 구멍을 넘긴 직후 곧바로 이동을 시작하는 것이 핵심입니다.
게이트가 보이고 나서 판정까지 걸리는 시간
게이트는 화면 위쪽(y=-20)에서 생성되어 스키어 높이의 판정 구간(y=344)까지 364px를 내려옵니다. 속도가 점수에 따라 변하므로 "미리 볼 수 있는 시간"도 같이 줄어듭니다. 아래 표는 같은 식으로 계산한 값입니다. 마지막 열은 그 점수에서 다음 게이트가 생성되기까지의 간격입니다.
| 점수 | 생성부터 판정까지(프레임) | 생성부터 판정까지(초) | 다음 게이트 생성 간격(프레임) |
|---|---|---|---|
| 0 | 140 | 2.33 | 95 |
| 10 | 89 | 1.48 | 80 |
| 20 | 65 | 1.08 | 65 |
| 27 | 55 | 0.91 | 55 |
| 36 | 46 | 0.76 | 55 |
처음에는 게이트가 2초 넘게 내려오지만 최종 난이도에서는 1초가 안 됩니다. 게이트 간격은 55프레임까지 줄어 판정이 끝나자마자 다음 게이트가 곧바로 이어지므로, 점수 27 이후에는 지금 게이트를 통과한 직후가 아니라 통과하기 전부터 다음 구멍의 위치를 눈으로 확인해 두어야 이동 시간(최대 30프레임)을 확보할 수 있습니다.
생명이 사라지는 방식: 한 게이트가 두 번 깎을 수 있다
게이트 판정과 나무 판정은 별개의 사건입니다. 게이트를 놓치면 생명 하나가 줄고, 같은 게이트의 나무에 부딪히면 생명 하나가 더 줄 수 있습니다. 예를 들어 구멍을 놓친 직후 급하게 한쪽으로 몸을 던졌는데 그쪽에 나무가 따라오고 있었다면 한 게이트에서 3개 중 2개를 잃게 됩니다. 생명이 1개 남은 상태에서는 어떤 판정이든 곧바로 게임이 끝나므로, 이미 구멍을 놓친 것이 확실해진 순간에는 억지로 구멍 쪽으로 돌아가기보다 나무와 거리를 벌려 다음 게이트를 노리는 편이 낫습니다. 이 게임에는 생명을 회복하는 방법이 없고, 놓친 게이트도 점수를 깎지 않으며 생명만 줄입니다.
점수 구간별 체감 변화
- 0~19점 - 속도가 2.6에서 5.45px/프레임까지 오르고 구멍은 150px에서 93px까지 좁아집니다. 가장 많이 배우는 구간이며 구멍이 넓어 키보드로도 여유가 있습니다.
- 20~26점 - 구멍 폭은 90px로 고정되고 속도와 간격이 계속 조여집니다. 구멍 폭이 더 줄지 않으므로 이 구간의 난이도 상승은 주로 시간 압박입니다.
- 27~35점 - 간격이 55프레임(약 0.92초)에서 멈추고 속도만 6.65에서 7.85px/프레임까지 오릅니다.
- 36점 이상 - 속도 8px/프레임, 구멍 90px, 간격 55프레임에서 더는 변하지 않습니다. 같은 난이도가 계속되므로 기록은 집중력과 실수 관리에 달립니다.
키보드로 화면 좌우 끝에서 끝까지(16px~464px) 가려면 90프레임, 약 1.5초가 걸립니다. 다음 구멍은 최대 150px만 떨어지므로 정중앙을 기본 위치로 삼으면 한 번의 이동은 최대 30프레임, 즉 0.5초 안에 끝납니다. 터치나 마우스로 드래그하는 경우 이 이동 시간이 거의 0이라 같은 점수라도 훨씬 쉽습니다.
실전 공략
- 통과 판정은 한순간이므로 구멍을 지나는 시점에만 안에 있으면 됩니다. 판정 직후 곧바로 다음 구멍 쪽으로 출발하세요.
- 이동 방향이 같은 쪽의 나무는 이전 게이트에서 늦게 도착하므로 출발 전에 나무의 가로 위치를 보세요. 나무와의 거리가 26px보다 가까우면 부딪힙니다.
- 다음 구멍의 중심은 이전 구멍 중심에서 좌우 150px를 넘지 않게 정해집니다. 화면 가장자리에 붙어 있을 필요가 없으니 중앙 쪽을 기본 위치로 삼으세요.
- 키보드로는 한 방향 키를 계속 누르는 것보다 끊어서 누르는 편이 정밀합니다. 구멍이 좁아지는 점수 20 이후에 특히 그렇습니다.
- 생명이 하나 남았을 때는 나무를 피하는 것을 우선하세요. 나무를 피하다가 놓친 게이트도 생명 하나를 잃기 때문에 어느 쪽이 덜 위험한지 따져 보세요.
흔한 실수와 한계
- 깃발 바깥쪽에서 안쪽을 보며 판단하면 틀립니다. 기준은 두 깃발 사이의 한가운데입니다.
- 점수와 생명은 이 게임 안에서만 의미가 있으며 아이템, 회복, 코스 변화 같은 요소는 없습니다. 생명은 늘지 않습니다.
- 게이트 위치와 나무 위치는 브라우저의 Math.random으로 정해지는 놀이용 난수이며, 같은 순서가 반복되도록 고정되어 있지 않습니다.
- 드래그 조작은 스키어가 순간이동하는 방식이라 실제 스키처럼 관성이 없습니다. 키보드 기록과 터치 기록을 직접 비교하기는 어렵습니다.
자주 묻는 질문
모바일에서도 플레이할 수 있나요?
네, 캔버스를 누르거나 좌우로 드래그하면 스키어가 손가락 위치로 이동합니다. 캔버스 위에서는 화면 스크롤이 일어나지 않도록 설정되어 있습니다.
게이트 간격이 매번 똑같나요?
게이트의 좌우 위치는 매번 무작위로 정해지고, 인접한 게이트끼리는 중심이 최대 150px까지만 어긋납니다. 구멍 폭과 등장 간격은 점수에 따라 정해진 식으로 줄어듭니다.
고주사율 모니터에서는 더 빨라지나요?
아닙니다. 게임 갱신은 초당 60회로 고정되어 있어 60Hz, 144Hz 모니터에서 속도가 같습니다.
최고 기록은 어디에 저장되나요?
브라우저의 localStorage에 ski-slalom-best라는 키로 통과한 게이트 수가 저장됩니다. 사이트 데이터를 지우면 사라지고 다른 기기나 브라우저와는 공유되지 않습니다.
게임이 끝나는 조건은 무엇인가요?
생명 3개가 모두 사라지는 것이 유일한 종료 조건입니다. 시간 제한은 없고 클리어도 없습니다.
일시정지 버튼이 있나요?
별도의 일시정지 버튼은 없습니다. 다만 탭을 다른 탭으로 바꾸거나 창을 가리면 브라우저가 화면 갱신을 멈추고, 돌아왔을 때 한 번에 최대 0.1초만 따라잡도록 되어 있어 그동안 진행이 몰아서 이루어지지 않습니다.
게이트를 놓치면 점수도 깎이나요?
아닙니다. 놓친 게이트는 생명만 하나 줄이고 점수는 그대로입니다. 점수는 통과에 성공한 게이트 수만 센 것입니다.
나무를 일부러 밀고 지나갈 수 있나요?
없습니다. 스키어 중심과 나무 중심의 가로 거리가 26px 미만인 순간 판정이 일어나면 생명이 줄어듭니다. 판정은 나무가 스키어 높이를 지나는 짧은 한 순간에만 이루어지므로, 그 시점에 가로로 멀리 있으면 안전합니다.
키보드와 터치 기록을 비교해도 되나요?
같은 최고 기록 칸에 저장되지만 조작 난이도가 크게 다릅니다. 터치는 손가락 위치로 즉시 이동하고 키보드는 초당 300px로 움직이므로, 점수를 다른 사람과 비교할 때는 조작 방식을 맞추는 것이 공정합니다.
다른 반사신경 게임도 즐겨보세요
점프로 장애물을 넘는 장애물 점프 게임, 틈새를 찾아 날아가는 틈새 비행 피하기 게임, 차선을 바꾸며 달리는 차선 피하기 레이싱 게임, 날아오는 탄을 피하는탄막 피하기 생존 게임도 해 보세요.