4권 · 2. 슈팅 게임을 만들어요

슈팅 게임을 만들어요

파란 엘리오 히어로가 오른쪽에서 오는 적을 향해 총알을 발사해요. 적을 맞히면 돈을 모아 더 강한 무기로 바꿀 수 있어요!

  • 대상 초등 4학년
  • 준비물 4개
  • 블록 204개
  • 산출물 회전하고 움직이고 총알을 쏘는 슈팅 게임을 만들어요.

오늘 수업 한눈에

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

4권 · 2. 슈팅 게임을 만들어요

슈팅 게임을 만들어요

파란 엘리오 히어로가 오른쪽에서 오는 적을 향해 총알을 발사해요. 적을 맞히면 돈을 모아 더 강한 무기로 바꿀 수 있어요!

오늘의 미션

회전하고 움직이고 총알을 쏘는 슈팅 게임을 만들어요.

무엇을 만들까?

슈팅 게임을 만들어요 완성 모습
주인공이 총알을 쏘고 적을 물리치는 완성 게임

주인공은 화살표 키로 돌고 앞으로 움직여요.

스페이스 키를 누르면 총알 복제본이 날아가요.

적과 총알이 만나면 둘 다 사라지게 만들어요.

준비물

  • 주인공우리가 조종하는 귀여운 게임 캐릭터예요.
  • 총알스페이스 키를 누르면 앞으로 날아가요.
  • 오른쪽에서 나타나 주인공 쪽으로 다가와요.
  • 업그레이드총알 속도와 힘을 더 좋게 바꾸는 아이템이에요.

따라해 보자

  1. 1

    주인공 그리기

    동그란 몸통과 팔, 주황색 무기를 그려 주인공을 만들어요.

  2. 2

    움직임 만들기

    화살표 키로 돌고 움직이게 하고, 벽에 닿으면 튕기게 해요.

  3. 3

    총알 발사하기

    스페이스 키를 누르면 총알 복제본이 주인공 앞에서 날아가요.

  4. 4

    적 나오게 하기

    적은 오른쪽에서 나타나 주인공을 향해 계속 움직여요.

  5. 5

    맞으면 사라지기

    총알과 적이 닿으면 잠깐 기다린 뒤 둘 다 사라지게 해요.

완성 코드

🧱완성 코드 204블록 — 블록이 아주 많아요! 눌러서 펼쳐 보기

이 작품은 코드가 길어요. 천천히 부분부분 따라 만들어 봐요. 아래는 실제 Scratch 3.0 완성 코드예요.

무대

⚑ 클릭했을 때
무한 반복하기
[게임배경음악.mp3▾] 끝까지 재생하기
⚑ 클릭했을 때
[생명▾] 을(를) (3)로 정하기
[돈▾] 을(를) (1000)로 정하기
[점수▾] 을(를) (0)로 정하기
[아이템 속도▾] 을(를) (0)로 정하기
[아이템 파워▾] 을(를) (0)로 정하기
[뒤로가기 효과▾] 을(를) (0)로 정하기

총알

⚑ 클릭했을 때
숨기기
정의하기 머신건발사
[clap beatbox▾] 재생하기
(100) 계층 뒤로 보내기
[주인공▾] (으)로 이동하기
(([direction▾] ([주인공▾])) + ((-10) 부터 (10) 사이의 난수))도 방향 보기
(40)만큼 움직이기
보이기
복제되었을 때
만약 (상점이 열렸나) = (아니오) (이)라면
만약 (gun) = (권총) (이)라면
권총발사
아니면
머신건발사
무한 반복하기
만약 [_edge_▾]에 닿았는가? 또는 [적▾]에 닿았는가? (이)라면
이 복제본 삭제하기
(속도)만큼 움직이기
정의하기 권총발사
[팝▾] 재생하기
(100) 계층 뒤로 보내기
[주인공▾] (으)로 이동하기
([direction▾] ([주인공▾]))도 방향 보기
(40)만큼 움직이기
보이기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

정의하기 주인공에 닿았을 때
만약 [주인공▾]에 닿았는가? (이)라면
(0.001)초 기다리기
[dog1▾] 재생하기
[생명▾] 을(를) (-1)만큼 바꾸기
이 복제본 삭제하기
복제되었을 때
x: (240) y: ((-170) 부터 (170) 사이의 난수) (으)로 이동하기
적 만들기
보이기
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
[주인공▾] 쪽 보기
(적 움직이는 속도)만큼 움직이기
총알에 닿았을 때
주인공에 닿았을 때
정의하기 적 종류에 따라서 돈-점수 정하기
만약 (적 종류) = (약함) (이)라면
[돈▾] 을(를) (1)만큼 바꾸기
[점수▾] 을(를) (1)만큼 바꾸기
만약 (적 종류) = (강함) (이)라면
[돈▾] 을(를) (3)만큼 바꾸기
[점수▾] 을(를) (2)만큼 바꾸기
정의하기 적 만들기
만약 (적 종류) = (약함) (이)라면
[적 움직이는 속도▾] 을(를) ((4) + ((점수) ÷ (100)))로 정하기
[적 체력▾] 을(를) ((3) + ([floor▾] ((점수) ÷ (100))))로 정하기
모양을 [1▾] (으)로 바꾸기
만약 (적 종류) = (강함) (이)라면
[적 움직이는 속도▾] 을(를) ((3) + ((점수) ÷ (100)))로 정하기
[적 체력▾] 을(를) ((6) + ([floor▾] ((점수) ÷ (100))))로 정하기
모양을 [2▾] (으)로 바꾸기
⚑ 클릭했을 때
숨기기
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
(1.5)초 기다리기
만약 ((1) 부터 (4) 사이의 난수) = (1) (이)라면
[적 종류▾] 을(를) (강함)로 정하기
아니면
[적 종류▾] 을(를) (약함)로 정하기
[_myself_▾] 복제하기
정의하기 총알에 닿았을 때
만약 [총알▾]에 닿았는가? (이)라면
(0.1)초 기다리기
[적 체력▾] 을(를) ((-1) × (데미지))만큼 바꾸기
((-1) × (뒤로가기 효과))만큼 움직이기
[brightness▾] 효과를 (60) (으)로 정하기
(0.05)초 기다리기
[brightness▾] 효과를 (0) (으)로 정하기
만약 (적 체력) < (1) (이)라면
(0.001)초 기다리기
적 종류에 따라서 돈-점수 정하기
이 복제본 삭제하기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

생명

⚑ 클릭했을 때
x: (-235) y: (160) (으)로 이동하기
보이기
무한 반복하기
모양을 [생명] (으)로 바꾸기
만약 (생명) < (1) (이)라면
숨기기
[게임 끝▾] 신호 보내고 기다리기

주인공

⚑ 클릭했을 때
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
만약 [right arrow▾] 키를 눌렀는가? (이)라면
↻ (5)도 돌기
만약 [left arrow▾] 키를 눌렀는가? (이)라면
↺ (5)도 돌기
만약 [up arrow▾] 키를 눌렀는가? (이)라면
(4)만큼 움직이기
만약 [down arrow▾] 키를 눌렀는가? (이)라면
(-4)만큼 움직이기
벽에 닿으면 튕기기
⚑ 클릭했을 때
[생명▾] 을(를) (3)로 정하기
⚑ 클릭했을 때
무한 반복하기
만약 (gun) = (권총) (이)라면
[장전시간▾] 을(를) (0.4)로 정하기
[속도▾] 을(를) ((10) + ((아이템 속도) ÷ (10)))로 정하기
[데미지▾] 을(를) ((2) + ((아이템 파워) ÷ (10)))로 정하기
모양을 [1▾] (으)로 바꾸기
아니면
[장전시간▾] 을(를) (0.2)로 정하기
[속도▾] 을(를) ((6) + ((아이템 속도) ÷ (10)))로 정하기
[데미지▾] 을(를) ((1) + ((아이템 파워) ÷ (10)))로 정하기
모양을 [2▾] (으)로 바꾸기
⚑ 클릭했을 때
[gun▾] 을(를) (권총)로 정하기
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
만약 [1▾] 키를 눌렀는가? (이)라면
[gun▾] 을(를) (권총)로 정하기
만약 [2▾] 키를 눌렀는가? (이)라면
[gun▾] 을(를) (머신건)로 정하기
⚑ 클릭했을 때
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
만약 [space▾] 키를 눌렀는가? (이)라면
[총알▾] 복제하기
(장전시간)초 기다리기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

달러

⚑ 클릭했을 때
x: (-230) y: (130) (으)로 이동하기
만약 (이)라면

돈 표시

⚑ 클릭했을 때
[단위▾] 을(를) (1)로 정하기
(5)번 반복하기
[_myself_▾] 복제하기
[단위▾] 을(를) (1)만큼 바꾸기
숨기기
복제되었을 때
보이기
무한 반복하기
x: (((단위) × (20)) + (-200)) y: (130) (으)로 이동하기
만약 (단위) > (()의 길이) (이)라면
숨기기
아니면
보이기
모양을 [()의 (단위)번째 글자] (으)로 바꾸기

정지 배경

⚑ 클릭했을 때
숨기기
⚑ 클릭했을 때
무한 반복하기
만약 (상점이 열렸나) = (아니오) (이)라면
숨기기
아니면
보이기
[ghost▾] 효과를 (50) (으)로 정하기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

상점

⚑ 클릭했을 때
숨기기
x: (0) y: (-280) (으)로 이동하기
[상점이 열렸나▾] 을(를) (아니오)로 정하기
무한 반복하기
만약 [p▾] 키를 눌렀는가? (이)라면
[p▾] 키를 눌렀는가? (이)가 아니다 까지 기다리기
만약 (상점이 열렸나) = (아니오) (이)라면
[상점이 열렸나▾] 을(를) ()로 정하기
[상점 보이기▾] 신호 보내기
아니면
[상점이 열렸나▾] 을(를) (아니오)로 정하기
[상점 숨기기▾] 신호 보내기
[상점 숨기기▾] 신호를 받았을 때
(0.5)초 동안 x: (0) y: (-280) (으)로 이동하기
숨기기
[상점 보이기▾] 신호를 받았을 때
보이기
(0.5)초 동안 x: (0) y: (0) (으)로 이동하기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

아이템

⚑ 클릭했을 때
숨기기
[아이템 종류▾] 을(를) (1)로 정하기
(3)번 반복하기
[_myself_▾] 복제하기
[아이템 종류▾] 을(를) (1)만큼 바꾸기
정의하기 아이템 위치 정하기
만약 (아이템 종류) = (1) (이)라면
x: (([x position▾] ([상점▾])) - (100)) y: ([y position▾] ([상점▾])) (으)로 이동하기
만약 (아이템 종류) = (2) (이)라면
x: ([x position▾] ([상점▾])) y: ([y position▾] ([상점▾])) (으)로 이동하기
만약 (아이템 종류) = (3) (이)라면
x: (([x position▾] ([상점▾])) + (100)) y: ([y position▾] ([상점▾])) (으)로 이동하기
정의하기 아이템 보이기
만약 (상점이 열렸나) = () (이)라면
(y좌표) = (0) 까지 반복하기
보이기
아이템 위치 정하기
아니면
(y좌표) < (-130) 까지 반복하기
보이기
아이템 위치 정하기
숨기기
정의하기 아이템 선택하기
만약 (마우스의 y좌표) > (-40) 그리고 (마우스의 y좌표) < (44) (이)라면
아이템 종류가 1일 때
아이템 종류가 2일 때
아이템 종류가 3일 때
아니면
[brightness▾] 효과를 (0) (으)로 정하기
크기를 (100)%로 정하기
복제되었을 때
모양을 [아이템 종류] (으)로 바꾸기
무한 반복하기
아이템 보이기
아이템 선택하기
정의하기 아이템 종류가 1일 때
만약 (마우스의 x좌표) > (-140) 그리고 (마우스의 x좌표) < (-60) (이)라면
[가격▾] 을(를) (30)로 정하기
만약 (아이템 종류) = (1) (이)라면
[brightness▾] 효과를 (30) (으)로 정하기
크기를 (120)%로 정하기
만약 마우스를 클릭했는가? (이)라면
만약 () > (가격) (이)라면
[돈▾] 을(를) ((-1) × (가격))만큼 바꾸기
[아이템 속도▾] 을(를) (1)만큼 바꾸기
(0.1)초 기다리기
정의하기 아이템 종류가 3일 때
만약 (마우스의 x좌표) > (60) 그리고 (마우스의 x좌표) < (140) (이)라면
[가격▾] 을(를) (100)로 정하기
만약 (아이템 종류) = (3) (이)라면
[brightness▾] 효과를 (30) (으)로 정하기
크기를 (120)%로 정하기
만약 마우스를 클릭했는가? (이)라면
만약 () > (가격) (이)라면
[돈▾] 을(를) ((-1) × (가격))만큼 바꾸기
[뒤로가기 효과▾] 을(를) (1)만큼 바꾸기
(0.1)초 기다리기
정의하기 아이템 종류가 2일 때
만약 (마우스의 x좌표) > (-40) 그리고 (마우스의 x좌표) < (40) (이)라면
[가격▾] 을(를) (50)로 정하기
만약 (아이템 종류) = (2) (이)라면
[brightness▾] 효과를 (30) (으)로 정하기
크기를 (120)%로 정하기
만약 마우스를 클릭했는가? (이)라면
만약 () > (가격) (이)라면
[돈▾] 을(를) ((-1) × (가격))만큼 바꾸기
[아이템 파워▾] 을(를) (1)만큼 바꾸기
(0.1)초 기다리기
[게임 끝▾] 신호를 받았을 때
[other scripts in sprite▾] 멈추기

점수 표시

⚑ 클릭했을 때
[단위▾] 을(를) (1)로 정하기
(5)번 반복하기
[_myself_▾] 복제하기
[단위▾] 을(를) (1)만큼 바꾸기
숨기기
복제되었을 때
보이기
무한 반복하기
x: (((단위) × (20)) + (130)) y: (160) (으)로 이동하기
만약 (단위) > ((점수)의 길이) (이)라면
숨기기
아니면
보이기
모양을 [(점수)의 (단위)번째 글자] (으)로 바꾸기

진짜 소스: 5.슈팅 게임을 만들어요.sb2 · 204블록

도전!

총알 속도나 적이 나오는 시간을 바꿔서 난이도를 조절해 보세요!

응원하는 엘리오
엘리오

복제와 충돌까지 해냈다면 멋진 게임 개발자예요! 🎮

다음 단위초음파 센서를 알아봐요