본문 바로가기
WinAPI

다시 공부 하는 Win API (3) - 슈팅 게임 만들기(1)

by Srff5123 2025. 10. 18.
728x90

저번에 간단하게 키다운을 이용하여 선과 도형을 그리고 색깔을 변경하는 작업을 하였다.

이번에는 도형 하나를 그리고 그것을 움직이며 발사체를 만들어 위쪽으로 총알을 발사하는 것을 구현할 것 이다.

 

 일단 Circle.h, cpp 파일을 새롭게 만들고 framework.h에 include를 해주고

코드를 작성하자. Circle을 직접 받아 바로 그리진 않고 원이라는 객체를 만들어 관리해줄 것이다.

원을 그리는 과정에서 필요한 것들을 해당 코드에 작성을 해준다. 

 

해당 원을 직접 움직이며 플레이를 하는 플레이어가 될것이기에

Circle을 상속받는 Player.h, cpp파일을 만들고

플레이어에 필요한 조작들과 위에서 만든 원을 Render해준다.

이제 플레이어가 만들어 졌으면, 발사를 할 발사체 파일을 만들어주자

bullet.h , cpp. 그리고 해당 총알을 관리해줄 bulletManage.h,cpp를 만들어준다.

당연히 위에서 만든 것들을 framewokr.h에 추가를 해주는데

include를 할때 bullet파일이 player보다 위에 선언되어야 한다. 코드 상 player에서 bullet을 호출하게 되는데

player보다 아래에 선언하면 bullet파일을 찾지 못하는 오류가 발생한다

 

불렛도 원으로 만들 것이기에 Circle을 상속 받는다.

불렛은 캐릭터의 위로 발사되도록 만들어주고 IsActive를 통해 재장전을 해준다.

맵 밖으로 나가면 할당 및 해제를 해줌,

위의 방식으로 하는 이유는 (벡터를 이용해 객체를 여러개를 만들어 사용하기 때문인데)

벡터를 사용하는 것은 하나의 객체로 발사를 하면 키다운을 여러번 하였을 경우 총알이 나가다 사라지고 다시 캐릭터에서 생성된다.

아마 재장전 부분에서 시간같은걸 추가하면 정말로 장전하는 것처럼 만들어 줄 수 있을 것 같다.

아까도 말했듯이 총알 전체를 관리해주는 불렛 매니저이다.

위에서 말한 벡터관련 내용 코드가 여기에 작성되고 또한 render와 발사도 여기서 관리해준다.

fire()함수가 발사하는 부분이다.

이렇게 발사하는 함수를 만들었으면 당연히 Player.cpp에서 그것을 호출하는 방식으로 진행한다.

 

이제  플레이어가 총을 쏘면 맞을 객체가 필요하다 Enemy.h와 cpp를 만들어준다.

Enemy는 해당 글에서는 그려주기만하고 맞아서 hp가 깎이는 본격적인 슈팅게임은 다음 글에서 작성할것이다.

 

이제 게임의 전반적인 부분을 관리해줄 GameManager.h, cpp를 만들어주자

플레이어와 적의 위치 및 할당, 제거 

그리고 총과 플레이어 적 업데이트 렌더 들이 이부분에 들어가주어 관리해준다.

 

 

이제 작성해야 하는 것들은 거의 작성을 완료 하였고

Main함수로 돌아와 예전에 적었던 불필요한 것들을 전부 (PaintTool관련 것들) 지우고

GameManager를 통한 관리로 바꾸어주자.

GameManager를 불러오고 CREATE에서도 다시 생성해준다.

그리고 여기서 중요한게 SetTimer를 해주어야 한다. 이래야 입력값이 들어올 때 재생성을 해주어 움직이게 된다.

SetTimer의 세번째 매개변수가 시간을 담당한다. 이벤트를 몇초 간격으로 할것인지 1000 -> 1초이다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

이렇게 하면 전반적인 캐릭터 생성 및 움직이기와 총알발사

적은 그리기만 하는것이 완성된다.

 

 

728x90