분류 전체보기
빌더 패턴 - 직사각형 만들기
배경 의 RECT는 단순히 초기화 리스트에 left, top, right, bottom 순으로 LONG 인수를 주면 초기화가 가능하다. 하지만 게임에서 직사각형을 생성할 때 대부분 리터럴로 생성하기보단 여러 변수가 조합된 상대적 위치로 생성하는 경우가 많다. 이럴 때 사각형의 잘못된 생성으로 오류가 나면, 코드의 가독성이 떨어져 어디가 잘못되었는지 알아보기 힘들다. RECT inventory_rect = { client.right - INVEN_RIGHT_SPACE - inventory_width, client.right - INVEN_RIGHT_SPACE, client.top + INVEN_TOP_SPACE, client.top + INVEN_TOP_SPACE + inventory_height }; 위..
* passkey 패턴 : public 멤버 함수의 접근 권한 관리로 public 함수를 non-public 하게
배경 싱글톤 패턴을 구현할 때 부모 클래스의 protected 멤버로 정의된 클래스를 자식 클래스의 특정한 멤버 함수가 매개변수로 받으면, 그 멤버 함수는 public이긴 하지만 그 부모 클래스에서만 이용 가능한, reverse-protected인 양 동작하는 멤버 함수가 된다는 사실을 이용했다 이를 조금 더 일반화하여, public인 멤버 함수를 특정 지역에서만 사용 가능하도록 하는 디자인 패턴이 혹시 이미 존재하지 않을까 했다 그 결과 다음 두 글을 발견할 수 있었다 https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Friendship_and_the_Attorney-Client More C++ Idioms/Friendship and the Attorney-Cli..
승무 - 조지훈
승무 얇은 사 하이얀 고깔은 고이 접어서 나빌레라. 파르라니 깎은 머리 박사 고깔에 감추오고, 두 볼에 흐르는 빛이 정작으로 고와서 서러워라. 빈 대에 황촉불이 말없이 녹는 밤에 오동잎 잎새마다 달이 지는데, 소매는 길어서 하늘은 넓고 돌아설 듯 날아가며 사뿐이 접어 올린 외씨버선이여. 까만 눈동자 살포시 들어 먼 하늘 한개 별빛에 모두오고, 복사꽃 고운 뺨에 아롱질 듯 두 방울이야 세사에 시달려도 번뇌는 별빛이라. 휘어져 감기우고 다시 접어 뻗는 손이, 깊은 마음 속 거룩한 합장인 양하고, 이 밤사 귀또리도 지새우는 삼경인데 얇은 사 하이얀 고깔은 고이 접어서 나빌레라
c++식 랜덤값 얻기의 개선안
std::default_random_engine을 선언해놓고 std::uniform_int_distribution 객체를 생성해 operator()의 인자로 주는 기존 c++스타일 랜덤은 몇 가지 한계가 있다 가장 중요한 이유로, std::default_random_engine은 용량이 커 전역 객체인 편이 나은데, 이 전역 객체는 코드를 유지보수하기 어렵게 만든다. 전역 객체는 어디에서나 접근 가능하기 때문에 오류나 수정 사항이 발생하면 모든 코드를 검토해야 하기 때문이다 심지어는, 여러 개의 헤더 파일로 이루어진 코드에서 extern 키워드를 통해 전역 객체에 접근하는 경우, 링크 순서가 꼬이면 도무지 이해 할 수 없는 디버그 메시지를 내뱉는 링크 에러의 지옥에 빠지게 된다 사용자가 객체의 이름을 마..
더블버퍼링
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; // ... switch (uMsg) { // ... case WM_PAINT: hDC = BeginPaint(hWnd, &ps); BackBuffer.Draw(hDC); EndPaint(hWnd, &ps); break; // ... } // ... } Colored by Color Scripter cs WM_PAINT 메시지가 발생할 때마다 DC에 새롭게 그림을 그리면 기존의 그림을 비우고 새로운 그림을 그리기까지의 시간이 있기 때문에 flickering 현상이 나타난다 BackBuffer에 그림을 미리 그려 놓고, D..
싱글톤 패턴
https://jartlife.tistory.com/52 타이머 - 프레임 관리 게임의 동작 게임은 일정 시간 간격마다 사용자 입력을 처리하고 객체들을 업데이트한 뒤 객체들을 렌더링한다. 따라서 게임에서 타이머의 역할은 매우 중요하다. 게임의 거의 모든 기반이 타 jartlife.tistory.com 위 글에서 복잡한 디자인 패턴 없이 싱글톤을 구현했다. 위 글에서 사용한 방법이 훨씬 더 나은 방법이라 생각되지만, 이 글에서 구현한 싱글톤 패턴이 불가피할 상황이 있을지도 모르므로 글은 남겨둔다. // singleton.h #ifndef _singleton #define _singleton template class Singleton { public: static auto& getinst() { stati..