방울 터뜨리기의 기본 구조
이 게임은 위쪽에 쌓여 있는 색깔 방울 무더기를 향해 아래에서 방울을 한 개씩 쏘아 올리는 퍼즐입니다. 쏜 방울이 무더기에 닿으면 그 자리에 붙고, 같은 색 방울이 서로 3개 이상 이어지면 한꺼번에 터집니다. 시간제한은 없고 판이 위에서 내려오지도 않으며, 오직 내가 쏜 방울이 얼마나 효율적으로 쌓이느냐에 따라 승패가 갈립니다. 그래서 빠른 손놀림보다 "어디에 붙일까"를 미리 읽는 계산이 더 중요합니다. 아래에서는 코드에서 읽은 격자 구조, 벽 반사, 점수 계산, 종료 조건을 숫자와 함께 설명합니다.
게임판 구조: 줄과 칸
방울은 육각형으로 맞물린 격자에만 붙습니다. 홀수 번째 줄(1, 3, 5번째…)은 6칸, 짝수 번째 줄(2, 4번째…)은 5칸이며 짝수 번째 줄은 반 칸씩 안쪽으로 밀려 있습니다. 방울 반지름은 16, 줄 간격은 28이고 캔버스는 232×380입니다. 아래 표는 이 상수로 빌드 시 계산한 각 줄의 정보입니다.
| 줄 | 칸 수 | 중심 높이(y) | 구분 |
|---|---|---|---|
| 1번째 | 6칸 | 36 | 시작 배치 |
| 2번째 | 5칸 | 64 | 시작 배치 |
| 3번째 | 6칸 | 92 | 시작 배치 |
| 4번째 | 5칸 | 120 | 시작 배치 |
| 5번째 | 6칸 | 148 | 빈 공간(쌓이는 곳) |
| 6번째 | 5칸 | 176 | 빈 공간(쌓이는 곳) |
| 7번째 | 6칸 | 204 | 빈 공간(쌓이는 곳) |
| 8번째 | 5칸 | 232 | 빈 공간(쌓이는 곳) |
| 9번째 | 6칸 | 260 | 빈 공간(쌓이는 곳) |
| 10번째 | 5칸 | 288 | 종료 구역 |
| 11번째 | 6칸 | 316 | 종료 구역 |
시작할 때는 위의 4줄에 방울 22개가 채워져 있고, 처음부터 3개 이상 이어진 같은 색 무리가 없도록 배치됩니다. 경고선(붉은 점선)은 10번째 줄 윗부분에 그려지며, 방울이 이 줄 이하에 놓인 채로 남으면 게임이 끝납니다. 결국 방울을 쌓아 둘 수 있는 빈 칸은 5~9번째 줄에 해당하는 28칸뿐입니다(50칸 − 시작 22칸).
조준과 벽 반사
- 발사 위치와 속도: 캔버스 아래쪽 중앙(x=116, y=350)에서 초당 320px의 일정한 속도로 날아갑니다. 속도는 항상 같고 각도만 선택합니다.
- 조준 각도: 수평 기준 15도에서 165도 사이이며 처음에는 90도(수직)입니다. 수평선에서 15도 이내로 눕혀 쏘는 것은 불가능합니다.
- 버튼 조준: ◀·▶ 버튼은 한 번에 5도씩 움직여 31단계 중 하나를 고릅니다. 가운데(90도)에서 끝(15도 또는 165도)까지 15번 누르면 닿습니다.
- 벽 반사: 좌우 벽에 닿으면 가로 방향만 뒤집혀 튕깁니다. 반사할 때 속력 손실은 없으며, 방울 중심이 움직일 수 있는 가로 폭은 200입니다.
- 붙는 방식: 날아가던 방울이 기존 방울과 일정 거리(반지름의 1.9배) 안에 들어오거나 천장에 닿으면 그 자리에서 멈추고, 가장 가까운 빈 칸에 붙습니다.
- 한 번에 한 발: 방울이 날아가는 동안에는 다음 발사가 막혀 있고, 마우스·터치로 하는 조준도 비행이 끝난 뒤에 다시 반영됩니다.
각도별로 천장까지 올라가는 비행 시간과 벽 반사 횟수를 계산하면 아래와 같습니다. 발사 지점에서 천장 높이까지의 세로 거리는 약 322이고, 반사 횟수는 이 거리를 올라가는 동안의 대략적인 값입니다. 중간에 방울 무더기에 닿으면 그 시점에 멈춥니다.
| 발사 각도 | 천장까지 비행 시간 | 가로 이동 거리 | 벽 반사 횟수 |
|---|---|---|---|
| 15도 | 3.89초 | 1202 | 6회 |
| 30도 | 2.01초 | 558 | 3회 |
| 45도 | 1.42초 | 322 | 2회 |
| 60도 | 1.16초 | 186 | 1회 |
| 75도 | 1.04초 | 86 | 0회 |
| 90도 | 1.01초 | 0 | 0회 |
수직에 가까울수록 빠르고 정확하며, 낮은 각도일수록 벽에 여러 번 튕겨 비행 시간이 길어집니다. 15도로 쏘면 천장까지 3.9초가 걸리고 벽에 6번 튕깁니다. 그만큼 조준 오차가 크게 벌어지므로 낮은 각도는 "모서리 쪽 빈칸을 겨냥할 때만" 쓰는 편이 좋습니다.
터뜨리는 규칙과 점수 계산
- 터지는 조건: 방금 붙인 방울을 기준으로 인접한 같은 색 방울을 이어서 세어 3개 이상이면 모두 터집니다. 방울 한 개는 최대 6개의 이웃(좌우, 위 2칸, 아래 2칸)과 접합니다.
- 떨어지는 방울: 터진 뒤 첫 줄(천장)과 이어지는 연결이 끊긴 방울은 색과 상관없이 모두 떨어져 사라집니다.
- 점수: 터진 방울 1개당 10점, 연결이 끊겨 떨어진 방울 1개당 5점입니다.
- 다음 방울 색: 쏘고 나면 대기 중이던 색이 발사대로 올라가고 새 대기 색이 정해집니다. 색은 지금 판에 남아 있는 색 중에서만 뽑으므로, 한 색을 모두 없앴다면 그 색은 다시 나오지 않습니다.
- 승리와 패배: 판의 방울을 모두 없애면 승리, 터지지 않고 남은 방울이 경고선 줄(10번째) 이하에 있으면 패배입니다. 같은 발사로 그 줄에 붙은 방울이 터지며 사라졌다면 패배가 아닙니다.
터뜨린 개수와 떨어진 개수에 따른 점수를 표로 정리하면 다음과 같습니다. 같은 3개를 터뜨려도 아래 방울이 줄줄이 떨어지면 점수가 크게 달라집니다.
| 터진 개수 | 떨어진 0개 | 떨어진 3개 | 떨어진 6개 |
|---|---|---|---|
| 3개 | 30점 | 45점 | 60점 |
| 4개 | 40점 | 55점 | 70점 |
| 5개 | 50점 | 65점 | 80점 |
| 6개 | 60점 | 75점 | 90점 |
| 8개 | 80점 | 95점 | 110점 |
계산 예시
예시 1. 몇 발을 틀리면 끝날까. 시작 상태에서 4줄만 채워져 있고 경고선 줄은 10번째입니다. 같은 열 근처에 터지지 않는 방울을 연달아 붙이면 5번째 줄부터 10번째 줄까지 쌓이는 데 6발이면 충분합니다. 즉 이론상 연속 6번만 아무것도 못 터뜨려도 질 수 있는 구조입니다. 반대로 말하면, 한 발마다 "터뜨릴 수 있는 곳"이 있는지 보고 쏘는 것이 핵심입니다.
예시 2. 연쇄 점수. 4개를 터뜨렸고 아래에 매달려 있던 방울 3개가 떨어졌다면 4×10 + 3×5 = 55점입니다. 5개를 터뜨리고 6개가 떨어졌다면 5×10 + 6×5 = 80점으로, 터진 개수가 비슷해도 떨어진 개수가 점수를 1.6배로 만듭니다.
예시 3. 낮은 각도의 대가. 15도로 쏘면 천장까지 3.89초, 90도로 쏘면 1.01초입니다. 비행 시간이 3.9배 차이나는 것은 속도가 같아도 지나가는 경로가 그만큼 길기 때문입니다. 시간제한이 없는 게임이라 느린 것은 문제가 아니지만, 경로가 길수록 각도 5도 오차가 목표 지점에서 멀리 벌어집니다.
전략: 규칙에서 나오는 것만
- 매달린 방울을 노리세요. 점수의 절반은 "떨어지는 방울"에서 나옵니다. 위쪽 줄과 연결된 고리를 끊는 위치에 쏘면 한 번에 많이 떨어집니다. 천장(첫 줄)에 붙은 방울은 떨어지지 않고 같은 색을 맞혀 터뜨려야만 사라집니다.
- 한 색이 사라지면 쉬워집니다. 판에 없는 색은 더 나오지 않으므로, 소수 색을 먼저 정리하면 남은 색의 연결이 쉬워집니다.
- 가장 길게 내려온 열을 먼저 정리하세요. 패배는 가장 아래 방울이 경고선 줄에 닿는 순간 정해지므로, 평균 높이보다 가장 낮은 열의 깊이를 줄이는 쪽이 안전합니다.
- 대기 색을 활용하세요. 화면 오른쪽 위에 다음에 쏠 색이 표시됩니다. 지금 방울로 터뜨릴 수 없는 판이라면 다음 방울이 맞을 자리를 만들어 주는 용도로 쓰세요.
- 벽 반사는 막힌 곳 뒤로 돌아갈 때 씁니다. 정면이 막힌 열이 있어도 반사를 활용하면 옆 열 뒤쪽의 빈칸에 닿을 수 있습니다. 다만 낮은 각도일수록 오차가 커지는 점을 감안하세요.
흔한 실수와 오해
- 2개만 이어져도 터진다고 생각하기 쉽지만, 3개 이상이어야 합니다. 2개 이어진 곳에 같은 색을 붙이면 3개가 되어 터집니다.
- 가장 아래 줄에 붙이면 안전하다고 생각하는 경우가 있지만, 경고선 줄 이하에 남으면 바로 끝나므로 오히려 가장 위험합니다.
- 위에서 내려오는 방울은 없습니다. 판이 서서히 내려오는 규칙이 없으므로 시간에 쫓길 필요가 없습니다.
- 대각선 이웃도 인접으로 취급합니다. 육각 격자라 한 방울당 이웃이 6개이며, 위·아래 줄은 반 칸 어긋나 있어 사각 격자의 상하 인접과 다릅니다.
한계와 저장되는 정보
색은 4가지(빨강, 파랑, 초록, 노랑)이며 색 이외의 구분 표시는 없습니다. 색각 특성에 따라 빨강·초록이 구분하기 어려울 수 있으니, 이 점이 불편하다면 다른 퍼즐 게임을 권합니다. 레벨, 아이템, 특수 방울은 없습니다. 방울 색 선택과 초기 배치는 Math.random()으로 정해지며 보안용 난수가 아닙니다. 최고 점수는 이 브라우저의 localStorage에 bubble-shooter-best 키로 저장되고, 서버 전송이나 기기 간 동기화는 없습니다. 브라우저의 사이트 데이터를 삭제하면 기록도 사라집니다.
다른 아케이드 게임도 즐겨보세요
패들로 공을 튕겨 벽돌을 깨는 게임이 궁금하다면 벽돌깨기 게임을, 같은 색을 맞추는 다른 방식을 원한다면 카드 짝 맞추기 게임을, 벽에 튕기는 궤적 계산이 재미있었다면 당구(포켓볼) 게임도 확인해보세요.
자주 묻는 질문
같은 색이 2개만 모이면 터지지 않나요?
네. 같은 색이 서로 연결된 개수가 3개 이상이어야 터집니다. 2개만 연결된 상태로는 그대로 남아 있고, 그 옆에 같은 색을 붙이면 3개가 되어 터집니다.
모바일에서는 어떻게 조준하나요?
캔버스를 누른 채 손가락을 움직이면 그 방향으로 조준선이 움직이고, 손을 떼면 발사됩니다. 정밀하게 맞추려면 캔버스 아래의 ◀·▶ 버튼으로 5도씩 조정한 뒤 "발사" 버튼을 눌러도 됩니다.
방울이 경고선에 닿으면 바로 끝나나요?
방울이 경고선 줄(10번째) 이하의 칸에 붙은 상태로 남으면 끝납니다. 같은 발사로 터져서 사라졌다면 끝나지 않습니다.
떨어지는 방울은 색과 상관없나요?
네. 터진 뒤 천장과의 연결이 끊긴 방울은 색과 관계없이 모두 떨어지고, 1개당 5점을 줍니다.
다음 방울 색은 어떻게 정해지나요?
현재 판에 남아 있는 색 중에서 무작위로 정해집니다. 특정 색을 모두 없애면 그 색은 더 나오지 않습니다.
최고 점수는 어디에 저장되나요?
이 브라우저의 localStorage(bubble-shooter-best)에만 저장되며 다른 기기와 공유되지 않습니다. 사이트 데이터를 지우면 함께 사라집니다.