본문 바로가기
코스웨어/15년 스마트컨트롤러

20151119 업무일지 -여지윤- 맵핑기법

by 알 수 없는 사용자 2015. 11. 19.
728x90
반응형

1~8교시

★S/W☆


● Win32 API


□ 간단한 게임 만들기


- 지난시간에 이어서 오늘은 맵핑 기법을 이용하여 캐릭터를 움직임을 벽 컨트롤을 이용하여 움직일 수가 있다.


- 사용한 맵핑 코드는 다음과 같이 짤 수 있다.


- 위의 코드중에 이중 for 문 밑에 있는 SelectObject 와 BitBlt 두 개의 자리가 바뀌어야 한다.. (그러지 않으면 히어로가 보이지 않음..)


- 이렇게 만든 코드를 다음과 같은 결과가 나오게 된다.



- 하지만 이 문제는 그냥 벽을 통과한다는 점이다.


- 우선적으로 이 내용을 보완하기 위해서는 캐릭터가 어떤것인지 만들어준다.


- 캐릭터를 @로 만들어주고 스테이지를 하나 더 늘린다.



- 이렇게 코드를 짜주고 결과는 당연히 위와 같이 일어난다.


- 이중 for 문 밑에 있는 SelectObject 와 BitBlt를 지우지 않으면 분신이 생기게 된다.


- 원래 캐릭터가 움직이는 코드는 우리가 생각 했던 캐릭터를 움직이는 것이 아니라 그에 해당하는 좌표를 움직이는 것이기 때문에, 방향키를 수정해야 한다.


- 방향키를 수정하는 것은 다음과 같이 수정해야한다


# 방향키 1차 수정



- 이 코드를 동작시켜보면 아주 가관이 일어난다.


- 캐릭터가 맵을 다 지우고 돌아다닌다. 해당되는 게임은 아마 이렇게 만들지 않았을까 싶다 (DigDug 라는 땅파고 돌아다니면서 몬스터 터트리는 게임)


 ?????????


- 그리고 2차적으로 벽이라고 수정하게 하기 위해서는 Dot 이라는 값을 만들어 두었다.


- 해당 Dot 이미지를 추가하고 코드를 추가 한 다음 2차적으로 수정한다.


# 2차 수정



- 위와 같이 내용을 바꿔본다. 이래도 문제가 살짝 있을 것이다.


- 이제 내용을 좀 더 복잡하게 수정을 해야한다.


- 만약 캐릭터가 움직일때 벽이 있다면 해당 되는 벽에서 멈춰야 한다.


- 뿐만 아니라 경우의 수로 캐릭터가 움직일 수 있는 조건을 만들어야 한다. 우선적으로 박스 이미지를 추가하여 넣고 코드도 삽입한다.


- 만일 캐릭터가 움직일 수 있는 조건과 없는 조건을 알아보면은 다음과 같이 생각 할수 있다.


움직일 수 있는 조건 : 길, 닷, 박스 이후 길, 박스 이후 닷

움직일 수 없는 조건 : 벽, 박스 이후 벽, 박스 이후 박스


- 이런식으로 조건을 만들 수가 있다.


- 해당 조건을 만드려면 다음과 같은 코드를 짜게 되면 된다.



- 위와 같이 코드를 짜고 난 이후에 실행 시켜보면 박스를 움직일 수 있으며, 해당 되는 벽에는 더 이상 지나 갈 수 없게 만들어지게 될 것이다.



- 이 이외에도 박스를 움직여 보면 다음과 같은 행동이 된다.



□ 스테이지 클리어


- 이제 해당 되는 닷에 박스를 올려두면 게임에서 클리어가 됐다고 안내문이 뜨는 법을 만들 수가 있다.


- 그러기 위해서 위에서 코드를 추가하면 된다.


- 박스를 움직이는 것은 방향키쪽에서 해당되는 일이므로 이중 for문에 사용했던 코드를 그대로 들고와서 OnKeyDown 함수에서 처리를 한다.



- 위와 같은 코드가 짜여지면 스테이지가 클리어 했다는 문구만 뜰뿐 다음 스테이지로 넘어가지는 않는다..


- 다음 스테이지로 넘어가기전에 해당되는 캐릭터를 움직이는 좌표를 계산하여 캐릭터를 움직이게 하는 코드를 사용한다.


- 캐릭터를 움직일때 방향키를 누르고 있으면 화면에 계속 깜빡이는 현상이 일어난다. 그것을 막기 위하여 좌표값을 움직여서 방지하도록 한다.


- 우선적으로 RECT 구조체를 이용하여 해당 구조체를 만들어보자.



□ 스코어 참조하기


- 해당되는 내용의 게임에 스코어를 붙여 넣을 수가 있다.


- 스코어를 붙여 넣기 위해서는 다음과 같은 코드를 넣으면 된다.



- 이후에 점수를 실시간으로 추가 했다면 이제는 점수를 표시할 방향을 선택해보자


- 선택하는 방향은 위의 탭에서 사용이 가능하다.



- 해당하는 값의 결과는 다음과 같이 나오게 된다.

□ 리셋 등록


- 해당 게임을 하게 되면 도저히 진행 할 수 없을때가 있을 수가 있기 때문에 Restart 기능을 만들어 낼 수가 있다.


- 그러기 위해서는 키를 설정해야하는데 재시작 설정키는 HOME 키로 할 수가 있다.



- 위의 해당되는 내용의 결과는 다음과 같다.



□ 스테이지 클리어


- 모든 스테이지를 클리어 하게 되면 게임을 바로 끄는 것이 아니라, 그에 맞게 클리어 했다는 문구도 띄워주면 매우 편리하다.


- 이전에 하나의 스테이지 클리어 한 코드에서 추가적으로 코드를 삽입하여 완성 시킬 수 있다.



728x90