이 게임의 판정은 어떻게 이루어지나
캔버스(가로 480px, 세로 400px) 아래쪽에는 y=210~340px의 노란 띠가 있습니다. 공은 중력으로 떨어지고, 이 띠에 들어와 있는 동안 입력이 들어오면 위로 튕겨 올라가며 1점이 오릅니다. 반대로 띠의 아래 경계(340px)를 넘도록 입력이 없으면 생명이 하나 줄고, 그 공은 화면 위에서 다시 떨어지기 시작합니다. 생명 3개를 모두 잃으면 게임이 끝납니다.
여기서 알아둘 점이 두 가지 있습니다. 첫째, 판정은 "공을 정확히 눌렀는가"가 아니라 "그 순간 띠 안에 있는 공이 있는가"입니다. 캔버스 안이라면 어디를 눌러도 되고, 띠 안의 공이 둘 이상일 때만 누른 위치에서 가장 가까운 공이 선택됩니다. 둘째, 클릭이 인정되는 범위는 띠 위쪽 10px(y=200)부터 아래 경계 340px까지이며, 이미 친 공은 위로 올라가 y=190 위쪽을 지나기 전까지 다시 칠 수 없습니다. 같은 공을 연타해도 점수가 오르지 않습니다.
점수가 오를수록 달라지는 것
- 중력: min(0.26, 0.14 + 점수×0.0025)입니다. 점수 0에서 0.14, 48점에서 0.26에 도달하고 그 이후로는 고정됩니다.
- 공의 개수: 0~7점은 1개, 8점부터 2개, 16점부터 3개이며 최대 3개입니다. 공마다 가로 위치(왼쪽 130px, 가운데 240px, 오른쪽 350px)와 색(주황·초록·하늘색)이 고정되어 있습니다.
- 튕겨 오르는 세기: 칠 때마다 속도 9.0~10.5 사이의 무작위 값(위 방향)으로 올라갑니다. 중력이 약할수록 더 높이 올라가므로 낮은 점수에서는 공이 화면 위로 잠시 사라질 정도로 높이 솟습니다.
한 번 튕긴 공의 최고 높이는 속도² ÷ (2×중력)입니다. 초기 중력 0.14에서는 속도에 따라 약 289~394px, 중력 0.26에서는 약 156~212px 위로 올라갑니다. 난이도가 오르는 이유는 공이 빨리 내려오고 개수가 늘어서입니다.
한 번에 쓸 수 있는 시간: 시뮬레이션 표
게임 로직은 화면 주사율과 상관없이 초당 60단계로 고정해 계산합니다. 아래 표는 같은 규칙을 단계별로 계산한 값입니다. "처음 낙하"는 위에서 처음 떨어지는 공이 클릭 가능한 높이(200px)에서 340px까지 내려가는 데 걸리는 시간, "튕긴 뒤 낙하"는 띠 중간(y=275)에서 속도 9.75로 친 공이 올라갔다 다시 같은 구간을 내려오는 시간입니다. "되돌아오는 주기"는 친 순간부터 다시 클릭 가능 높이에 내려올 때까지의 시간 범위입니다(속도 9.0과 10.5 기준).
| 점수 | 중력 | 공 수 | 처음 낙하 시간 | 튕긴 뒤 낙하 시간 | 되돌아오는 주기 |
|---|---|---|---|---|---|
| 0점~ | 0.14 | 1개 | 16단계 (약 267ms) | 14단계 (약 233ms) | 2.0~2.4초 |
| 8점~ | 0.16 | 2개 | 15단계 (약 250ms) | 15단계 (약 250ms) | 1.7~2.0초 |
| 16점~ | 0.18 | 3개 | 14단계 (약 233ms) | 15단계 (약 250ms) | 1.5~1.8초 |
| 24점~ | 0.20 | 3개 | 13단계 (약 217ms) | 15단계 (약 250ms) | 1.3~1.6초 |
| 32점~ | 0.22 | 3개 | 12단계 (약 200ms) | 14단계 (약 233ms) | 1.2~1.4초 |
| 40점~ | 0.24 | 3개 | 12단계 (약 200ms) | 15단계 (약 250ms) | 1.1~1.3초 |
| 48점~ | 0.26 | 3개 | 12단계 (약 200ms) | 15단계 (약 250ms) | 1.0~1.2초 |
예시 1: 점수 0, 중력 0.14에서 처음 떨어지는 공은 클릭 가능 높이에서 아래 경계까지 16단계, 약 267ms 머뭅니다. 사람의 반응 시간이 대개 0.2초 안팎이라고 알려져 있어 여유가 크지 않습니다. 공이 구간에 들어오는 것을 보고 누르기보다 구간 직전에 미리 예측해서 누르는 편이 안정적입니다. 예시 2: 점수 48 이후(중력 0.26)에서는 처음 낙하 시간이 12단계(약 200ms)로 줄고 튕긴 뒤 낙하는 15단계(약 250ms)이며, 공 3개가 1.0~1.2초 주기로 번갈아 돌아옵니다. 이때 평균적으로 약 333~400ms마다 한 번씩 누르게 됩니다.
코드 규칙에서 나오는 요령
- 눈으로 보고 누르기보다 리듬을 만드세요. 같은 공을 같은 높이에서 치면 되돌아오는 시간이 거의 일정하므로(표의 주기 범위), 첫 한두 번으로 박자를 파악한 뒤 소리와 시각을 함께 이용해 같은 간격으로 누르는 것이 유리합니다.
- 띠 아래쪽에서 칠수록 위험하지만 위쪽에서 칠수록 안전합니다. 아래 경계(340px)를 넘는 즉시 실패로 판정되므로, 띠의 중간 높이(y≈275 이전)에서 치는 습관이 실수를 줄여 줍니다.
- 공이 여러 개일 때는 가장 아래쪽 공부터 처리하세요. 클릭은 가장 가까운 공을 고르는데, Space 키를 쓰면 띠 안에서 가장 아래에 있는 공(가장 급한 공)이 선택됩니다. 마우스로 칠 때도 가장 급한 공 근처를 누르면 의도와 같은 공이 선택됩니다.
- 8점·16점 구간 직전을 준비하세요. 8점에서 두 번째 공이, 16점에서 세 번째 공이 위에서 새로 떨어지기 시작합니다. 새 공은 위에서 속도 0으로 시작하므로 이미 돌고 있는 공과 박자가 다르며, 두 가지 박자를 동시에 관리해야 합니다.
- 실패 후 공은 위에서 다시 시작합니다. 놓친 공은 y=-20~-80 위치에서 속도 0으로 다시 떨어지므로 약간의 여유 시간이 생기고, 그동안 다른 공에 집중할 수 있습니다.
연습 순서 제안
처음에는 점수 0~7 구간에서 공 하나만 상대하므로, 띠 안에서 공이 어느 높이일 때 누르는지 감각을 익히는 시간으로 쓰세요. 눈으로 공의 위치를 따라가기보다 노란 띠의 위쪽 경계를 응시하고 공이 경계를 지나는 순간 누르는 방식이 안정적입니다. 8점 이후에는 한 공이 올라가는 동안 다른 공이 내려오기 때문에, 시선을 한 곳(띠 중앙)에 두고 주변시로 두 공의 높이를 비교하는 방식이 눈동자를 움직이는 방식보다 덜 놓칩니다. 이것은 코드 규칙(공마다 고정된 세로 줄, 입력은 위치 무관)에서 나오는 일반적인 요령이며, 개인별로 맞는 방식은 다를 수 있습니다.
공이 화면 위로 사라지는 구간
띠 중간(y=275)에서 속도 v로 친 공이 올라가는 정점은 275 − v² ÷ (2×중력)입니다. 캔버스 맨 위가 y=0이므로 값이 음수이면 공의 중심이 화면 위로 벗어나 한동안 보이지 않습니다. 아래 표는 코드의 중력 공식에 속도의 양 끝값(9.0과 10.5)을 넣어 계산한 정점입니다.
| 점수 | 중력 | 속도 9.0일 때 정점 y | 속도 10.5일 때 정점 y |
|---|---|---|---|
| 0점~ | 0.14 | -14 | -119 |
| 8점~ | 0.16 | 22 | -70 |
| 16점~ | 0.18 | 50 | -31 |
| 24점~ | 0.20 | 73 | -1 |
| 32점~ | 0.22 | 91 | 24 |
| 48점~ | 0.26 | 119 | 63 |
속도 9.0으로 친 공은 3점부터, 10.5로 친 공은 25점부터 정점이 화면 안(y가 0 이상)에 머뭅니다. 그 전까지는 칠 때마다 공이 위쪽 밖으로 나갔다가 돌아옵니다. 공이 보이지 않는 동안에도 가로 위치는 세 줄(130·240·350px) 중 하나로 고정이라 낙하 지점은 달라지지 않으므로, 점수가 낮을 때는 공을 눈으로 쫓기보다 띠의 위쪽 경계를 보고 있다가 나타나는 순간에 맞춰 누르는 편이 낫습니다. 정점이 화면 안으로 들어오는 20점대 이후에는 공이 계속 보이기 때문에 위쪽에서 내려오는 궤적을 미리 읽을 수 있습니다.
새 공이 합류하는 순간
점수가 8점과 16점이 되면 다음 단계에서 새 공이 만들어집니다. 새 공은 y=-20~-100 사이의 무작위 높이에서 속도 0으로 출발해 해당 점수의 중력으로 떨어지고, 처음 클릭 가능한 높이(200px)에 닿을 때까지 아래 시간이 걸립니다.
| 합류 시점 | 중력 | 가장 높은 곳에서 출발 | 가장 낮은 곳에서 출발 |
|---|---|---|---|
| 8점 | 0.16 | 61단계 (약 1017ms) | 52단계 (약 867ms) |
| 16점 | 0.18 | 58단계 (약 967ms) | 49단계 (약 817ms) |
즉 8번째 점수를 올린 뒤 약 0.8~1.0초 안에 새 공이 띠에 도착하므로, 그 사이에 이미 돌고 있는 공의 다음 타이밍도 같이 챙겨야 합니다. 새 공이 떨어지는 줄은 8점에서 가운데(240px), 16점에서 오른쪽(350px)입니다. 마우스나 터치로 칠 때는 새 공이 있는 줄 근처를 눌러야 다른 공이 대신 선택되지 않습니다.
이상적인 입력으로 본 최단 진행 시간
코드 규칙을 컴퓨터로 시뮬레이션해, 공이 y=275에 처음 닿는 단계마다 가장 낮은 공 하나를 누르고 튕김 속도를 평균값 9.75로 고정했을 때의 진행 시간을 구했습니다. 이 가정에서는 8점에 16.2초, 16점에 23.9초, 24점에 28.3초, 48점에 39.7초가 걸립니다. 사람이 측정한 기록이 아니라 규칙에서 나온 이론값이며, 실제 판에서는 속도가 매번 9.0~10.5 사이에서 달라지므로 그대로 나오지 않습니다.
이 값에서 읽을 수 있는 점이 두 가지 있습니다. 첫째, 공이 하나뿐인 초반 8점이 가장 오래 걸립니다. 한 번 치면 같은 공이 2.0~2.4초 뒤에야 돌아오기 때문에, 이 구간은 빨리 끝낼 방법이 없고 한 번도 놓치지 않는 것만 중요합니다. 둘째, 공이 둘이 되는 8점 이후에는 같은 점수를 쌓는 시간이 눈에 띄게 짧아집니다. 8점에서 16점까지 8점을 올리는 데 약 7.7초, 16점에서 24점까지는 약 4.4초가 듭니다.
상황별 활용 예시
예시 1. 키보드로 하는 PC 플레이어. Space 키는 클릭 가능한 공 중 가장 아래에 있는 공을 자동으로 고르므로 마우스 위치를 신경 쓸 필요가 없습니다. 8점이 넘어 공이 둘이 되면 점수 8 기준 주기(1.7~2.0초)를 공 수 2로 나눈 약 850~1000ms마다 한 번씩 누르는 리듬이 됩니다. 키를 꾹 누르고 있으면 반복 입력(e.repeat)은 무시되므로 매번 뗐다 눌러야 합니다.
예시 2. 휴대폰 터치 플레이어. 캔버스에는 터치 스크롤이 막혀 있어 화면을 눌러도 페이지가 밀리지 않습니다. 다만 손가락이 닿는 위치가 판정에 쓰이므로, 공이 셋일 때 여러 공이 동시에 띠 안에 있으면, 화면 가운데만 계속 눌러서는 가운데 줄 공이 먼저 선택되어 양옆 공이 뒤로 밀릴 수 있습니다(띠 안에 칠 수 있는 공이 하나뿐이면 어디를 눌러도 그 공이 선택됩니다). 양옆 공을 먼저 쳐야 할 때는 그쪽 줄을 눌러 주세요. 엄지 한 손으로 하면 가운데·좌우 이동이 번거로우니 두 손가락을 쓰는 편이 안정적입니다.
흔한 실수와 한계
화면 크기를 줄여 보는 휴대폰에서는 캔버스가 축소 표시되지만 터치 위치는 원래 480×400 좌표로 환산되므로 판정에는 영향이 없습니다. 다만 손가락이 캔버스 밖을 누르면 입력이 전달되지 않습니다. 또 이미 친 공이 위로 올라가는 동안은 클릭이 무시되므로 연타해도 점수가 오르지 않고 오히려 다른 공의 타이밍을 놓칩니다.
이 게임은 단순한 규칙 하나로 이루어져 있습니다. 콤보, 정확도에 따른 추가 점수, 일시정지, 난이도 선택, 효과음 끄기 옵션은 없습니다. 공의 처음 낙하 높이와 튕겨 오르는 속도에는 Math.random이 쓰이므로 같은 판이 반복되지 않으며, 이는 추첨이나 보안을 위한 난수가 아닙니다. 점수 상한은 없고 중력이 0.26에 닿는 48점 이후는 속도가 같아 숙련도가 곧 생존 시간이 됩니다.
최고 점수 저장
게임이 끝나면 최고 점수가 이 브라우저의 localStorage juggling-best 키에 저장됩니다. 다른 기기와 동기화되지 않고 서버로도 전송되지 않습니다. 지우려면 브라우저의 사이트 데이터 삭제 기능을 쓰세요.
다른 타이밍 게임도 즐겨보세요
비슷하게 정확한 타이밍이 필요한 게임을 원한다면 타이밍 블록 쌓기 게임도, 순간 반응속도를 측정하고 싶다면 반응속도 테스트도, 표적을 빠르게 클릭하는 훈련은 에임 트레이너 게임을 확인해보세요.
자주 묻는 질문
공을 놓쳐도 화면 아래로 떨어지지 않고 계속 나오나요?
네, 공을 놓치면 생명이 하나 줄어들고 해당 공은 화면 위에서 다시 새로 떨어지기 시작합니다.
여러 공이 동시에 노란 구간에 들어오면 어떻게 하나요?
클릭한 위치에서 가장 가까운 공이 반응합니다. Space 키를 쓰면 구간 안에서 가장 아래에 있는 공이 선택됩니다. 여러 공이 겹칠 때는 급한 공부터 순서대로 빠르게 누르세요.
공이 아닌 곳을 눌러도 점수가 오르나요?
네, 노란 구간 안에 칠 수 있는 공이 하나라도 있으면 캔버스 안 어디를 눌러도 가장 가까운 그 공이 튕겨 오릅니다. 구간 안에 공이 없을 때의 클릭은 아무 효과가 없고 생명도 줄지 않습니다.
왜 점수가 8점, 16점일 때 갑자기 어려워지나요?
그 시점에 공이 한 개씩 더 추가되기 때문입니다. 동시에 중력이 점수에 비례해 조금씩 커져 낙하 속도도 함께 빨라집니다.
키보드로도 플레이할 수 있나요?
네, 게임이 진행 중일 때 Space 키가 클릭과 같은 효과를 냅니다. 게임 시작은 "게임 시작" 버튼으로 합니다.
왜 공이 화면 위로 올라가서 보이지 않을 때가 있나요?
점수가 낮을수록 중력이 약해 튕긴 공이 캔버스 위쪽 밖까지 올라가기 때문입니다. 위 정점 표처럼 속도 10.5로 친 공은 25점 전까지는 화면 밖으로 나갈 수 있습니다. 가로 줄은 변하지 않으니 내려오는 위치는 같습니다.
모니터 주사율이 144Hz면 게임이 더 빨라지나요?
아닙니다. 게임 로직은 화면이 몇 번 그려지는지와 상관없이 초당 60단계로 고정되어 있어 60Hz와 144Hz에서 공의 낙하 속도가 같습니다. 화면만 더 부드럽게 보일 뿐 판정 시간은 같습니다.
다른 탭으로 나갔다 오면 어떻게 되나요?
대부분의 브라우저는 보이지 않는 탭의 화면 갱신을 멈춥니다. 돌아왔을 때 밀린 시간이 한꺼번에 처리되지 않도록 한 번에 따라잡는 시간을 100ms(약 6단계)로 제한해 두었습니다. 다만 일시정지 버튼은 없으므로 자리를 비울 때는 판을 끝내고 나가는 편이 안전합니다.
최고 점수를 지우려면 어떻게 하나요?
화면에 삭제 버튼은 없습니다. 브라우저의 사이트 데이터 삭제 기능으로 이 사이트의 저장 데이터를 지우면 juggling-best 값이 함께 사라집니다.