1~8교시
★S/W☆
● Win32 API
□ 간단한 게임 만들기
- 지난시간에 이어서 오늘은 맵핑 기법을 이용하여 캐릭터를 움직임을 벽 컨트롤을 이용하여 움직일 수가 있다.
- 사용한 맵핑 코드는 다음과 같이 짤 수 있다.
- 위의 코드중에 이중 for 문 밑에 있는 SelectObject 와 BitBlt 두 개의 자리가 바뀌어야 한다.. (그러지 않으면 히어로가 보이지 않음..)
- 이렇게 만든 코드를 다음과 같은 결과가 나오게 된다.
- 하지만 이 문제는 그냥 벽을 통과한다는 점이다.
- 우선적으로 이 내용을 보완하기 위해서는 캐릭터가 어떤것인지 만들어준다.
- 캐릭터를 @로 만들어주고 스테이지를 하나 더 늘린다.
- 이렇게 코드를 짜주고 결과는 당연히 위와 같이 일어난다.
- 이중 for 문 밑에 있는 SelectObject 와 BitBlt를 지우지 않으면 분신이 생기게 된다.
- 원래 캐릭터가 움직이는 코드는 우리가 생각 했던 캐릭터를 움직이는 것이 아니라 그에 해당하는 좌표를 움직이는 것이기 때문에, 방향키를 수정해야 한다.
- 방향키를 수정하는 것은 다음과 같이 수정해야한다
# 방향키 1차 수정
- 이 코드를 동작시켜보면 아주 가관이 일어난다.
- 캐릭터가 맵을 다 지우고 돌아다닌다. 해당되는 게임은 아마 이렇게 만들지 않았을까 싶다 (DigDug 라는 땅파고 돌아다니면서 몬스터 터트리는 게임)
?????????
- 그리고 2차적으로 벽이라고 수정하게 하기 위해서는 Dot 이라는 값을 만들어 두었다.
- 해당 Dot 이미지를 추가하고 코드를 추가 한 다음 2차적으로 수정한다.
# 2차 수정
- 위와 같이 내용을 바꿔본다. 이래도 문제가 살짝 있을 것이다.
- 이제 내용을 좀 더 복잡하게 수정을 해야한다.
- 만약 캐릭터가 움직일때 벽이 있다면 해당 되는 벽에서 멈춰야 한다.
- 뿐만 아니라 경우의 수로 캐릭터가 움직일 수 있는 조건을 만들어야 한다. 우선적으로 박스 이미지를 추가하여 넣고 코드도 삽입한다.
- 만일 캐릭터가 움직일 수 있는 조건과 없는 조건을 알아보면은 다음과 같이 생각 할수 있다.
움직일 수 있는 조건 : 길, 닷, 박스 이후 길, 박스 이후 닷
움직일 수 없는 조건 : 벽, 박스 이후 벽, 박스 이후 박스
- 이런식으로 조건을 만들 수가 있다.
- 해당 조건을 만드려면 다음과 같은 코드를 짜게 되면 된다.
- 위와 같이 코드를 짜고 난 이후에 실행 시켜보면 박스를 움직일 수 있으며, 해당 되는 벽에는 더 이상 지나 갈 수 없게 만들어지게 될 것이다.
- 이 이외에도 박스를 움직여 보면 다음과 같은 행동이 된다.
□ 스테이지 클리어
- 이제 해당 되는 닷에 박스를 올려두면 게임에서 클리어가 됐다고 안내문이 뜨는 법을 만들 수가 있다.
- 그러기 위해서 위에서 코드를 추가하면 된다.
- 박스를 움직이는 것은 방향키쪽에서 해당되는 일이므로 이중 for문에 사용했던 코드를 그대로 들고와서 OnKeyDown 함수에서 처리를 한다.
- 위와 같은 코드가 짜여지면 스테이지가 클리어 했다는 문구만 뜰뿐 다음 스테이지로 넘어가지는 않는다..
- 다음 스테이지로 넘어가기전에 해당되는 캐릭터를 움직이는 좌표를 계산하여 캐릭터를 움직이게 하는 코드를 사용한다.
- 캐릭터를 움직일때 방향키를 누르고 있으면 화면에 계속 깜빡이는 현상이 일어난다. 그것을 막기 위하여 좌표값을 움직여서 방지하도록 한다.
- 우선적으로 RECT 구조체를 이용하여 해당 구조체를 만들어보자.
□ 스코어 참조하기
- 해당되는 내용의 게임에 스코어를 붙여 넣을 수가 있다.
- 스코어를 붙여 넣기 위해서는 다음과 같은 코드를 넣으면 된다.
- 이후에 점수를 실시간으로 추가 했다면 이제는 점수를 표시할 방향을 선택해보자
- 선택하는 방향은 위의 탭에서 사용이 가능하다.
- 해당하는 값의 결과는 다음과 같이 나오게 된다.
□ 리셋 등록
- 해당 게임을 하게 되면 도저히 진행 할 수 없을때가 있을 수가 있기 때문에 Restart 기능을 만들어 낼 수가 있다.
- 그러기 위해서는 키를 설정해야하는데 재시작 설정키는 HOME 키로 할 수가 있다.
- 위의 해당되는 내용의 결과는 다음과 같다.
□ 스테이지 클리어
- 모든 스테이지를 클리어 하게 되면 게임을 바로 끄는 것이 아니라, 그에 맞게 클리어 했다는 문구도 띄워주면 매우 편리하다.
- 이전에 하나의 스테이지 클리어 한 코드에서 추가적으로 코드를 삽입하여 완성 시킬 수 있다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151119 - 홍준모 (게임 만들기) 6일 차 (4) | 2015.11.19 |
---|---|
20151119_박서연_일일업무일지_WinAPI(6) (4) | 2015.11.19 |
20151119 - 권오민 - WinAPI 6일차 (5) | 2015.11.19 |
20151119_주재민_API_6(작성중) (4) | 2015.11.19 |
20151119 윤재희 #6. 게임 작성(맵핑, 박스 밀기) (6) | 2015.11.19 |
20151119 22번 업무일지 우대희 API (6) | 2015.11.19 |
20151119-김재홍-win32API_6일차-푸시푸시게임 (4) | 2015.11.19 |
김태현 WinAPI 5일차 (4) | 2015.11.19 |