본문 바로가기

개인 프로젝트(과제)

본캠프 3일차 (숙제 : 텍스트 슈팅 게임)

Bullets의 기초값은 30이다.

1번 과제: 텍스트 슈팅 게임 버그 고치기

지금까지 구현한 텍스트 슈팅 게임에는 버그들이 존재함. 그 중 가장 중요한 버그 두 가지를 고쳐보자.

 

1) 30발 이상 격발 할 수 있는 버그

현재 총알의 개수가 0보다 작은 경우에는 발사할 수 없게끔 로직을 수정해보세요.

”Out of ammo…”라는 문구가 출력되면 더 좋습니다.

Branch 노드를 이용하여 Bullets이 0 초과일 때 Bang!, 0이하면 Out of ammo...가 출력

2) 총알이 가득차 있는 경우에도 재장전 되는 버그

현재 총알의 개수가 30발 만발인 경우에는 재정전 되지 않게끔 수정해보세요.

”Already full…”이라는 문구가 출력되면 더 좋습니다.

Branch노드로 Bullets이 30일 때 Already full...이 출력되도록 하고 30이 아닐 때 Bullets을 30으로 저장하고 재장전됨이 출력되도록 구현함.

2번 과제: 텍스트 슈팅 게임 기능 추가하기

총알을 발사하고 장전만 할 수 있는 게임은 너무 지루함. 두 가지 추가 기능을 구현해보자.

1) 과열 상태 추가

여러 발을 격발할 경우, 총기가 과열될 수 있습니다.

CurrentTemperature라는 속성을 추가하고 한 발당 1씩 증가하게끔 로직을 짜봅시다.

그리고 CurrentHeatState라는 속성을 추가하고,

CurrentTemperature가 0~30까지는 CurrentHeatState가 ”Normal”

CurrentTemperature가 31~70까지는 CurrentHeatState가 ”High”

CurrentTemperature가 71이상은 CurrentHeatState가 ”Over”로 설정되게끔 합니다.

발사될 때 마다 CurrentTemperature가 1씩 증가하고 Branch를 이용하여 주어진 구간별로 CurrentHeatState가 Normal, High, Over이 되도록 구현함.

2) 쿨다운 기능

특정 키를 누를때마다 총기의 온도가 내려가게끔 구현해봅시다.

C키를 누르면 CurrentTemperature를 1씩 감소하게끔 로직을 작성해보세요.

CurrentTemperature가 변하면 CurrentHeatState도 그에따라 변해야합니다.

C를 누르면 CurrentTemperture를 1씩 감소시키고 현재 온도가 몇인지 출력한다. T를 누르면 현재 상태가 어떤지 출력한다.

3번 과제: 텍스트 슈팅 게임 무기 추가하기

라이플, 샷건, 피스톨 무기를 추가하고 무기교체를 구현해봅시다.

1) 무기 추가하기

0번을 누르면 라이플, 1번을 누르면 샷건, 2번을 누르면 피스톨로 교체됩니다.

격발하면 현재 무기의 총알만 소모하고, 과열 상태도 현재 무기만 과열됩니다.

 

구조체(Structure)를 이용하여 변수들을 묶어서 하나의 데이터 타입으로 만든다.

변수를 2개 만들어서 하나는 만든 구조체 Weapon을 넣고 여러 무기를 넣기 위해 배열로 바꾼다.

나머지 하나는 배열의 Index값을 넣기 위한 변수로 인티저로 바꿔준다.

배열에 무기의 각 이름, 최대 총알 값을 넣어준다.

키보드 숫자 1, 2, 3을 누를 때 배열의 인덱스 값을 0, 1, 2로 저장하고 배열의 Get 노드를 이용하여 인덱스 값이 바뀌면 바뀐 인덱스에 해당하는 무기의 이름이 출력되도록 구현한다.(get노드의 출력 핀을 분할함.)

이 get 노드를 이용하여 다른 로직에도 똑같이 구현해준다.

배열의 인덱스에 해당하는 무기의 Bullets이 0 이상이면 Bang!, 아니면 Out of ammo... 출력
발사하면 배열의 인덱스에 해당하는 무기의 Bullets이 -1, 현재 무기 이름과 남은 총알 수 출력, 무기의 온도 1 증가

재장전 로직은 첫번째로 인덱스의 숫자(=어떤 무기인지)를 먼저 판단하고 그 무기에 해당하는 초기 Bullets값과 같은지를 판단한다.
R을 누를 때 만약 각 무기의 초기 Bullets값과 현재의 총알 개수가 같다면 "Already full..." 출력, 아니면 "무기이름 Reload" 출력함.

쿨다운에도 현재 인덱스에 해당하는 무기의 온도를 -1 하도록 구현한다.

결과