스크래치 아두이노 초음파 센서로 게임 만들기

초음파 센서 게임

그림 1-30 지오메트리 대쉬 게임

 

이제부터 스크래치 게임 만들기 시간입니다. 초음파 센서를 이용하여 지오메트리 대쉬(Geometry Dash)와 같은 점프 게임을 만들어 보겠습니다. 게임의 규칙은 다음과 같습니다.

여기에서 코딩의 중요한 원칙을 다시 한 번 정리해봅시다.

 

한 번에 한 가지 문제만 생각한다.

 

두 가지를 동시에 생각하려면 문제가 복잡해 보이고, 머리도 아픕니다. 한 번에 한가지 문제만 생각해서 문제를 해결하는 것이 매우 중요합니다. 우선 주인공이 점프를 하는 것부터 코딩을 해보겠습니다.

 

먼저 곰돌이 스프라이트를 지워줍니다. 곰돌이에 마우스를 갖다 대고 오른쪽 클릭하면 여러 가지 메뉴가 나옵니다. 여기서 삭제를 클릭합니다.

그림 1-31 곰돌이 지우기

 

그리고 붓 모양의 아이콘을 클릭합니다. 붓 모양의 아이콘에 마우스를 가까이 대면 <새 스프라이트 색칠>이라는 글자가 뜹니다.

그림 1-32 새 스프라이트 색칠

 

그러면 그림 1-33처럼 오른쪽에 그림판 같은 화면이 나옵니다. 여기에 직접 그림을 그려서 스프라이트로 사용할 수 있습니다.

그림 1-33 그림판

 

그림판의 아래 오른쪽을 보면 벡터 모드와 비트맵 모드가 있습니다. 벡터 모드는 그림을 수학 공식을 이용해서 그리는 것입니다. 벡터 모드에서는 그림을 크게 해도 원래 모습 그대로 보입니다.

 

비트맵 모드는 점을 찍어서 그림을 표현하는 것입니다. 따라서 그림을 크게 하면 그림이 깨져서 이상하게 보일 수 있습니다. 우리는 벡터 모드를 사용하겠습니다. 스크래치로 게임을 만들 때 그림을 그려야 할 경우가 많으니 꼭 기억해주세요.

그림 1-34 벡터 모드

 

그림판의 오른쪽을 보면 여러 가지 메뉴가 보입니다. 여기에서 사각형 메뉴를 클릭합니다.

그림 1-35 사각형 그리기

 

원하는 색깔을 아래에서 고르고 사각형을 그립니다.

그림 1-36 사각형 색칠하기

 

Shift 키를 누르면서 그리면 정사각형을 쉽게 그릴 수 있습니다. 노란색 정사각형으로 눈 한쪽을 그려줍니다.

그림 1-37 눈 그리기

 

여러분, 복사 - 붙여넣기 기능 아시죠? 노란색 정사각형을 선택하고 Ctrl 키와 C 키를 동시에 누르면 복사가 됩니다. 그리고 Ctrl 키와 V 키를 동시에 누르면 붙여넣기가 됩니다.

그림 1-38 복사하기

 

이렇게 사람 얼굴처럼 그려주고 마우스 왼쪽 버튼을 누른 채로 움직여서 그림 전체를 선택합니다. 그리고 그림과 같이 그룹화 적용을 클릭합니다. 그룹화 적용을 하면 그렸던 그림이 하나로 합쳐집니다.

그림 1-39 입 그리기

 

십자가 모양의 아이콘을 클릭하면 <모양 중심 설정하기>란 글자나 나옵니다. 이것은 그림의 중심을 정해주는 것입니다. 그림의 x좌표, y좌표 값을 바꿔주면 이 중심점이 이동하는 것입니다. 그림과 같이 중심점이 그림 가운데에 오게 합니다.

그림 1-40 중심점 맞추기

 

그린 스프라이트에 마우스 오른쪽 버튼을 클릭하고 정보를 선택합니다.

그림 1-41 정보 선택하기

 

그림과 같이 이름을 바꿔줍니다. 스프라이트에 이름을 잘 지어주면 나중에 코딩할 때 매우 편합니다.

그림 1-42 이름 바꾸기

 

다시 새 스프라이트를 그려줍니다. 그림1-43과 같이 파란색 선을 그려줍니다. 이 파란색 선은 땅과 같은 역할을 합니다. 주인공이 점프를 하면 올라가고 다시 땅으로 내려갑니다.

그림 1-43 땅 그리기

 

책에 나온 대로 잘 따라 하면 무대가 그림 1-44와 같이 보입니다.

그림 1-44 주인공과 땅

 

이제 초음파 센서를 이용하여 주인공이 점프를 하게 코딩을 하겠습니다. 먼저 주인공 스프라이트에 코딩을 하겠습니다. [거리] 변수를 만들고, 초음파 센서에서 읽은 값을 저장합니다. 그리고 아주 조금 기다립니다.

그림 1-46 주인공 떨어지기

 

주인공 스프라이트가 땅으로 떨어지게 하겠습니다. 오른쪽으로 보고 땅에 닿을 때까지 y좌표를 –1만큼 바꿉니다. 그러면 주인공이 점점 아래로 떨어집니다.

그림 1-46 주인공 떨어지기

 

초음파 센서에 손을 가까이하면 점프를 할 수 있도록 그림 1-47과 같이 코딩을 합니다. 만약 거리 변숫값이 20보다 작으면 y좌표가 50만큼 커져서 주인공이 위로 올라갑니다. 즉, 점프를 하는 거죠.

그림 1-47 점프하기와 떨어지기

 

그런데 점프하는 모습이 자연스럽지 않습니다. 어떻게 하면 될까요? 처음 점프할 때는 많이 올라가지만 나중에 적게 올라가다가 멈춥니다. 그리고 다시 아래로 빠르게 떨어지면 됩니다. 어때요? 참 쉽죠?

그림 1-48 점프하고 떨어지는 모습

 

점프], [중력] 변수를 만듭니다. 점프를 하면 12만큼 위로 올라갑니다. 점프에 중력 값을 더해줍니다. 중력 변수 값이 –1이니 그 다음에는 11, 그 다음에는 10 이렇게 올라가다가 0이되면 더 이상 올라가지 않습니다.

 

그리고 주인공이 땅에 닿을 때까지 점프 변수 값이 -1, -2, -3 이렇게 작아지니 점점 아래로 빠르게 떨어집니다. <바꾸기> 대신에 <정하기> 명령어를 사용하면 안 됩니다. 많이 하는 실수이니 잘 보고 명령어를 사용하기 바랍니다.

그림 1-49 점프와 중력 변수 이용하기

 

그런데 점프 변수 값이 너무 작아지면 땅을 뚫고 내려가는 경우가 있습니다. 그래서 점프 변수 값이 -12보다 작지 않도록 그림 1-50과 같이 코딩을 합니다.

그림 1-50 점프 변수 값 범위 정하기

 

그런데 이렇게 코딩하면 게임을 시작할 때 주인공이 땅으로 떨어지지 않습니다. 땅에 닿지 않으면 그림 1-51과 같이 y값을 –10만큼 바꿔서 아래로 떨어지게 합니다.

그림 1-51 땅에 닿지 않을 때 떨어지게 하기

 

이렇게 코딩이 너무 길면 관계있는 명령어끼리 모아서 함수로 만드는 것이 좋습니다. 코딩한 것이 한눈에 잘 들어오죠? 점프와 관계있는 명령어끼리 모아서 <점프하기> 함수를 만듭니다.

그림 1-52 함수로 코딩하기

 

그리고 점프를 하면 90도씩 시계방향으로 회전하게 만들어 보겠습니다.

그림 1-53 점프하기 함수 사용하여 코딩하기

 

거리 변숫값이 20보다 작으면 점프를 하는 거죠? 점프를 하는 것과 회전하는 것을 따로 코딩을 하면, 거리 변수가 값이 20보다 작을 때 돌면서 점프를 합니다.

그림 1-54 회전하기

 

이제 주인공이 움직이는 것처럼 보이도록 코딩을 하겠습니다. 어떻게 하면 될까요? 주인공은 가만히 있지만 배경이 움직이면 주인공이 움직이는 것처럼 보입니다.

 

도깨비 모양의 아이콘을 클릭하면 스프라이트 라이브러리가 열립니다. 여기에는 사용할 수 있는 여러 가지 스프라이트가 있습니다. <그림 1-55>

그림 1-55 저장소에서 스프라이트 선택

 

그림 1-56과 같이 나무를 하나 가져와 야자수라고 이름을 짓습니다.

그림 1-56 야자수 넣기

 

이 야자수가 오른쪽에서 왼쪽으로 계속 움직이면 주인공이 마치 앞으로 움직이는 것처럼 보입니다.

 

야자수의 x좌표를 –5만큼 바꿔서 오른쪽에서 왼쪽으로 움직이게 합니다. 그러다가 x좌표가 –240보다 작으면 다시 원래 위치로 이동하게 합니다. 스크래치의 무대는 가운데를 중심으로 왼쪽으로 240, 오른쪽으로 240만큼 움직일 수 있습니다. 즉 –240부터 240까지 움직일 수 있는 거죠.

그림 1-57 왼쪽으로 계속 이동

 

그런데 게임을 테스트하면 야자수가 주인공 앞으로 지나가는 것을 볼 수 있습니다.

그림 1-58 앞에 있는 야자수

 

어떻게 하면 될까요? 주인공을 맨 앞으로 나오게 하면 됩니다. 색종이가 여러 개 있는 것을 한 번 상상해봅시다. 맨 앞에 있는 색종이가 먼저 보이겠죠?

그림 1-59 주인공 맨 앞으로 나오기

 

그리고 야자수는 뒤로 보내면 되겠죠? 50번째 정도로 뒤로 가게 하면 됩니다.

그림 1-60 야자수 뒤로 보내기

 

이제 장애물을 만들어 봅시다. 그림 1-61과 같이 사각형을 그리고 오른쪽 메뉴에서 형태고치기를 클릭합니다. 그러면 그림 1-62와 같이 모서리에 점이 생깁니다. 이 점을 옮기면 모양이 바뀝니다.

그림 1-61 장애물 그리기
그림 1-62 장애물 모양 바꾸기

그림 1-62 장애물 모양 바꾸기그리고 중심점을 그림과 같이 옮깁니다.

그림 1-63 중심점 맞추기

 

이 장애물이 야자수보다 빠른 속도로 움직이도록 만들겠습니다. x좌표를 –10만큼 바꾸면 장애물은 야자수보다 더 빨리 움직이게 됩니다.

그림 1-64 왼쪽으로 이동하기

 

그리고 주인공이 장애물에 닿으면 GAME OVER라는 글씨가 나오게 하겠습니다. 글씨도 스프라이트입니다. 붓 아이콘을 클릭하고, 오른쪽의 T 아이콘을 선택하면 글씨를 쓸 수 있습니다. 그림 1-65와 같이 GAME OVER라고 글씨를 쓰고 중심점을 잘 맞춥니다. 그리고 <게임끝>이라고 이름을 짓습니다.

그림 1-65 GAME OVER

 

무대는 이렇게 보이게 됩니다.

그림 1-66 GAME OVER 보이기

 

어떻게 하면 주인공이 장애물에 닿았을 때 GAME OVER 글씨가 나올 수 있을까요? 여러 가지 방법이 있지만 <방송하기> 명령어를 사용하면 쉽게 코딩할 수 있습니다. <방송하기>는 신호와 같습니다. 예를 들면 축구 경기에서 심판이 호루라기를 불면 선수들이 축구경기를 하는 것과 같습니다.

 

우선 새 메시지를 만듭니다. 삼각형 버튼을 누르고 새 메시지를 고릅니다. 메시지 이름은 <장애물에 닿았다>라고 쓰고 확인 버튼을 누릅니다.

그림 1-67 새 메시지 방송하기

 

그리고 주인공에 그림1-68과 같이 코딩을 합니다.

그림 1-68 장애물에 닿았다 방송하기

 

<게임끝> 스프라이트는 그림1-69처럼 시작할 때는 보이지 않지만 방송을 받으면 보이게 합니다. 그러나 주인공이 장애물에 닿아도 GAME OVER 글씨가 보이지 않습니다.

그림 1-69 방송을 받을 때 보이기

 

이럴 때는 방송을 보내고 몇 초 정도 기다리면 됩니다. <기다리기> 명령어가 없으면 주인공은 장애물에 닿을 때 엄청나게 빠른 속도로 같은 방송을 보냅니다.(신호를 계속 보낸다.) 그러면 프로그램이 잘 작동하지 않는 경우가 있습니다.

그림 1-70 방송하고 기다리기

<방송하기> 명령어를 사용할 때 잘 안 되는 경우 이렇게 몇 초 정도 기다리면 쉽게 문제를 해결할 수 있습니다. 어때요? 참 쉽죠?

 

야자수, 장애물도 <장애물에 닿았다> 방송을 받으면 멈춰서 가만히 있도록 코딩을 하겠습니다.

그림 1-71 스프라이트에 있는 다른 스크립트 멈추기

 

<스프라이트에 있는 다른 스크립트 멈추기>를 하면 전에 스프라이트에 코딩을 했던 명령어를 더 이상 하지 않습니다. 어때요? 참 쉽죠? 그리고 이 명령어를 마우스 왼쪽 버튼으로 클릭한 채로 움직여서 스프라이트 창에 있는 다른 스프라이트 쪽에 놓으면 명령어가 복사가 됩니다. 많이 쓰이는 방법이니 열심히 연습하기 바랍니다.

 

<게임끝> 스프라이트가 야자수 뒤로 가서 글씨가 가려졌습니다. <게임끝>이 방송을 받으면 맨 앞으로 오면 되겠죠?

그림 1-72 가려진 글씨

 

방송을 받으면 맨 앞으로 나오고 크기가 커졌다가 작아졌다가 합니다. 어때요? 참 쉽죠? 초음파 센서를 이용해서 간단한 점프 게임을 만들어 보았습니다. 그럼 이 게임을 더욱 재미있게 만들 수는 있을까요? 여러분만의 멋진 아이디어를 생각해 봅시다.

그림 1-73 맨 앞으로 나오기

 

댓글 (0)

Designed by JB FACTORY