게임 가이드게임 공략 · 24/27
스네이크, 먹이로 곧장 갈까 판을 돌까
스네이크 게임 엔진 위에서 먹이로 곧장 가는 방식, 먹은 뒤 꼬리까지 길이 남는지 확인하는 방식, 판 전체를 지그재그로 도는 방식을 프로그램으로 비교했습니다. 곧장 가는 방식은 평균 60개에서 막혔고, 지그재그는 20판 모두 판을 가득 채웠습니다.
Bob6분 읽기
핵심 요약
- 먹이까지 가장 짧은 길로만 가는 프로그램은 20판 평균 60.5개를 먹고 제 몸에 갇혔습니다
- 먹은 뒤에도 꼬리까지 가는 길이 남는지 확인하고 움직인 프로그램은 10판 평균 272.2개로 네 배 넘게 버텼습니다
- 판 전체를 지그재그로 도는 프로그램은 20판 모두 20×20 판을 가득 채웠지만 먹이 하나에 평균 100.5칸을 움직여, 보통 속도로 한 판에 30분 넘게 걸리는 계산이 나옵니다
목차
스네이크는 처음엔 쉽습니다. 먹이가 보이면 그쪽으로 가면 됩니다. 그런데 몸이 판의 4분의 1쯤 차면 상황이 바뀝니다. 먹이로 곧장 갔다가 먹는 순간 사방이 내 몸으로 막혀 버리는 일이 생깁니다.
어떻게 움직여야 오래 버틸까요. 이 사이트 스네이크 게임의 엔진을 그대로 불러와, 서로 다른 규칙으로 움직이는 프로그램 세 개를 돌려 봤습니다. 계산 조건은 아래 '계산 조건' 항목에 적었습니다.
한눈에 보기
| 방식 | 돌린 판 수 | 평균 먹이 | 가장 적게 / 많이 | 먹이 하나당 이동 | 판을 가득 채운 판 |
|---|---|---|---|---|---|
| 먹이로 곧장 | 20판 | 60.5개 | 28개 / 93개 | 15.3칸 | 0판 |
| 먹은 뒤 꼬리까지 길 확인 | 10판 | 272.2개 | 126개 / 366개 | 52.0칸 | 2판 |
| 판 전체 지그재그 | 20판 | 331.1개 | 331개 / 332개 | 100.5칸 | 20판 |
판은 가로세로 20칸으로 모두 400칸입니다. 지그재그 방식의 먹이 수가 400보다 적은 것은 지나가다 먹은 별도 몸을 한 칸 늘리기 때문입니다.
먹이로 곧장 가면 평균 60개에서 막힙니다
첫 번째 프로그램은 매번 먹이까지 가장 짧은 길을 찾아 움직입니다. 몸이 움직이면서 비는 칸까지 계산해 길을 찾으니 사람보다 길 찾기는 훨씬 정확합니다. 그런데도 20판 평균 60.5개를 먹고 끝났습니다. 가장 오래 버틴 판도 93개였습니다.
먹이 하나당 평균 15.3칸만 움직여 빠르긴 합니다. 문제는 먹은 다음입니다. 이 프로그램은 먹이까지 가는 길만 보고 먹은 뒤의 길은 보지 않습니다. 몸이 길어질수록 먹이가 몸으로 둘러싸인 곳에 있을 수 있고, 그런 먹이를 먹는 순간 빠져나갈 길이 없어집니다.
꼬리까지 길이 남는지 보면 네 배를 버팁니다
두 번째 프로그램은 한 가지만 더 확인합니다. 먹이로 가는 길을 따라가 먹었을 때, 그 자리에서 내 꼬리까지 갈 수 있는 길이 남는지입니다. 꼬리는 움직이면서 칸을 비워 주기 때문에, 꼬리까지 갈 수 있다면 적어도 꼬리를 따라 돌며 시간을 벌 수 있습니다. 길이 없으면 먹이로 가지 않고, 꼬리까지 길이 유지되는 칸 가운데 하나로 움직이며 기다립니다.
이 확인 하나로 10판 평균 272.2개를 먹었습니다. 곧장 가기보다 네 배가 넘습니다. 2판은 판을 가득 채웠습니다. 대신 기다리며 도는 시간이 늘어 먹이 하나당 평균 52.0칸을 움직였습니다.
사람이 이 계산을 매번 정확히 할 수는 없습니다. 하지만 "먹으러 가기 전에 먹은 다음 빠져나갈 길을 본다"는 습관으로 옮길 수 있습니다. 특히 벽 바로 옆이나 구석, 몸으로 둘러싸인 곳의 먹이는 먹는 순간 갇히기 쉽습니다.
지그재그는 절대 죽지 않지만 느립니다
세 번째 프로그램은 먹이를 아예 보지 않습니다. 맨 왼쪽 한 줄을 돌아오는 길로 남겨 두고, 나머지 칸을 한 줄씩 지그재그로 훑은 뒤 왼쪽 줄로 올라와 다시 시작합니다. 400칸을 한 번씩 모두 지나는 고리라서, 몸이 아무리 길어져도 머리가 몸에 부딪히지 않습니다.
결과는 20판 모두 판을 가득 채웠습니다. 대신 먹이가 어디 있든 고리를 따라 돌기 때문에 먹이 하나당 평균 100.5칸을 움직였습니다.
시간으로 바꾸면 차이가 더 크게 보입니다. 보통 속도에서 뱀은 처음 한 칸에 0.12초를 쓰고, 먹이를 하나 먹을 때마다 1.5%씩 빨라져 41번째 먹이 무렵부터 한 칸 0.065초에서 더 빨라지지 않습니다. 이 속도로 331개 × 100.5칸, 약 3만 3천 칸을 가려면 30분이 훌쩍 넘습니다. 사람이 그 시간 동안 한 번도 실수하지 않기는 어렵습니다.
사람에게 맞는 방법
세 결과를 합치면 실전에서 쓸 만한 흐름이 나옵니다.
- 몸이 짧을 때는 곧장 갑니다. 초반에는 막힐 위험이 거의 없고, 빨리 먹을수록 점수가 빨리 오릅니다.
- 몸이 길어지면 먹은 다음을 봅니다. 먹이로 가기 전에 먹은 자리에서 꼬리 쪽으로 빠져나갈 길이 있는지 확인합니다. 없으면 한 바퀴 돌며 기다립니다.
- 판의 절반 가까이 차면 지그재그로 바꿉니다. 한 줄씩 훑는 움직임은 느리지만 안전합니다. 가운데를 가로지르지 말고 벽을 따라 크게 돕니다.
별은 쫓을까
별은 먹이 5개마다 한 번 나타나 6초 동안 있다가 사라지고, 먹으면 5점과 함께 몸이 한 칸 늘어납니다. 6초 동안 갈 수 있는 거리는 속도에 따라 다릅니다.
| 속도 | 처음 한 칸 | 가장 빠를 때 한 칸 | 6초 동안 갈 수 있는 칸 (처음 / 가장 빠를 때) | 최고 속도까지 먹이 수 |
|---|---|---|---|---|
| 느긋하게 | 0.16초 | 0.09초 | 38칸 / 67칸 | 39개 |
| 보통 | 0.12초 | 0.065초 | 50칸 / 92칸 | 41개 |
| 빠르게 | 0.085초 | 0.05초 | 71칸 / 120칸 | 36개 |
20×20 판에서 두 칸 사이 가장 먼 거리는 38칸이라, 길이 막혀 있지 않다면 별까지 갈 시간은 대개 충분합니다. 문제는 거리보다 길입니다. 몸이 길 때 별을 쫓아 판을 가로지르면 곧장 가기 방식과 같은 함정에 빠집니다. 별이 5점이라도, 몸이 길어졌을 때는 안전한 길 위에 있을 때만 먹는 편이 낫습니다.
계산 조건
- 게임 엔진: 이 사이트 스네이크의
engine.ts를 그대로 불러와 뱀 생성, 이동(stepSnake), 먹이와 별 생성, 속도 규칙을 썼습니다. 속도는 보통으로 했습니다. - 판마다 고정 시드 난수로 먹이 위치를 정했습니다. 곧장 가기와 지그재그는 20판, 꼬리 확인 방식은 계산량이 많아 10판을 돌렸습니다.
- 길 찾기는 몸이 움직이며 칸이 비는 시점까지 고려한 너비 우선 탐색입니다.
- 꼬리 확인 방식에서 먹이로 갈 수 없을 때는, 꼬리까지 길이 유지되는 칸 가운데 먹이에서 가장 먼 칸으로 움직였습니다. 2,000칸 동안 먹이를 못 먹으면 멈추도록 했는데, 그런 판은 없었습니다.
- 프로그램은 별을 일부러 쫓지 않았고, 지나가다 먹은 별은 규칙대로 몸을 한 칸 늘렸습니다. 표의 먹이 수에는 별이 들어 있지 않습니다.
- 시간 계산은 엔진의 속도 규칙(한 칸 시간에 먹이마다 0.985를 곱하고 최솟값에서 멈춤)을 따랐습니다.
흔한 실수
구석 먹이로 곧장 들어가기. 구석이나 벽 바로 옆 먹이는 먹는 순간 나갈 방향이 한두 개뿐입니다. 몸이 길다면 먼저 빠져나갈 길을 봅니다.
판 가운데를 가로지르기. 가운데를 가로지르면 판이 두 쪽으로 나뉘고, 한쪽에 갇히기 쉽습니다. 벽을 따라 크게 돌면 가운데가 비어 돌 자리가 남습니다.
좁은 곳에서 방향을 늦게 누르기. 방향 입력은 세 개까지 미리 쌓입니다. U턴처럼 연달아 꺾어야 할 때는 두 방향을 빠르게 이어 누르면 됩니다.
별을 보고 무리하기. 별은 6초 뒤 사라집니다. 몸이 길 때 별을 쫓아 판을 가로지르는 것은 곧장 가기의 함정과 같습니다.
연습 방법
- 느긋하게 속도에서 벽을 따라 크게 도는 연습부터 합니다.
- 몸이 판의 4분의 1쯤 찼을 때부터, 먹이로 가기 전에 먹은 뒤 빠져나갈 방향을 한 번씩 확인합니다.
- 몸이 판의 절반쯤 되면 한 줄씩 지그재그로 훑는 움직임으로 바꿔 봅니다. 느려도 안전한 감각을 익히는 것이 목적입니다.
- 익숙해지면 보통, 빠르게 순으로 속도를 올립니다.
정리
먹이로 곧장 가는 프로그램은 평균 60.5개에서 제 몸에 갇혔고, 먹은 뒤 꼬리까지 길이 남는지만 확인해도 평균 272.2개로 네 배 넘게 버텼습니다. 판 전체를 지그재그로 도는 프로그램은 20판 모두 판을 채웠지만 너무 느렸습니다. 초반엔 곧장, 몸이 길어지면 먹은 다음을 확인하고, 절반쯤 차면 지그재그로 바꾸는 것이 사람에게 맞는 흐름입니다.
참고 자료
도움이 됐다면 공유해 주세요
글쓴이
Bob
개발자로 일하면서 경제 지표와 시장 데이터를 직접 찾아보고 정리해 왔습니다. 공식 통계와 1차 자료를 기준으로, 처음 보는 사람도 흐름을 따라올 수 있게 씁니다.
운영 원칙 보기게임 공략
27편- 2048 모서리 전략과 뱀 모양 배열
- 지뢰찾기 1-2-1 패턴과 확률 계산
- 스도쿠를 찍지 않고 푸는 기본 기법
- 숫자야구는 몇 번 만에 맞힐 수 있을까
- 오목 열린 3과 4-3 공격, 첫 수와 금수 정리
- 솔리테어 잘 푸는 습관 다섯 가지
- 사과 게임, 짝부터 지울까 크게 묶을까
- 블록 쌓기, 4줄 한 번에와 연속 지우기 중 무엇이 점수가 클까
- 블록 끼우기에서 오래 버티는 배치
- 벽돌깨기, 패들 어디에 맞히느냐가 점수를 가릅니다
- 버블 팡, 터뜨리기보다 떨어뜨리기가 큰 이유
- 파닥파닥 비행, 틈 가운데보다 어디를 노려야 할까
- 과일 합치기에서 어디에 떨어뜨려야 점수가 오를까
- 보석 맞추기, 아래부터 맞추면 정말 점수가 오를까
- 동네 가게 키우기, 회수 기간 순서로 사면 얼마나 빨라질까
- 카드 짝 맞추기 어려움 판을 24번 안에 끝내려면
- 도시 방어, 탄두보다 얼마나 앞을 찍어야 할까
- 네모로직을 찍지 않고 푸는 줄 읽기 기법
- 가격 정하기 10일에서 이익이 가장 큰 가격 찾기
- 반응속도 테스트, 찍어서 누르면 왜 손해일까
- 길 건너기에서 오래 살아남는 법, 봇 2,000판으로 비교
- 색 순서 기억하기, 10단계를 넘기는 끊어 외우기
- 숫자 밀기 퍼즐 윗줄부터 맞추는 법과 마지막 두 장
- 스네이크, 먹이로 곧장 갈까 판을 돌까지금 읽는 글
- 우주 방어, 바깥 열부터 없애면 시간이 얼마나 벌릴까
- 탑 쌓기 퍼펙트 타이밍 오차와 층수
- 두더지 잡기, 점수는 몇 마리보다 연속이 가릅니다
읽은 내용을 게임으로
스네이크
먹을수록 길어져요. 내 꼬리만 조심