당구(포켓볼) 게임

흰 큐볼을 마우스로 드래그했다가 놓으면 반대 방향으로 튕겨 나갑니다. 빨간 공을 네 모서리의 포켓에 넣어보세요.

시도: 0/10성공: 0최고 기록: 0

흰 공 근처를 눌러 반대 방향으로 끌었다 놓으면 발사됩니다. 멀리 끌수록 세게 칩니다(최대 파워는 흰 공에서 90 떨어진 지점). 드래그 중 Esc 키를 누르면 취소됩니다.

이 게임에서 일어나는 일

이 포켓볼 게임은 "당구대 위의 공 두 개"로 단순화된 물리 퍼즐입니다. 흰 큐볼 하나와 빨간 목표 공 하나가 360×220 크기의 테이블 위에 있고, 네 모서리에 포켓이 있습니다. 큐볼을 뒤로 끌었다 놓아 목표 공을 맞히고, 목표 공이 포켓에 들어가면 1점입니다. 총 10번의 기회가 주어지므로 점수는 0에서 10 사이이며, 점수 자체가 "10번 중 몇 번 넣었는가"를 뜻합니다. 손의 감각보다 각도와 힘을 계산하는 쪽이 이기는 게임이라, 아래에 실제 코드 값으로 계산한 힘 표와 조준 예시를 정리했습니다.

규칙 정리

드래그 거리와 힘

속도는 끈 거리에 비례하고 마찰은 프레임마다 같은 비율로 작용하므로, 직선으로만 간다고 가정하면 이동 거리는 처음 속도에 비례합니다. 아래 표는 코드 상수로 빌드 시 계산한 값이며, 벽 반사와 충돌은 포함하지 않은 직선 이동 기준입니다. "1px당 각도"는 마우스를 1픽셀 움직일 때 발사 방향이 바뀌는 각도로, 오래 끌수록 미세한 조준이 가능하다는 사실을 보여 줍니다.

끈 거리힘처음 속도정지까지 이동 거리정지까지 시간1px당 각도
89%0.80약 533.1초7.13도
2022%2.00약 1394.2초2.86도
3033%3.00약 2104.6초1.91도
4550%4.50약 3175.1초1.27도
6067%6.00약 4245.5초0.95도
7583%7.50약 5315.7초0.76도
90100%9.00약 6395.9초0.64도

테이블 가로가 360이므로 힘 50%(끈 거리 45)에서도 직선으로 약 317를 가서 가로 길이에 가깝고, 최대 힘이면 약 639로 테이블을 두 번 가까이 가로지릅니다. 공이 멈추는 데 걸리는 시간도 최대 힘에서 약 5.9초로 길어서, 세게 치면 목표 공이 벽에 여러 번 부딪히며 포켓을 놓칠 가능성이 높습니다. 반대로 힘 20% 정도에서도 약 139를 가므로 근거리 샷에는 이 정도면 충분합니다.

포켓 위치

포켓은 테이블의 네 모서리에만 있고 가운데 변에는 없습니다. 공의 중심은 벽에서 반지름 8보다 가까워질 수 없어서 모서리 포켓의 중심과 공이 접근 가능한 가장 구석 사이는 약 0.6에 불과합니다. 즉 벽을 따라 굴러 모서리에 도달한 공도 포켓에 빠집니다.

포켓중심 좌표(x, y)인식 반지름
좌상단(8.4, 8.4)14
우상단(351.6, 8.4)14
좌하단(8.4, 211.6)14
우하단(351.6, 211.6)14

계산 예시: 고스트 볼 조준

포켓볼의 기본 조준법은 목표 공이 포켓 쪽으로 가려면 큐볼이 어느 지점에서 맞아야 하는지를 먼저 정하는 것입니다. 목표 공 중심에서 포켓 반대 방향으로 공 지름(16)만큼 떨어진 "가상 공(고스트 볼)" 위치에 큐볼 중심이 도달하면, 충돌 방향이 목표 공→포켓 방향과 일치합니다.

예시 1. 직접 겨냥. 목표 공이 (260, 60)에 있고 우상단 포켓(351.6, 8.4)을 노린다고 하겠습니다. 포켓까지는 약 105, 고스트 볼 위치는 (246.1, 67.9)이고, 큐볼은 시작 위치에서 이 점을 향해 수평선 기준 13.5도 위쪽(화면 위)으로 약 181를 가야 합니다. 이때 큐볼 진행 방향과 목표 공→포켓 방향의 각도 차이는 약 15.9도(컷 각)입니다. 코드와 같은 물리로 시뮬레이션하면, 방향이 정확할 때 끈 거리 40~90 구간에서 49가지 값이 성공하고, 40보다 짧게 끌면 힘이 모자라 목표 공이 포켓까지 가지 못합니다.

예시 2. 허용 오차. 같은 상황에서 끈 거리 64로 쳤을 때 방향이 정확한 각도에서 위·아래로 ±0.50도 안팎까지는 성공합니다(0.25도 간격으로 확인). 위 표의 1px당 각도를 보면 끈 거리 90에서도 1픽셀이 0.64도라서, 거리가 먼 샷일수록 허용 오차가 손의 정밀도에 근접합니다. 목표 공이 포켓에서 멀수록 어려운 이유가 이 숫자에 있습니다.

예시 3. 정밀도와 힘의 맞교환. 방향과 힘이 같은 드래그 한 번으로 정해지기 때문에 둘은 따로 조절되지 않습니다. 끈 거리 20에서는 1픽셀이 2.9도나 바뀌지만 75에서는 0.76도입니다(캔버스가 360px 폭으로 표시될 때 기준이며, 화면에서 더 작게 줄어 표시되면 1픽셀의 각도가 더 커집니다). 그러므로 멀리 있는 목표 공을 노릴 때는 힘이 큰 샷을 감수해야 정밀하고, 힘을 줄이면 방향이 거칠어집니다. 가까운 목표 공이 먼 공보다 훨씬 쉬운 이유입니다.

코드 규칙에서 나오는 실전 팁

흔한 실수와 오해

한계와 저장되는 정보

이 게임은 공 두 개와 네 개의 모서리 포켓으로 이루어진 단순한 모델이라 실제 당구나 포켓볼의 스핀, 쿠션 마찰, 여러 공의 배치, 규칙(파울 후 상대 배치 등)은 반영하지 않습니다. 또 연습용으로는 시험 샷이 불가능하며 10번의 기회가 바로 기록이 됩니다. 최고 기록은 이 브라우저의 localStorage에 pool-billiards-best 키로 저장되며, 게임이 끝났을 때에만 갱신됩니다. 서버 전송이나 기기 간 동기화는 없고, 사이트 데이터를 삭제하면 사라집니다.

다른 물리·타이밍 게임도 즐겨보세요

비슷한 감각의 게임을 원한다면 미니 골프 게임이나컬링 스톤 게임, 벽에 튕기는 퍽을 다루는 에어하키 게임도 확인해보세요.

자주 묻는 질문

공이 회전(스핀)도 하나요?

아니요. 이 게임은 직선 이동과 벽·공 충돌만 구현한 단순화된 물리 게임으로, 실제 당구처럼 회전을 주는 기능은 없습니다.

목표 공의 위치가 매번 바뀌나요?

목표 공이 포켓에 들어갔을 때만 새 위치로 바뀝니다. 못 넣었다면 멈춘 자리에 그대로 있습니다. 큐볼 시작 위치와 너무 가까이 멈춘 경우에는 겹침을 피하려고 새 위치로 옮겨집니다.

큐볼이 포켓에 빠지면 어떻게 되나요?

파울로 처리되어 그 샷은 점수 없이 끝나고, 시도 횟수 1회가 소모됩니다. 큐볼은 시작 위치로 돌아옵니다.

고주사율 모니터에서 공이 더 빨리 움직이나요?

아니요. 물리 계산을 초당 60번의 고정 간격으로 처리하므로 화면 주사율과 관계없이 같은 속도로 움직입니다.

최고 기록은 언제 저장되나요?

10번의 시도를 모두 마친 뒤 그 판의 성공 횟수가 이전 최고 기록보다 높을 때 localStorage(pool-billiards-best)에 저장됩니다. 새 게임을 눌러 중간에 끝내면 그 판은 기록되지 않습니다.