본문 바로가기
Programming/Entry

엔트리(entry)로 비행기 슈팅게임 만들기 - 13. 폭탄 적용하기

by BACKK0M 2019. 11. 15.
반응형

이번 포스팅에서는 상점에서 구매한 폭탄을 사용하는 코딩을 해보고자 합니다.

 

지난 상점 구매기능 만들기에서 기본폭탄, 동전폭탄, 선풍폭탄을 구매하는 기능을 만들었고, 구매하였을 때 아이템리스트에 저장되도록 코디하였습니다. 이제는 인게임에서 아이템리스트에 있는 폭탄 항목을 하나씩 가져와 사용하도록 코딩을 해보겠습니다.

 

폭탄 발사를 위한 키는 z이고, 폭탄을 교체하는 키는 x였습니다.  게임 내에서 구매한 폭탄을 사용하거나 교체하는 코딩을 진행해봅니다. 우선 게임 장면으로 이동합니다. 현재 선택된 폭탄이 무엇인지 확인하기 위한 글상자 2개를 만들어줍니다. 글상자 2개에는 각각 선택된 아이템: 과 아이템글 이라고 적어줍니다. 배경은 투명으로, 글자 색은 165, 100, 100으로 해줍니다.

 

선택된 아이템 글상자
아이템글 글상자
배경색 투명하게
글자색

그 후 오른쪽 상단에 배치해줍니다. 크기는 자유롭게 해주시면 됩니다.

 

글상자 배치

이제 아이템글 글상자코딩을 진행해봅니다. 장면이 시작되면 아이템리스트에 저장된 항목을 확인하고, 해당 항목이 비어있을 경우에는 없음이라는 글귀를, 있을 경우에는 첫 번째 항목의 아이템에 대한 글귀를 글상자에 적어줍니다.

 

첫 아이템 선택 코딩

이제 변수를 하나 생성할 것입니다. 이 변수의 역할은 리스트의 항목을 탐색하기 위해 사용되는 변수입니다. z키를 누르면 사용이지만, x키를 누르면 다음 아이템을 선택해야 합니다. 바로 이때 지금 만들 변수를 이용하여 탐색하게 되는 것이지요. 변수 이름은 아이템선택인덱스라 하겠습니다. 변수를 생성한 뒤 변수 정보가 화면에 나오지 않도록 가려줍니다.

 

아이템선택인덱스 변수 생성
변수 정보 안보이게 하기

이제 위에서 코딩한 부분을 잠깐 수정하도록 하겠습니다. 만약 리스트의 항목 수가 0일 경우에는 아이템선택인덱스의 변수 값을 0으로 정하고, 그렇지 않을 경우에는 1로 정합니다.

 

아이템선택인덱스 블록 추가하기

이제 계속 반복하기를 이용하여 z키가 눌렸는지, x키가 눌렸는지를 확인할 것입니다. z키와 x키가 눌리기 전에 아이템선택인덱스 변수 값이 0보다 큰지를 확인하고 키가 눌렸는지를 확인할 것입니다. 그 이유는 폭탄이 없을 때 키가 눌려도 아무런 동작을 수행하지 않아야 하기 때문입니다. 아래와 같이 코딩을 진행합니다.

 

키가 눌렸는지 확인하는 코드

우선 폭탄 교체를 위한 코딩을 해보도록 하겠습니다(x키가 눌렸을 때 처리입니다). 우선 생각해볼 내용은 다음과 같습니다.

 

1. 다음 항목을 선택할 수 있는가?(다음 항목이 존재하는가?)

  2. 참 -> 다음 항목이 존재할 경우 아이템선택인덱스 변수의 값 증가

  3. 거짓 -> 존재하지 않을 경우 아이템선택인덱스 변수의 값을 1로 정하기

4. 글상자에 아이템리스트아이템선택인덱스 값 번째 항목 내용을 적기

5. 0.5초 기다리기(키가 계속 눌려있다 판단되어 빠르게 변하기 때문)

 

위의 내용 중에서 가장 중요한 부분이 바로 1~3번 입니다. 아이템선택인덱스 라는 변수는 리스트의 항목을 탐색하기 위한 변수라 하였습니다. 만약 리스트의 항목 수보다 더 큰 값으로 변하게 되면 오류가 발생하게 됩니다(영어로는 IndexOutOfBoundsException, 우리나라 말로는 인덱스 범위 초과). 우리는 이 변수를 통해 원형 탐색을 수행해야 합니다. 리스트의 끝 항목까지 탐색을 끝냈다면 다시 처음 위치로 되돌아와 탐색을 다시 수행해야 한다는 것이죠. 그래서 3번의 내용과 같이 1번 항목을 다시 탐색할 수 있도록 변수의 값을 1로 정하는 것입니다. 바로 아래와 같은 느낌인거죠.

 

탐색

위의 정리된 내용대로 코딩을 진행해봅니다.

폭탄 교체 코딩

폭탄 교체 코딩이 드디어 완료되었네요! 이제 z키가 눌렸을 때 사용되도록 코딩 해보겠습니다. 우선 z키가 눌리면 아이템선인덱스 변수가 가리키고 있는 리스트 항목을 제거하도록 하겠습니다. 이번에도 조건을 같이 생각해볼까요?

 

1. 아이템선택인덱스 값 번째 항목을 아이템리스트 에서 삭제하기

2. 아이템선택인덱스 값이 1인가? (첫 번째 항목에 있는 아이템을 사용하였는가?)

  3. 참 -> 아이템리스트 항목 수가 0인가? (모든 아이템을 다 사용하였는가?)

    4. 참 -> 아이템선택인덱스를 0으로 정하기 (이제 선택할 아이템이 존재하지 않기 때문에)

    5. 거짓 -> 아이템선택인덱스를 1로 정하기 (첫 번째 아이템을 사용하여 첫 번째 항목이 제거되었을 경우 그대로 1 값을 갖도록 하기)

  6. 거짓 -> 아이템선택인덱스 값을 -1만큼 더하기 (중간~끝에 있는 아이템을 사용하였을 때 이전 항목에 있는 아이템이 선택되도록 하기)

7. 아이템선택인덱스 값이 0보다 큰가? (아직 리스트에 사용할 아이템이 남아있는가?)

  8. 참 -> 글상자에 아이템리스트 아이템선택인덱스 값 번째 항목 내용을 적기

  9. 거짓 -> 글상자에 없음 이라고 글쓰기

9. 0.5초 기다리기(키가 계속 눌려있다 판단되어 빠르게 변하기 때문)

 

뭔가 엄청 복잡하게 느껴집니다...만! 처음 아이템이 사용되었을 경우와 더이상 선택할 아이템이 없을 경우에 대해서만 처리를 해준 내용입니다. 첫 항목에 있는 아이템을 사용할 경우 변수의 값을 그냥 -1 해주게 되면 변수의 값이 0이 되고, 리스트의 어떠한 항목도 선택할 수 없게 됩니다. 그래서 남아있는지 확인하여 계속 첫 항목을 선택할지 안할지를 결정하게 되는 것이지요. 그리고 나머지 경우에 대해서는 아이템을 사용하면 그 이전에 있는 아이템 항목을 선택할 수 있도록 -1을 해주는 것입니다.

 

이제 사용하는것까지 코딩이 완료되었습니다. 그럼 실제로 폭탄이 나가도록 코딩해야겠죠? 아래 3개의 오브젝트를 추가해줍니다. 그리고 각 오브젝트의 이름을 기본폭탄, 선풍폭탄, 동전폭탄으로 바꿔줍니다.

1. 폭탄 (기본폭탄)

2. 선풍기 (선풍폭탄)

3. 오백원동전 (동전폭탄)

 

기본폭탄
선풍폭탄
동전폭탄

크기를 바꿔줍니다. 기본폭탄은 20, 나머지 두 폭탄은 30으로 바꿔줍니다.

 

기본폭탄 크기수정
선풍폭탄 크기수정
동전폭탄 크기수정

 

폭탄의 기능을 제작하기에 앞서 신호 3개를 만들도록 합니다. 기본폭탄발사, 동전폭탄발사, 선풍폭탄발사 이 세가지 이름을 갖는 신호를 만들어줍니다. 그 후 폭탄을 선택하여 발사하는 부분에서 어떤 폭탄을 선택했는지에 따라 신호를 달리 보내줍니다.

 

신호 3개 만들기
신호 보내기 코딩

위와 같이 아이템리스트에서 항목을 삭제하기 전에 신호를 보내주시면 됩니다.

 

이제 기본폭탄부터 제작해보도록 하겠습니다. 기본폭탄 오브젝트에 코딩을 진행합니다.

장면이 시작되면 모양을 숨기고 계속 로켓의 위치로 이동합니다.

 

기본폭탄 숨기기

그리고 기본폭탄발사 신호를 받았을 때 복제본 생성을 해줍니다.

 

기본폭탄 복제본 만들기

복제본이 생성되었을 때 기본폭탄은 아래와 같은 동작을 수행할 것입니다.

1. y좌표를 로켓의 위체어서 10씩 15번 만큼 바꾸기

2. 모양을 폭탄_터진으로 바꾸기

3. 크기를 150으로 정하기

4. 0.2초 기다리기

5. 복제본 삭제하기

 

설명에 적혀있는것처럼 기본폭탄은 앞으로 날아간 뒤 터지고 그 터진 모양에 적들이 닿을 경우 제거될 것입니다. 아래와 같이 코딩을 진행합니다.

 

기본폭탄 동작 코딩

이번에는 동전폭탄이 동작하는 코딩을 해보겠습니다. 동전폭탄 오브젝트에 코딩합니다.

기본폭탄과 마찬가지로 장면이 시작되면 모양을 숨ㅈ기고 로켓 위치로 이동하도록 합니다. 

 

동전폭탄 숨기기

그리고 동전폭탄발사 신호를 받으면 복제본이 생성되도록 합니다. 동전폭탄은 기본폭탄과 달리 10개가 0.2초마다 복제될 것입니다. 폭탄 10개가 나간다는 것이죠.

 

동전폭탄 복제본 만들기

복제본이 생성되었을 때 동전폭탄은 아래와 같은 동작을 수행할 것입니다.

1. 모양 보이기

2. 크기를 70으로 정하기

3. 위쪽 벽에 닿을때까지 y좌표를 10만큼 바꾸기

4. 복제본 삭제하기

 

설명에 적힌것처럼 동전폭탄은 다수의 적을 제거할 수 있는 폭탄입니다. 벽에 닿을때까지 계속 날아가게 되며, 닿은 적들은 모두 제거가 되는 것이죠. 아래와 같이 코딩을 진행해줍니다.

 

동전폭탄 기능 코딩

마지막으로 선풍폭탄이 동작하는 코딩을 해보겠습니다. 선풍폭탄 오브젝트에 코딩합니다.

기본폭탄과 마찬가지로 장면이 시작되면 모양을 숨기고 로켓 위치로 이동하도록 합니다. 

 

선풍폭탄 숨기기

그리고 선풍폭탄발사 신호를 받으면 복제본이 생성되도록 합니다. 선풍폭탄은 12개가 0.2초마다 복제될 것입니다. 폭탄 12개가 나간다는 것이죠.

 

선풍폭탄 복제본 만들기

복제본이 생성되었을 때 동전폭탄은 아래와 같은 동작을 수행할 것입니다.

1. 모양 보이기

2. 크기를 75로 정하기

3. 방향을 -45부터 45사이의 무작위수로 정하기

4. 계속 반복하기

  5. 방향을 11도 만큼 회전하기

  6. 이동 방향으로 10만큼 움직이기

  7. y좌표를 5만큼 바꾸기

  8. 위, 왼쪽, 오른쪽 벽에 닿았을 경우 복제본 삭제하기

 

설명에 적힌것처럼 선풍폭탄은 다수의 적을 제거할 수 있는 폭탄입니다. 벽에 닿을때까지 계속 회전하며 날아가게 되며, 닿은 적들은 모두 제거가 되는 것이죠. 아래와 같이 코딩을 진행해줍니다.

 

선풍폭탄 기능 코딩

마지막으로 운석오프젝트가 폭탄들에 닿았을 경우 제거되도록 코드를 수정해봅니다. 운석 오브젝트에 코딩을 진행합니다.

 

폭탄에 대한 충돌처리

이렇게 모든 폭탄에 대해 코딩을 완료하였습니다. 아마 여태 진행했던 코딩중에 가장 어렵지 않았나 생각됩니다.

다음 포스팅에서는 게임 난이도를 적용해보도록 하겠습니다.

 

감사합니다 :)

반응형