본문 바로가기

분류 전체보기

(30)
로그라이크 게임 구현 2주차 (1) 이번 글에선 이중 연결리스트로 몬스터를 구현한 것에대해 적겠다. struct strMonster { strMonster* next; strMonster* prev; short int monsterCount; // 몬스터 식별 번호 short int monsterCategory; //몬스터 종류 번호 (무슨 비트맵을 사용하는가 , 어떤 움직임을 보이는가) POINT monsterPos; // 몬스터 좌표 }; strMonster* strMonsterList = NULL; strMonster* strMonsterInit(strMonster* tmp) { tmp = new strMonster; tmp->prev = NULL; tmp->next = NULL; tmp-> monsterCount = 0; tmp->..
로그라이크 게임 구현 1주차 (5) 이번 글에선 캐릭터를 뱀파이어 서바이버처럼 움직이게 하는 코드를 설명하겠다. 결론부터 말하면 뱀파이어 서바이버는 캐릭터가 움직이지 않는다. 캐릭터는 항상 중앙에 고정되어있다. 그렇다면 왜 나는 움직인다고 느낀걸까? 답은 간단하다. 캐릭터가 움직인게 아니라 배경과 몬스터들이 움직였기 때문이다. 마치 속도의 상대성처럼 캐릭터를 오른쪽으로 이동하라 명령하면 배경과 몬스터들이 왼쪽으로 이동한다. 즉 캐릭터의 좌표를 건드는게 아니라, 비트맵을 움직이게 하면 된다. 앞선 글에서 움직임을 구현하는 코드를 작성했다. 이 코드에서 움직일 좌표를 계산했는데 이 좌표들을 이용해서 배경을 움직이게한다. void CharacterMoveFun() { POINT newPoint; if (keyLayout[VK_LEFT] == k..
로그라이크 게임 구현 1주차(4) 이번 글에선 부드러운 움직임 구현에 관해 적겠다. https://pang2h.tistory.com/375 Win32 - 키보드 입력으로 사각형 움직이기 키보드 입력으로 사각형을 움직여봅니다. # Win32 프로그래밍을 이해하고 있어야합니다. # 알지 못하는 경우 여기에서부터 시작할 것을 권장합니다. # 본 문서는 Direct2D 기반으로 구현합니다. Win3 pang2h.tistory.com 내가 MFC수업을 들을 땐 키보드 처리를 '키보드 다운 윈도우 메세지' (WM_KEYDOWN)에서 처리하게끔 구현했다 그런데 이러한 방법으로 처리하면 부드럽게 움직이지 않는다. 1.........111111111111111 지금 한번 시도해보자. 1을 꾹 누르면 1이 따따따딱 바로 찍히는게 아니라 처음 누르고 얼마 ..
로그라이크 게임 구현 1주차 (3) 이번 글에선 더블 버퍼링에 대해서 작성하겠다. 게임의 기본은 버퍼링이다. 아무리 재밌는 게임이라도, 프레임이 작동을 하지 않는다면, 플레이어는 아무것도 하지 못한다. Win32에선 프레임을 생각보다 쉽게 구현이 가능하다. 바로 Invalidate()함수를 이용하는 것이다. 그런데 나는 Invalidate()함수만을 이용해서 프레임을 구현하다가, 얼마지나지 않아 문제를 직면했다. Invalidate()함수는 클라이언트 영역의 전체 또는 일부를 잘못된 것으로 표시한다. 이렇게 적으면 너무 어려워 보이지만, 쉽게 말하면 클라이언트 영역을 초기화하고, 다시 그리게 하는 함수이다. 게임을 진행하면서 장면이 전환 되었다면, 우리는 Invalidate()함수를 호출해서 새로 그려주어야한다. 그런데 이 그려주는 방식이..
로그라이크 게임 구현 - 1주차 (2) 이번 글에선 PeekMessage 함수를 정리하겠다. 해당 함수를 설명하기 이전에 우선 WinAPI가 어떤 방식으로 작동하는지 알아야할 필요가 있다. Win32의 운영방식은 윈도우 프로토콜을 실행하면서 작동한다. 이 윈도우 프로토콜은 LRESULT형태의 값을 반환하는 함수의 형태로 작성 되어있지만, 해당 함수를 직접 호출하는 코드는 보이지 않는다. 그 이유는 윈도우 프로토콜은 콜백의 형태로 호출되기 때문이다. 윈도우 프로토콜을 콜백하는 함수는 DispatchMessage라는 함수에 포함되어있다. DispatchMessage함수는 혼자서 기능을 할 순 없다. 이 함수는 메세지를 윈도우 프로토콜에 전달하는 역할을 하기 때문에 메세지를 받고 해석하는 함수가 필요하다. PeekMessage()함수는 메세지를 받..
로그라이크 게임 구현 - 1주차 (1) (2022.03.10~2022.03.17) 이 카테고리의 글들은 WinAPI를 공부하면서 사용한 개념들을 정리해놓은 글이다. 나는 로그라이크 게임을 구현해볼 예정이다. 이번 구현에선 로그라이크의 요소들을 직접 코딩해보고, 여러 오류들과 부딪혀볼 예정이다. 총 4주에 걸쳐 오프라인 게임을 먼저 구현할 것이다. 4주간의 구현에서 가장 중요시 하는건 두 가지이다. 첫 번째는 "프레임 다운을 최소화한 결과물" 만들기 두 번째는 "플레이어를 쫓아오는 몬스터의 AI가 능동적으로 임무를 수행하게 구현하기"이다. 이번 프로젝트에선 WinAPI 그중에서도 Win32 플랫폼을 사용해 개발할 것이다. Win32 플랫폼을 사용하는 이유는 여러가지이다. 그 중에서도 핵심적인 이유는 아래와 같다. 1. BITMAP , HBITMAP 타입의 변수를 이용해 쉽게 이미지를 사..