4권 · 2. 슈팅 게임을 만들어요
슈팅 게임을 만들어요
파란 엘리오 히어로가 오른쪽에서 오는 적을 향해 총알을 발사해요. 적을 맞히면 돈을 모아 더 강한 무기로 바꿀 수 있어요!
오늘의 미션
회전하고 움직이고 총알을 쏘는 슈팅 게임을 만들어요.
무엇을 만들까?

주인공은 화살표 키로 돌고 앞으로 움직여요.
스페이스 키를 누르면 총알 복제본이 날아가요.
적과 총알이 만나면 둘 다 사라지게 만들어요.
준비물
- 주인공우리가 조종하는 귀여운 게임 캐릭터예요.
- 총알스페이스 키를 누르면 앞으로 날아가요.
- 적오른쪽에서 나타나 주인공 쪽으로 다가와요.
- 업그레이드총알 속도와 힘을 더 좋게 바꾸는 아이템이에요.
따라해 보자
- 1
주인공 그리기
동그란 몸통과 팔, 주황색 무기를 그려 주인공을 만들어요.
- 2
움직임 만들기
화살표 키로 돌고 움직이게 하고, 벽에 닿으면 튕기게 해요.
- 3
총알 발사하기
스페이스 키를 누르면 총알 복제본이 주인공 앞에서 날아가요.
- 4
적 나오게 하기
적은 오른쪽에서 나타나 주인공을 향해 계속 움직여요.
- 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블록
도전!
총알 속도나 적이 나오는 시간을 바꿔서 난이도를 조절해 보세요!


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