본문 바로가기
Programming/Entry

엔트리(entry)로 비행기 슈팅게임 만들기 - 17. 보스 만들기

by BACKK0M 2019. 11. 26.
반응형

이번 포스팅에서는 난이도 10에 해당하는 보스를 만들고자 합니다. 보스는 체력이 존재하며, 다양한 스킬로 플레이어를 괴롭힐 것입니다. 우선 보스로 사용할 오브젝트를 찾아야 하는데... 엔트리에 마땅한게 안보이더라구요 ㅠㅠ

그래서 구글링하여 보스에 적합한 이미지를 찾아보고자 합니다. 구글에 외계인이라 검색해줍니다. 그 후 이미지 탭으로 넘어갑니다. 그 후 도구를 눌러 색상을 투명으로 설정해줍니다. 여기서 말하는 투명은 배경이 투명인 이미지를 말합니다.

그럼 아래와 비슷한 화면이 나타나게 됩니다.

 

외계인 검색

항목중에 Ufo 알 수 없는 외국인 - Pixabay의 무료 어쩌구... 라 적혀 있는것이 있습니다. 그 항목을 클릭하면 오른편에 확대된 이미지가 나타나는데, 그 이미지를 클릭하여 페이지에 들어가줍니다.

혹시 모르니 이미지 링크를 남겨놓겠습니다.


이미지 링크: https://pixabay.com/ko/vectors/ufo-%EC%95%8C-%EC%88%98-%EC%97%86%EB%8A%94-%EC%99%B8%EA%B5%AD%EC%9D%B8-1698553/

 

페이지가 나타나면 오른쪽에 있는 무료 다운로드 버튼을 눌러줍니다. 4가지 항목이 나오는데 첫 번째 항목을 선택한 뒤 다운로드 버튼을 눌러줍니다.

 

이미지 다운로드

다운받은 후 파일 이름을 보스라고 바꿔줍니다.

 

이미지 이름 바꾸기

이제 다운받은 오브젝트를 게임 장면에 불러와줍니다.

 

오브젝트 추가하기

오브젝트가 추가되면 다음과 같이 화면에 나타나게 됩니다.

 

추가된 모습

자 이제 본격적으로 코딩 해보도록 하겠습니다. 우선 보스의 등장 시기는 난이도가 10이 되었을 때 이기 때문에 장면이 시작하면 모습을 숨겨줍니다.

 

보스 모습 숨기기

난이도숫자 글상자를 클릭해줍니다. 난이도 변수의 값이 10이 될때까지 난이도가 증가되도록 반복되고 있습니다. 반복이 끝난 뒤 보스가 등장해야 한다 라는 것을 알려주기 위해 신호를 보내주어야 합니다. 우선 신호를 하나 만들어줍니다. 신호의 이름은 보스출동!입니다.

 

보스출동! 신호 만들기

이제 난이도숫자 글상자에 반복이 끝나는 부분에 보스출동! 신호를 보내줍니다.

 

보수출동! 신호 보내기

다시 보스 오브젝트로 이동해줍니다. 보스 오브젝트는 보스출동! 신호를 받았을 때 모양이 보여야 합니다. 아래와 같이 코딩을 진행해줍니다.

 

보스출동! 신호 받았을 때 모양 보이기

보스는 등장하게되면 우선 y좌표를 80으로 이동한 뒤, 좌우로 랜덤하게 움직이도록 할 것입니다. ~초 동안 ~로 이동시키기 블록을 활용합니다. 아래와 같이 코딩해줍니다.

 

보스 움직임

보스의 스킬은 총 5가지로 할 것입니다. 보스 스킬 내용은 아래와 같습니다.

항목 내용
1 플레이어가 있는 방향으로 미사일 발사됨
2 보스 주변으로 미사일이 발사됨
3 앞쪽 랜덤한 방향으로 미사일이 발사됨
4

돌진

앞으로 돌진했다 다시 뒤로 되돌아옴

5

우주선 수리

보스가 체력을 회복함

스킬 내용만 보면 정~~말 어려워 보이죠? 하지만 어렵지 않습니다. 차례대로 만들어 볼까요?

 

우선 보스의 스킬을 결정하기 위해 변수를 하나 만들어줍니다. 변수의 이름은 보스공격선택입니다.

 

보스공격선택 변수 생성

그 후 변수의 정보가 화면에 나타나지 않도록 해줍니다.

 

변수 정보 가리기

위에서 변수를 만들 때 모든 오브젝트에 사용을 체크해준 이유는 바로 이 변수의 값에 따라 보스의 미사일이 달리 나가게 될것이기 때문입니다. 즉, 다른 오브젝트에서도 사용하기 때문이죠. 그리고 이 변수의 값은 1부터 20사이의 무작위 수로 결정되어질 것입니다. 그렇게 하는 이유는? 보스가 쉴틈 없이 스킬을 쓴다면 플레이어가 너무 고통스럽겠죠? ㅎㅎ

즉, 확률을 결정해주는 부분입니다. 스킬은 총 5개. 랜덤한 수는 1초에 한 번씩 생성(이동 떄문에). 1부터 20 사이라 하였기 때문에 25퍼센트 확률로 스킬을 사용하게 될것입니다.

 

우선 보스가 공격을 선택하도록 코딩을 진행하겠습니다.

 

보스공격선택 값에 따른 조건

보스공격선택 변수의 값이 1 ~ 5 사이의 값으로 설정되었을 때 스킬을 사용할 수 있도록 코딩하였습니다. 이제 스킬을 만들어야겠죠? 1번부터 만들어보도록 하겠습니다. 우선 보스가 발사할 미사일을 추가해주어야 합니다. 오브젝트를 추가해줍니다. 사용할 오브젝트는 총알 오브젝트입니다.

 

총알 오브젝트 추가

오브젝트를 추가한 뒤 아래와 같이 오브젝트의 정보를 바꿔줍니다.

 

보스총알 오브젝트 설정

보스총알 오브젝트는 보스공격 신호를 받았을 때 동작할 것입니다. 신호를 하나 만들어줍니다. 신호 이름은 보스공격입니다.

 

보스공격 신호 생성

생성한 신호를 보스에 추가해줍니다. 보스공격선택 변수의 값이 1일 때 신호를 발생해줍니다. 주의하실점은 보스가 공격하는 동안에는 움직이지 않도록 할 것이기 때문에 신호 보내고 기다리기 블록을 사용합니다. 이 블록은 신호를 보냈을 때 신호를 받는 부분의 코드가 끝날때까지 기다릴 수 있는 블록입니다. 아래와 같이 코딩을 진행합니다.

 

보스공격 신호 보내고 기다리기

보스총알 오브젝트를 선택하여 코딩을 해줍니다. 우선 장면이 시작되면 모습이 보이지 않도록 설정하며, 보스출동! 신호를 받게 되면 계속 보스 위치로 이동하도록 코딩해줍니다.

 

보스총알 초기

그리고 보스공격 신호를 받았을 때 보스가 어떤 공격을 선택했는지 확인한 뒤 해당 공격에 맞게 보스총알 오브젝트를 복제해주어야 합니다. 보스공격선택 변수의 값이 1일 경우에 대해서만 해보도록 하겠습니다. 변수의 값이 1일 경우 20번 반복하기하여 0.1초에 한 번씩 복제본을 만들도록 코딩해줍니다.

 

보스공격선택 값이 1일 경우

복제본이 생성되면 보스총알 복제본은 모습이 보여지며 로켓을 바라보고 날아가게 됩니다. 그리고 복제본들은 벽에 닿거나 각 폭탄을에 닿았을 때 제거되도록 설정해줍니다. 아래와 같이 코딩을 진행합니다.

 

보스공격 1 코딩

두 번째 공격을 만들어보겠습니다. 보스에서 보스공격선택 변수의 값이 2가 되었을 때 보스공격 신호를 보내줍니다. 그리고 1번 공격 때문에 총알이 되돌아올 수 있기 때문에 1.5초 기다리기를 넣어줍니다.

 

보스공격 신호 보내고 기다리기와 기다리기 블록 사용

보스총알로 돌아와 보스공격 신호를 받았을 때 조건을 추가해줍니다. 이번 공격은 조금 어려울 수 있습니다. 바로 보스총알 오브젝트를 회전시켜가며 날아가게 해야 합니다. 바로 아래의 그림처럼요!

 

총알 회전

오브젝트는 일정 각도만큼 회전하고 복제본이 생성됩니다. 이렇게 되면 보스 주변으로 동그랗게 총알이 날아가게 될것입니다. 총 4번을 발사하며, 패턴의 불균형을 위해 매 바퀴마다 각도를 달리 해줄것입니다. 코딩을 진행하기 전에 변수를 하나 만들어줍니다. 변수 이름은 보스총알각도이며, 이 변수는 회전될 각도를 정하기 위해 사용하는 변수입니다.

 

보스총알각도 변수 생성

 

마찬가지로 변수 정보가 화면에 보이지 않도록 해줍니다.

 

변수 정보 안보이게 하기

아래와 같이 코딩을 진행합니다. 

 

보스공격선택 값이 2일 경우

세 번째 공격을 만들어보겠습니다. 이 공격은 플레이어가 있는 쪽으로 랜덤하게 미사일이 발사되는 공격입니다. 우선 보스에 신호보내기와 기다리기 블록을 배치해줍니다.

 

보스공격 신호 보내고 기다리기와 기다리기 블록 사용

보스총알로 돌아와 보스공격 신호를 받았을 때 조건을 추가해줍니다. 

 

보스공격선택 값이 3이면

총알 100발을 발사하며 랜덤한 방향을 정해주어 발사시켜줍니다. 아래와 같이 코딩을 진행합니다.

 

보스공격선택 값이 3일 경우

이제 총알에 대한 코딩은 완료되었습니다. 4번째 공격은 돌진하는 공격입니다. 앞으로 돌진하였다가 다시 원래 위치로 되돌아오게 됩니다. 아래쪽 벽에 닿을때까지 아래로 이동하고, 그 후에 위쪽 벽에 닿을때까지 위로 이동하게 됩니다. 보스에 코딩을 진행합니다.

 

보스공격선택 값이 4일 경우

이제 마지막 5번입니다. 5번을 진행하기에 앞서 보스 체력을 만들도록 하겠습니다. 5번이 바로 수리이기 때문이죠. 보스 체력 정보를 저장하기 위한 변수 하나를 생성해야 하고, 보스 체력 정보를 출력해주기 위한 글상자 2개가 필요합니다. 우선 변수부터 만들겠습니다. 변수 이름은 보스체력입니다.

 

보스체력 변수 생성

마찬가지로 변수의 정보가 화면에 나타나지 않도록 설정해줍니다.

 

변수 정보 안보이도록 설정

이제 글상자 2개를 생성합니다. 글상자의 글귀는 각각 보스체력:숫자로 해줍니다. 글상자의 배경색은 투명으로 설정하며, 글자색은 색상 193, 채도 100, 명도 100으로 설정해줍니다.

 

글상자 배경 투명하게
글자 색상

배치는 아래와 같이 아이템 글상자 아래에 배치해줍니다.

 

글상자 배치

이 두개의 글상자는 보스가 등장했을때만 나타나야 합니다. 아래의 코드를 두 개의 글상자에 배치해줍니다.

 

글상자들에 대한 모양 보이기와 숨기기

숫자 글상자에 코딩을 진행합니다. 보스출동! 신호를 받게 되면 보스체력 변수의 값을 1000으로 정해주고, 글상자에 체력을 써줍니다.

 

보스체력 글상자에 쓰기

이제 보스가 체력을 회복할 때 사용할 신호를 하나 만들어줍니다. 신호 이름은 보스체력-회복입니다.

 

보스체력-회복 신호 만들기

이제 보스로 되돌아갑니다. 보스공격선택 변수의 값이 5가 선택되면 보스체력-회복 신호를 보내줍니다. 그 후 2.5초동안 우주선 수리! 라고 말해줍니다.

 

신호 보내고 말하기

숫자 글상자로 이동하여 코딩합니다. 보스체력-회복 신호를 받으면 2.5초동안 10번에 걸처 150만큼 체력을 회복할 것입니다. 체력이 최대치인 1000보다 높아지면 플레이어는 하기 싫어지겠죠? 1000이 넘으려 하면 더이상 수리되지 않도록 해줍니다. 아래와 같이 코딩을 진행합니다.

 

보스체력 회복 기능

 

이제 보스 스킬이 완성되었습니다! 이번에는 보스의 체력이 미사일과 폭탄에 닿았을 때 감소되도록 코딩을 진행해보고자 합니다. 신호를 2개 만들어줍니다. 신호의 이름은 각각 보스체력-미사일보스체력-폭탄입니다.

 

신호 2개 생성

숫자 글상자에 코딩을 진행합니다. 각 신호를 받았을 때 체력을 감소시킨 뒤 글상자에 다시 써줍니다. 미사일은 1, 폭탄은 5씩 달도록 코딩합니다.

 

보스체력 감소시키기

이제 충돌처리만 남았네요. 우선 보스와 미사일, 폭탄들이 충돌했을 때의 처리를 진행합니다. 미사일부터 진행합니다.

 

미사일-보스 충돌처리

기본폭탄은 터진 상태일때 보스와 닿았을 경우 처리 됩니다.

 

기본폭탄-보스 충돌처리

동전폭탄과 선풍폭탄은 보스를 통과하지 못하도록 설정합니다.

 

선풍.동전폭탄-보스 충돌처리

이제 로켓과 미사일, 보스 간 충돌처리를 진행합니다. 로켓충돌확인 함수에 추가해줍니다.

 

로켓-보스.보스총알 충돌처리

이렇게 보스를 완성해보았습니다! 정~~~말 길었네요 ㅠㅠ

보스의 기능이 다양하면 다양할수록 더욱 재밌겠죠? ㅎㅎ 고생한 보람이 있는 것 같습니다.

 

아직 게임 클리어 부분을 만들지 않았습니다. 그래서 체력이 0 밑으로 떨어졌을 때 처리를 하지 않았습니다. 엔딩 만들기를 진행할 때 처리할 예정입니다.

 

다음 포스팅에서는 효과음을 넣어보도록 하겠습니다.

긴글 읽어 주셔서 감사합니다 :)

반응형