본문 바로가기

전체 글330

7. 템플릿 Type Traits 본 글은 코드누리의 Template Programming 강좌를 개인 학습 목적으로 정리한 글 입니다. https://www.ecourse.co.kr/course-status/ Type Traits 컴파일 시간에 타입에 대한 정보, 변형된 타입을 얻을 때 사용함 메타 함수라고도 불림 T가 포인터인지 알아내는 테크닉 #include #include // foo의 T가 포인터인지 알아내려면 구조체를 만듦 template struct xis_pointer { enum { value = false}; }; //부분 특수화 template struct xis_pointer { enum { value = true }; }; template void foo(T v) { // 부분 특수화를 통해 is_pointer 구.. 2022. 9. 30.
6. 템플릿 특수화 본 글은 코드누리의 Template Programming 강좌를 개인 학습 목적으로 정리한 글 입니다. https://www.ecourse.co.kr/course-status/ 템플릿 특수화란? 특정 타입에 대해 이렇게 처리 해주세요~ 하는 것 클래스를 만들어내는 틀을 필요에 맞게 교체하는 것 #include #include /* Primary template */ template class Stack { public: void push(T a) { std::cout 2022. 9. 29.
[PUSH PUSH] 게임 로직 구현 - AssortRock 16일차 오프라인 수업_220928 게임 로직 변경 C스타일의 2차원 배열을 std::vector로 변경 기존의 경우 메모리 할당하는 것을 Stage 사이즈에 맞게 하드코딩(8, 8)해서 넣었는데 이런 방식으로 갈 경우, 다른 맵을 넣었을 때 애매해지는 문제가 있음 그래서 메모장 맵 파일 맨 위에 맵의 x , y 크기를 넣어줌으로써 그 좌표로 맵을 할당하고, 그 크기로 반복문을 돌며 맵을 로드함 Stage::Load 로직 변경 Map* Stage::Load() { FILE* fp = nullptr; errno_t error = fopen_s(&fp, "..\\Stages\\Stage02.txt", "rt,ccs=UTF-8"); if (error != 0) { std::wcout AddGameObject(dynamic_cast(player).. 2022. 9. 29.
5. 게임 메모리 읽고 쓰기 본 게시글은 메모리에 대한 깊은 이해를 위해 에이콘 출판사의 "봇을 이용한 게임 해킹" 서적을 보고 필기한 자료입니다. 따라서 디테일한 부분에서 본 서적의 실제 내용과 다를 수 있고 글쓴이의 주관이 들어가 있음을 참고해주시기 바랍니다. 문제 시 비공개 처리하도록 하겠습니다. 코드를 작성할 때 메모리가 어떻게 동작하는지 늘 염두에 두고 있어야 한다. 게임 프로세스 식별자 알아내기 게임 메모리에 무언가 쓰려면 프로세스 식별자 (PID)를 알아야 한다. PID는 활성화된 프로세스를 구별할 수 있는 고유 번호 시각적으로 확인 가능한 창이라면 GetWindowThreadProcessId()로 PID를 구할 수 있다. 첫 번째 파라미터로 창의 핸들을 가짐 두 번째 파라미터로는 PID를 받을 DWORD 변수의 포인터.. 2022. 9. 29.