스네이크 — 먹을수록 길어지는 뱀

먹이를 먹으면 몸이 한 칸씩 길어지고, 벽이나 자기 몸에 닿으면 끝나는 고전 게임이에요. 판은 20×20 이고 뱀은 길이 3 으로 시작해요. 먹이를 다섯 개 먹을 때마다 조금씩 빨라져서, 후반에는 «어디로 갈지» 를 미리 정해 두지 않으면 손이 못 따라가요. 벽 통과 모드를 켜면 벽 대신 반대편에서 나와요. 최고 기록은 이 브라우저에만 저장되고 설치·회원가입이 없어요.

사용 방법

  1. 방향키(또는 W·A·S·D)나 아래 십자 버튼으로 방향을 바꿔요. 폰에서는 판을 그 방향으로 쓸면 돼요.
  2. 빨간 점이 먹이예요. 먹으면 1점을 받고 몸이 한 칸 길어져요.
  3. 가던 방향의 반대로는 못 꺾어요 — 그건 자기 목으로 들어가는 수라 규칙이 막아요.
  4. 스페이스나 P 로 잠시 멈출 수 있어요. «벽 통과» 를 켜고 끄면 새 판이 시작돼요.

먹이 다섯 개마다 한 칸 움직이는 시간이 10밀리초씩 짧아지고, 70밀리초에서 멈춰요. 그 아래로 가면 방향을 바꿀 틈이 사람의 반응 시간보다 짧아져요.

꼬리 끝 칸으로는 들어갈 수 있어요. 그 칸은 같은 수에 어차피 비워지니까요. 다만 먹이를 먹는 수에는 꼬리가 그대로 남아서 부딪힘이 돼요.

판을 전부 채우면 그 판은 승리로 끝나요. 400칸을 다 채운다는 뜻이라 실제로 보기는 어려워요.

최고 기록과 «벽 통과» 설정은 이 브라우저(localStorage)에만 저장되고 서버로 전송되지 않아요.

자세히 알아보기

규칙 — 멈출 수 없다는 것 하나

스네이크의 규칙은 «뱀은 멈추지 않는다» 하나에서 나와요. 앞으로 계속 가고 우리가 정할 수 있는 건 방향뿐이에요. 먹이를 먹으면 몸이 한 칸 길어지고, 벽이나 자기 몸에 닿으면 끝이에요.

이 게임이 어려워지는 방식이 독특해요. 보통 게임은 적이 강해지거나 속도가 빨라져서 어려워지는데, 스네이크에서는 «내가 잘해서 얻은 길이» 자체가 장애물이 돼요. 잘할수록 판이 좁아지는 구조라, 실력에 대한 보상이 곧 다음 판의 난이도예요.

판은 20×20 = 400칸이고 뱀은 길이 3 으로 시작해요. 먹이 하나가 1점이니 이론상 최고점은 397점인데, 그건 판을 전부 뱀으로 채웠다는 뜻이에요.

반대로 못 꺾는 이유

머리 바로 뒤 칸은 자기 목이에요. 오른쪽으로 가는 중에 왼쪽을 누르면 그 즉시 몸에 부딪혀서 끝나요. 손가락이 미끄러진 것 하나로 판이 끝나면 게임이 아니라 벌칙이라, 대부분의 구현이 이 입력을 무시해요.

여기서 흔한 버그가 하나 나와요. «예약된 방향» 을 기준으로 반대를 막으면, 한 칸이 움직이기 전에 위 → 왼쪽 → 아래를 빠르게 누르는 것으로 몸통을 관통할 수 있어요. 각 입력은 직전 입력의 반대가 아니지만, 결과적으로는 반대 방향이 되거든요.

그래서 이 페이지는 «이번 칸에서 실제로 움직인 방향» 을 기준으로 판정해요. 한 칸 안에서 몇 번을 누르든 그 칸에서 실제로 간 방향의 반대만 막히면, 통과 버그가 원천적으로 사라져요.

속도와 점수

한 칸 움직이는 데 처음에는 0.17초가 걸리고, 먹이 다섯 개마다 0.01초씩 짧아져요. 0.07초에서 멈추는데, 그보다 빨라지면 한 칸을 지나가는 동안 방향을 바꿀 여유가 사람의 반응 시간보다 짧아져요.

점수는 먹은 개수 그대로예요. 배수도 보너스도 없는 이유는 이 게임의 난이도 곡선이 이미 점수에 붙어 있기 때문이에요 — 20점째의 먹이는 3점째의 먹이보다 몸이 열일곱 칸 더 긴 상태에서 먹는 거라 훨씬 어려워요.

그래서 기록은 «몇 점» 보다 «어디서 죽었는가» 로 읽는 편이 정확해요. 대체로 길이 20 근처에서 판 가운데가 막히기 시작하고, 길이 40 을 넘으면 미리 길을 정해 두지 않으면 스스로 가둬요.

오래 사는 법 — 길을 미리 정해 두기

초보자가 가장 먼저 고칠 습관은 «먹이를 향해 직선으로 가기» 예요. 짧을 때는 통하지만 길어지면 먹이를 먹은 자리에서 갇혀요. 먹이로 가는 길보다 «먹은 다음 어디로 빠져나올지» 를 먼저 보세요.

가장 쉬운 안전 습관은 가장자리를 따라 도는 거예요. 벽을 한쪽 면으로 삼고 판을 크게 돌면 몸이 한 덩어리로 유지돼서, 안쪽에 빈 공간이 넓게 남아요. 먹이가 안쪽에 뜨면 그때만 들어갔다 나와요.

꼬리를 따라가는 것도 좋은 도피처예요. 꼬리 끝 칸은 내가 도착하는 순간 비워지니 안전한 칸이고, 갈 곳이 안 보일 때 꼬리를 쫓으면 시간을 벌 수 있어요.

이론적으로 절대 죽지 않는 방법도 있어요. 모든 칸을 한 번씩 지나 제자리로 돌아오는 고리를 만들어 두고 그 위만 계속 도는 거예요. 수학에서는 이런 고리를 해밀턴 순회라고 부르고, 20×20 처럼 짝수 칸 격자에서는 반드시 존재해요. 실제로 해 보면 한 판이 지루할 만큼 길어지지만, «완벽한 플레이가 존재한다» 는 사실은 이 게임의 성격을 잘 보여 줘요.

실전에서는 그 고리를 통째로 따르지 않고, 먹이가 가까울 때만 지름길로 새고 위험해지면 고리로 돌아오는 식으로 섞어 써요.

벽 통과 모드는 무엇이 다른가

벽 통과를 켜면 판의 위아래·좌우가 이어져요. 벽에 부딪혀 죽는 방법이 사라지니 초반이 훨씬 편해지고, 판 밖으로 나가는 실수로 끝나는 일이 없어요.

대신 후반이 더 어려워요. 벽이 없으면 «가장자리를 따라 돈다» 는 안전 습관이 의미를 잃고, 내 몸이 판을 가로지르는 모양이 되어서 어느 쪽으로 돌아 나올지를 매번 새로 계산해야 해요.

두 모드는 최고 기록을 따로 세지 않아요 — 같은 판, 같은 먹이 규칙이라 한 숫자로 두고, 어느 쪽으로 세웠는지는 본인이 알고 있으면 되는 정도예요.

이 페이지 구현에 관해

먹이는 «빈 칸 목록에서 하나 고르기» 로 놓아요. 뱀이 있는 칸이 나오면 다시 뽑는 흔한 방식은 판이 거의 찼을 때 시도 횟수가 폭발해서, 후반에 화면이 잠깐 멈춰요.

꼬리 판정은 한 칸 차이를 정확히 맞춰요. 이번 수에 꼬리가 비워지니 꼬리 끝 칸으로는 들어갈 수 있고, 먹이를 먹는 수에는 꼬리가 남으니 그때는 부딪힘이에요. 이걸 뭉뚱그리면 «분명히 지나갈 수 있는데 죽었다» 는 억울한 판정이 나와요.

규칙 계산은 순수 함수로 떼어 놨어요. 상태를 값으로 다뤄서 한 수 앞을 시험 삼아 계산해 볼 수 있고, 테스트가 판을 그대로 적어 검증할 수 있어요.

이동은 30밀리초마다 도는 타이머 하나가 맡고, 점수별 간격은 그 안에서 시간을 모아 판정해요. 속도가 바뀔 때마다 타이머를 새로 걸면 그 순간의 한 칸이 사라져요.

최고 기록과 벽 통과 설정은 이 브라우저에만 남아요. 서버로 보내는 값이 없어서 전체 순위표가 없고, 사이트 데이터를 지우면 기록도 사라져요.

자주 묻는 질문

스네이크 게임 규칙이 뭔가요?

뱀은 멈추지 않고 앞으로 가고, 방향만 바꿀 수 있어요. 먹이를 먹으면 1점과 함께 몸이 한 칸 길어지고, 벽이나 자기 몸에 닿으면 그 판이 끝나요. 규칙은 이게 전부예요.

왜 반대 방향으로 못 꺾나요?

머리 바로 뒤 칸이 자기 목이라, 반대로 꺾으면 그 즉시 자기 몸에 부딪혀요. 사고로 게임이 끝나는 걸 막으려고 규칙에서 아예 무시해요. 판정은 «예약된 방향» 이 아니라 «이번 칸에서 실제로 움직인 방향» 으로 하는데, 그래야 한 칸 사이에 두 번 눌러 몸통을 통과하는 일이 안 생겨요.

«벽 통과» 를 켜면 뭐가 달라지나요?

벽에 닿아도 죽지 않고 반대편에서 나와요. 죽는 방법이 «자기 몸» 하나로 줄어서 훨씬 오래 살 수 있고, 대신 몸이 길어졌을 때 판 전체를 한 덩어리로 봐야 해서 계산이 더 복잡해져요.

점수는 어떻게 오르나요?

먹이 하나에 1점이에요. 길이와 점수가 같이 늘기 때문에 점수는 곧 «몇 개를 먹었는가» 이고, 20×20 판의 최대 점수는 397점(시작 길이 3 을 뺀 값)이에요.

휴대폰에서도 되나요?

네. 아래 십자 버튼으로 조작하거나 판 위를 원하는 방향으로 쓸면 돼요. 설치·회원가입 없이 브라우저에서 바로 되고 오프라인에서도 동작해요.

계산 방법과 출처

이 도구가 무엇을 근거로 계산하고 어디까지 답할 수 있는지 밝혀요.

이 도구의 성격
고전 게임의 규칙을 브라우저에서 구현한 것이에요. 특정 기기나 상표의 공식판이 아니고, 판 크기·속도 곡선은 이 페이지가 정한 값이에요.
계산식
판은 20×20 = 400칸이고 뱀은 길이 3 으로 시작해요. 먹이 하나에 1점, 몸이 한 칸 길어져요. 한 칸 이동 간격은 170밀리초에서 시작해 먹이 5개마다 10밀리초 줄고 70밀리초에서 멈춰요.
계산 예시
먹이를 20개 먹으면 뱀의 길이는 3 + 20 = 23칸이고, 이동 간격은 170 − (20 ÷ 5) × 10 = 130밀리초예요.
한계
  • 최고 기록은 이 브라우저에만 저장돼요. 사이트 데이터를 지우거나 다른 기기에서 열면 0부터 시작해요.
  • 벽 통과 모드와 기본 모드의 기록을 나눠 세지 않아요. 두 모드의 난이도가 달라서 한 숫자로 비교하기는 어려워요.
  • 먹이 자리는 Math.random 에서 와요. 시드를 공유할 수 없어서 같은 판을 다시 볼 수 없어요.
  • «속도» 칸의 숫자는 이 페이지가 붙인 단계 이름이고, 다른 스네이크 구현의 단계와 같은 기준이 아니에요.
  • 판을 전부 채우면 승리로 처리하지만, 400칸을 채우는 플레이는 사실상 해밀턴 순회를 손으로 도는 일이라 현실적인 목표가 아니에요.
기준 시행일
마지막 검토일

관련 도구