3권 · 5. 스네이크 게임 만들기

스네이크 게임 만들기

칸칸이 움직이는 스네이크 게임을 만들어 보아요. 먹이를 먹을수록 뱀이 길어져서 더 재미있어져요! 🐍

  • 대상 초등 4학년
  • 준비물 4개
  • 블록 115개
  • 산출물 좌표와 리스트로 뱀이 움직이고 자라는 게임을 만들어요.

오늘 수업 한눈에

  1. 1무엇을 만들까?
  2. 2준비물
  3. 3따라해 보자
  4. 4완성 코드
  5. 5도전

3권 · 5. 스네이크 게임 만들기

스네이크 게임 만들기

칸칸이 움직이는 스네이크 게임을 만들어 보아요. 먹이를 먹을수록 뱀이 길어져서 더 재미있어져요! 🐍

오늘의 미션

좌표와 리스트로 뱀이 움직이고 자라는 게임을 만들어요.

무엇을 만들까?

스네이크 게임 만들기 완성 모습
격자판 위에서 먹이를 먹으며 길어지는 스네이크 게임

무대를 30칸 크기의 정사각형 격자로 생각해요.

뱀머리, 꼬리지우기, 먹이 스프라이트를 준비해요.

도장찍기 블록으로 뱀이 길어진 것처럼 보여 줄 수 있어요.

준비물

  • 뱀머리방향키를 따라 움직이는 주인공이에요.
  • 먹이뱀이 먹으면 몸이 길어져요.
  • 꼬리지우기하얀색으로 칠해 꼬리를 지우는 역할을 해요.
  • 도장찍기 블록뱀 몸통이 남아 있는 것처럼 보이게 해요.

따라해 보자

  1. 1

    무대 칸 나누기

    가로 480, 세로 360 무대를 30씩 나눈 격자로 생각해요.

  2. 2

    뱀머리 그리기

    중심점을 맞추고 24 크기의 정사각형 모양으로 그려요.

  3. 3

    스프라이트 복사하기

    뱀머리를 복사해서 꼬리지우기와 먹이를 만들어요.

  4. 4

    방향키로 움직이기

    위, 아래, 왼쪽, 오른쪽 키를 누르면 뱀의 방향이 바뀌게 해요.

  5. 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블록

도전!

먹이 색을 바꾸거나 시작 위치를 바꿔서 나만의 스네이크 게임으로 꾸며 보세요.

응원하는 엘리오
엘리오

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

다음 단위라인센서를 알아봐요.sb