3권 · 5. 스네이크 게임 만들기
스네이크 게임 만들기
칸칸이 움직이는 스네이크 게임을 만들어 보아요. 먹이를 먹을수록 뱀이 길어져서 더 재미있어져요! 🐍
오늘의 미션
좌표와 리스트로 뱀이 움직이고 자라는 게임을 만들어요.
무엇을 만들까?

무대를 30칸 크기의 정사각형 격자로 생각해요.
뱀머리, 꼬리지우기, 먹이 스프라이트를 준비해요.
도장찍기 블록으로 뱀이 길어진 것처럼 보여 줄 수 있어요.
준비물
- 뱀머리방향키를 따라 움직이는 주인공이에요.
- 먹이뱀이 먹으면 몸이 길어져요.
- 꼬리지우기하얀색으로 칠해 꼬리를 지우는 역할을 해요.
- 도장찍기 블록뱀 몸통이 남아 있는 것처럼 보이게 해요.
따라해 보자
- 1
무대 칸 나누기
가로 480, 세로 360 무대를 30씩 나눈 격자로 생각해요.
- 2
뱀머리 그리기
중심점을 맞추고 24 크기의 정사각형 모양으로 그려요.
- 3
스프라이트 복사하기
뱀머리를 복사해서 꼬리지우기와 먹이를 만들어요.
- 4
방향키로 움직이기
위, 아래, 왼쪽, 오른쪽 키를 누르면 뱀의 방향이 바뀌게 해요.
- 5
먹으면 길어지기
도장을 찍고 리스트를 써서 뱀이 자라는 모습을 만들어요.
완성 코드
🧱완성 코드 115블록 — 블록이 아주 많아요! 눌러서 펼쳐 보기
이 작품은 코드가 길어요. 천천히 부분부분 따라 만들어 봐요. 아래는 실제 Scratch 3.0 완성 코드예요.
무대
⚑ 클릭했을 때
무한 반복하기
[게임배경음악.mp3▾] 끝까지 재생하기
뱀머리
⚑ 클릭했을 때
모두 지우기
x: (15) y: (15) (으)로 이동하기
(화살표키를 눌러서 빨간색 먹이를 먹으세요.) 을(를) (2)초 동안 말하기
(뱀머리가 벽이나 자신의 몸에 닿으면 게임이 끝납니다.) 을(를) (2)초 동안 말하기
[게임 시작▾] 신호 보내기
정의하기 움직이는 방향 정하기
만약 [up arrow▾] 키를 눌렀는가? (이)라면
만약 (방향) = (아래쪽 ) (이)가 아니다 (이)라면
(0)도 방향 보기
[방향▾] 을(를) (위쪽)로 정하기
만약 [down arrow▾] 키를 눌렀는가? (이)라면
만약 (방향) = (위쪽) (이)가 아니다 (이)라면
(180)도 방향 보기
[방향▾] 을(를) (아래쪽)로 정하기
만약 [right arrow▾] 키를 눌렀는가? (이)라면
만약 (방향) = (왼쪽) (이)가 아니다 (이)라면
(90)도 방향 보기
[방향▾] 을(를) (오른쪽)로 정하기
만약 [left arrow▾] 키를 눌렀는가? (이)라면
만약 (방향) = (오른쪽) (이)가 아니다 (이)라면
(-90)도 방향 보기
[방향▾] 을(를) (왼쪽)로 정하기
[게임 시작▾] 신호를 받았을 때
[방향▾] 을(를) (오른쪽)로 정하기
(90)도 방향 보기
무한 반복하기
움직이는 방향 정하기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기
[게임 시작▾] 신호를 받았을 때
[움직이는 거리▾] 을(를) (30)로 정하기
[x좌표▾]의 (all)번째 항목 삭제하기
[y좌표▾]의 (all)번째 항목 삭제하기
무한 반복하기
(움직이는 거리)만큼 움직이기
(기다리는 시간)초 기다리기
만약 [_edge_▾]에 닿았는가? 또는 [] 색에 닿았는가? (이)라면
[게임 끝▾] 신호 보내기
도장 찍기
(x좌표) 을(를) [x좌표▾]에 추가하기
(y좌표) 을(를) [y좌표▾]에 추가하기
만약 (먹었다) = (아니오) (이)라면
[꼬리지우기▾] 신호 보내기
아니면
[먹었다▾] 을(를) (아니오)로 정하기
⚑ 클릭했을 때
무한 반복하기
[기다리는 시간▾] 을(를) ((1) ÷ ((1) + ((0.1) × (점수))))로 정하기
꼬리지우기
⚑ 클릭했을 때
숨기기
[꼬리지우기▾] 신호를 받았을 때
x: ([x좌표▾]의 (1)번째 항목) y: ([y좌표▾]의 (1)번째 항목) (으)로 이동하기
보이기
도장 찍기
[x좌표▾]의 (1)번째 항목 삭제하기
[y좌표▾]의 (1)번째 항목 삭제하기
숨기기
먹이
⚑ 클릭했을 때
[점수▾] 을(를) (0)로 정하기
[먹었다▾] 을(를) (아니오)로 정하기
숨기기
[게임 시작▾] 신호를 받았을 때
x좌표를 ((-225) + ((30) × ((0) 부터 (15) 사이의 난수))) (으)로 정하기
y좌표를 ((-165) + ((30) × ((0) 부터 (11) 사이의 난수))) (으)로 정하기
보이기
무한 반복하기
만약 [뱀머리▾]에 닿았는가? (이)라면
x좌표를 ((-225) + ((30) × ((0) 부터 (15) 사이의 난수))) (으)로 정하기
y좌표를 ((-165) + ((30) × ((0) 부터 (11) 사이의 난수))) (으)로 정하기
[점수▾] 을(를) (1)만큼 바꾸기
[먹었다▾] 을(를) (예)로 정하기
게임 끝 배경
⚑ 클릭했을 때
숨기기
[게임 끝▾] 신호를 받았을 때
보이기
스프라이트 1
⚑ 클릭했을 때
숨기기
[게임 끝▾] 신호를 받았을 때
(0.1)초 기다리기
맨 앞쪽으로 순서 바꾸기
x: (0) y: (0) (으)로 이동하기
보이기
천의 자리
⚑ 클릭했을 때
숨기기
정의하기 점수정하기
만약 ((점수)의 길이) = (1) (이)라면
[천의 자리▾] 을(를) (0)로 정하기
[백의 자리▾] 을(를) (0)로 정하기
[십의 자리▾] 을(를) (0)로 정하기
[일의 자리▾] 을(를) ((점수)의 (1)번째 글자)로 정하기
만약 ((점수)의 길이) = (2) (이)라면
[천의 자리▾] 을(를) (0)로 정하기
[백의 자리▾] 을(를) (0)로 정하기
[십의 자리▾] 을(를) ((점수)의 (1)번째 글자)로 정하기
[일의 자리▾] 을(를) ((점수)의 (2)번째 글자)로 정하기
만약 ((점수)의 길이) = (3) (이)라면
[천의 자리▾] 을(를) (0)로 정하기
[백의 자리▾] 을(를) ((점수)의 (1)번째 글자)로 정하기
[십의 자리▾] 을(를) ((점수)의 (2)번째 글자)로 정하기
[일의 자리▾] 을(를) ((점수)의 (3)번째 글자)로 정하기
만약 ((점수)의 길이) = (4) (이)라면
[천의 자리▾] 을(를) ((점수)의 (1)번째 글자)로 정하기
[백의 자리▾] 을(를) ((점수)의 (2)번째 글자)로 정하기
[십의 자리▾] 을(를) ((점수)의 (3)번째 글자)로 정하기
[일의 자리▾] 을(를) ((점수)의 (4)번째 글자)로 정하기
[게임 끝▾] 신호를 받았을 때
(0.11)초 기다리기
맨 앞쪽으로 순서 바꾸기
보이기
점수정하기
모양을 [(천의 자리) + (1)] (으)로 바꾸기
십의 자리
⚑ 클릭했을 때
숨기기
[게임 끝▾] 신호를 받았을 때
(0.11)초 기다리기
맨 앞쪽으로 순서 바꾸기
보이기
모양을 [(십의 자리) + (1)] (으)로 바꾸기
백의 자리
⚑ 클릭했을 때
숨기기
[게임 끝▾] 신호를 받았을 때
(0.11)초 기다리기
맨 앞쪽으로 순서 바꾸기
보이기
모양을 [(백의 자리) + (1)] (으)로 바꾸기
일의 자리
⚑ 클릭했을 때
숨기기
[게임 끝▾] 신호를 받았을 때
(0.11)초 기다리기
맨 앞쪽으로 순서 바꾸기
보이기
모양을 [(일의 자리) + (1)] (으)로 바꾸기
진짜 소스: 5.스네이크 게임 만들기.sb2 · 115블록
도전!
먹이 색을 바꾸거나 시작 위치를 바꿔서 나만의 스네이크 게임으로 꾸며 보세요.


좌표를 잘 쓰면 멋진 게임도 만들 수 있어요. 정말 잘했어요! 🎉