← 목록으로

클로드코드로 지렁이게임 만들기 - 격자 좌표와 즉사 버그 막는 요청문

노베삼촌 2026.07.13 6분 읽기
클로드코드로 지렁이게임 만들기 - 격자 좌표와 즉사 버그 막는 요청문

세 번째 게임

퐁 도감에 이어 벽돌깨기 도감까지 만들면서 이 표가 다음 게임을 만들 때 실제로 참고가 되더라고. 그래서 스네이크도 만들고 나서 똑같이 남겨.

이번 표의 관점도 똑같아. 앞의 두 게임에는 없었던 게 뭐였나. 벽돌깨기 도감 마지막에 "이제 얇아질 줄 알았는데 일곱 줄이었다"고 적었는데 이번에도 그래. 다섯 줄이 나왔어.

스네이크에서 처음 만난 것들

개념 벽돌깨기까지 스네이크에서는
좌표계 픽셀 단위(x, y가 실수) 격자 단위(칸 번호가 정수) — 충돌 판정이 === 비교로 단순해짐
이동 방식 매 프레임 속도 × dt만큼 조금씩 moveTimer가 dt만큼 줄어들다 0 이하일 때만 한 칸 툭 이동(틱 기반)
배열 활용 push/splice(벽돌 만들기·제거) unshift+pop 조합으로 "이동"과 "성장"을 한 번에 표현
방향 입력 keys 객체에 기록 후 매 프레임 확인(패들 연속 이동) keydown 즉시 처리(칸 단위라 누르는 순간만 의미 있음) + 반전 방지 필터
빈 칸 찾기 (해당 없음) 점유된 칸을 표시해두고 빈 칸 목록에서 랜덤 선택(무한루프 예방)

칸으로 바꾸니 충돌 판정이 짧아졌어

첫 줄이 나머지를 다 끌고 왔어. 앞의 두 게임은 공이 픽셀 위를 미끄러졌거든. 그래서 부딪혔는지 보려면 네모 두 개가 겹치는지를 좌표 네 개로 따져야 했어.

칸 단위는 그게 없어져. 뱀 머리가 3번 칸에 있고 몸통 한 마디도 3번 칸에 있으면 그냥 같은 칸인 거야. 겹친 폭을 잴 일이 없으니 비교 한 번으로 끝나.

대신 이동이 뚝뚝 끊겨. 한 칸을 반쯤 걸쳐 있을 수가 없으니까 제자리에 있다가 툭 하고 다음 칸으로 건너뛰는 식이지. 그래서 시간을 재다가 정해진 시간이 되면 한 칸 옮기는 방식으로 갈아탔어.

몸통을 늘리는 데 줄 두 개면 되더라

셋째 줄이 제일 재미있었어. 나는 뱀이 길어지는 걸 마디를 하나씩 붙이는 일이라고 생각했거든.

그런데 실제로 돌아가는 방식이 딴판이야. 머리 쪽에 새 칸을 하나 밀어 넣고, 꼬리 쪽에서 한 칸을 뺀다는 거야. 이걸 반복하면 길이는 그대로인 채 뱀이 앞으로 나아가는 것처럼 보여.

여기서 먹이를 먹었을 때만 꼬리를 안 빼. 그러면 그 순간에 몸이 한 마디 늘어나는 거지. 이동과 성장이 같은 코드로 처리되고 차이는 꼬리를 빼느냐 마느냐 하나뿐이야. 이런 게 코드로 짜인 걸 보면 참 얄미울 만큼 깔끔하더라고.

요청문 표에 또 두 줄

벽돌깨기 도감에서 이어지는 요청법 표에 이번엔 두 줄이 더 붙어. 실제로 플레이 중에 발생한 문제였지만 굳이 에러노트에 적지는 않았어.

하고 싶은 것 이렇게 요청하면 더 좋다
방향키로 캐릭터를 조종하고 싶다 "지금 가는 방향이랑 정반대 입력은 무시하게 해줘" 반대로 꺾으면 머리가 자기 몸통에 바로 파고들어 즉사하는 게 스네이크류 게임의 대표적인 억울사 버그임
랜덤한 자리에 아이템을 두고 싶다 "빈 칸 목록을 먼저 만들고 그중 하나를 뽑는 방식으로 해줘 (좌표 뽑고 맞는지 확인하는 방식 말고)" 판이 거의 다 차면 랜덤 좌표 뽑기가 계속 실패해서 영원히 못 찾을 수 있음

아랫줄은 겪기 전엔 상상도 못 할 종류야. 먹이를 아무 데나 놓는 건 좌표를 하나 뽑아서 거기 뭐가 있는지 보고, 있으면 다시 뽑으면 되잖아. 판이 텅 비어 있을 땐 그래도 돼.

문제는 뱀이 길어졌을 때야. 판이 거의 다 찼는데 빈 칸을 무작위로 찾으라고 하면 계속 헛다리를 짚어. 그래서 빈 칸을 먼저 다 세어놓고 그중에서 뽑는 방식으로 뒤집었어.

이번엔 터지기 전에 막았다는 게 달라

두 줄 다 버그가 터져서 고친 게 아니야. 만들기 전에 미리 막은 거지. 벽돌깨기에서 "앞으로 뭐가 터질 것 같아?"를 물어본 게 이번엔 습관이 된 거야.

도감을 세 권 채우고 나니 표가 쌓이는 방식이 보이더라고. 게임 하나가 늘 때마다 개념 표는 대여섯 줄씩 늘고, 요청문 표는 두 줄씩 붙어. 개념은 게임마다 다르지만 요청문은 다음 게임에도 그대로 쓰이거든.

다음 기계에서도 두 줄이 붙을지는 만들어봐야 알겠지.