본문으로 바로가기

WinAPI_2020_0605_금_알카노이드

category WinAPI Programming 2020. 6. 8. 07:56

WinAPI_Framework_SGA.zip
0.04MB

 

[프로그램 설계]

0. 프로그램 시작 시 Ball 객체 1개와 Player가 생성되고 초기화된다

 

0. Ball은 Player에 부착되어 있는 상태로 Player 이동 시 같이 움직인다

 

0. SpaceBar를 이용하여 부착된 Ball을 발사한다

 

0. Ball의 발사 및 충돌 후 반사의 계산에 Vector2를 이용한다

 

0. 최초 발사 각도는 Vector2(0, -1) 방향이다

 

0. 이후 Player와 Ball의 충돌 시 [a. base Point](영상에서 Player 하단의 점)와

충돌 시점의 [b. Ball의 위치]방향벡터(b-a)를 계산하여 반사 처리한다

 

0. ball이나 item은 게임 영역의 하단부에 충돌 시 비활성화되어 Obejct Pool에 보관된다

 

0. 화면 우상단에 activeBalls로 현재 활성화된 ball의 개수가 표시되며,

개수가 0이 되면 Player의 life를 1 감소시키고 초기화한다

 

# 구현한 Item 종류

1. size up / 2. speed up / 3. multiply ball / 4. fireball mode / 5. magnetic mode

 

[구현 중점]

0. Player, Ball, Block, Item 등 4개 object class 구현

 

0. GameScene <-> object 간 유기적인 포인터 연결 활용

- this 포인터를 이용하여 Object 생성 시 Scene* 할당

 

0. STL::vector를 활용하여 Ball, Block, Item 오브젝트 풀 생성

- 오브젝트 풀에 속하는 각 객체들의 Active, InActive 전환 시

다양한 상황에서 예외 처리와 초기화

 

0. Vector2 class를 작성하여 Rotation() 기능 구현

 

0. "HGDIOBJ oldObj = SelectObject(HDC hdc, HGDIOBJ hgdiobj)"

적절히 활용하여 정돈된 색상 표현

 

 

[보완점]

0. Block <-> Ball의 충돌처리 매끄럽게

- Block 간의 거리가 좁은 부분에서 중복 충돌되어 한꺼번에 여러 Block이 사라지는 버그

- Ball이 동시에 2개의 Block에 충돌했을 때 반사각 처리