이제 Player는 완성됐고, player에서 발사하는 ball을 만들면 된다.
ball의 구현은 간단하다.
처음 대기상태(isReady=1)로 만든 후, 발사(f키)를 하게 되면 상태 변경(isReady=0).
isReady가 0일 때, 현재 player 좌표를 기준으로 y--를 통해 위로 올라가는 모습을 구현하면 된다.
먼저 ball 자료구조를 만든다.
1 2 3 4 5 6 7 8 9 | typedef struct Ball { int isReady; Position position; clock_t moveTime; clock_t oldTime; }Ball; Ball g_Ball; | cs |
-isReady : 볼의 상태, (0:발사상태, 1:대기상태)
-position : 볼의 현재 좌표
-moveTime : move되는 시간 간격 지정(100ms)
-oldTime : 마지막 움직인 시간(이 시간을 기준으로 움직이게 된다)
*(CurTime-oldTime>moveTime)-> 이동 알고리즘 정의
Init() 내부에서 ball 변수 초기화
isReady는 발사 전 대기상태이므로 1, position은 현재 player의 위치 좌표를 넣어준다.
moveTime은 100ms
1 2 3 4 5 | //Ball 초기화 g_Ball.isReady = 1; g_Ball.position.x = g_Player.position.x; g_Ball.position.y = g_Player.position.y - 1; g_Ball.moveTime = 100; | cs |
볼의 움직임 처리
isReady가 0일 때(발사 했을 경우), 시간을 체크한다.
현재 시간(CurTime)이 이전 업데이트 된 시간(g_Ball.oldTime)의 차가 moveTime(100ms)가 되었을 경우 움직이는 알고리즘 적용.
*움직이는 알고리즘
position.y--;를 통해 상단으로 올라가는 공을 구현한다.(line 11~12)
공이 0보다 작아졌을 경우는 다시 상태 초기화.(Player위치로 이동-line 16~18)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | void Update() { //공의 이동처리 clock_t CurTime = clock(); if (g_Ball.isReady == 0) { if ((CurTime - g_Ball.oldTime) > g_Ball.moveTime) { if (g_Ball.position.y > 0) { g_Ball.position.y--; g_Ball.oldTime = CurTime; } else { g_Ball.isReady = 1; g_Ball.position.x = g_Player.position.x; g_Ball.position.y = g_Player.position.y - 1; } } } } | cs |
Render
볼을 화면에 그려준다. 볼의 현재 position을 기준으로 출력.
1 | ScreenPrint(g_Ball.position.x, g_Ball.position.y, "◎"); | cs |
KeyboardProcess
k키가 눌렸을 때 현재 player좌표로 볼의 position을 설정해주고, isReady=1을 넣어준다.
1 2 3 4 5 6 7 8 9 10 | case'k': if (g_Ball.isReady) { g_Ball.position.x = g_Player.position.x; g_Ball.position.y = g_Player.position.y - 1; g_Ball.oldTime = clock(); g_Ball.isReady = 0; } break; } | cs |
또한 j,l키로 이동중에 볼이 아직 발사되지 않았을 경우 플레이어를 따라갈 수 있도록 아래와 같이 추가한다.
1 2 3 4 5 | if (g_Ball.isReady) { g_Ball.position.x = g_Player.position.x; g_Ball.position.y = g_Player.position.y - 1; } | cs |
여기까지가 ball의 구현, 실행시키면 아래와 같이 확인할 수 있다.
'Software Development > C, C++' 카테고리의 다른 글
C언어로 게임만들기 - 5. 첫번째 게임_4)충돌처리 (1) | 2017.03.21 |
---|---|
C언어로 게임만들기 - 5. 첫번째 게임_3)움직이는 골대 만들기 (0) | 2017.03.20 |
C언어로 게임만들기 - 5. 첫번째 게임_1)Player 만들기 (3) | 2017.03.19 |
C언어로 게임만들기 - 4. 코드정리(전체코드) (3) | 2017.03.18 |
C언어로 게임만들기 - 3. 렌더링 기능 구현 (2) | 2017.03.15 |