분류 전체보기 143

[Win32 API Brotato 모작] 5. Object

이번에는 이 프로그램에서 그려질 모든 객체의 부모 클래스이자 추상 클래스인 CObject 클래스에 대해 설명하겠다. CObject를 상속받는 자식 클래스들은 다음과 같다.CDamagedUI : 몬스터에게 데미지를 입힐 때 얼만큼의 피해를 입혔는지 숫자로 표시하기 위한 클래스Ground : 전투 맵 상에서 맵 밖으로 빠져나가지 못하게 하기 위해 벽을 구현할 클래스Missile : 총기류 무기들의 탄환을 구현하기 위한 클래스Monster : 몬스터Player : 유저 플레이어UI : 화면상에 Text를 표현하거나, 뒷 배경과 같은 Panel, 버튼을 구현하기 위한 클래스Weapon : 플레이어가 소지할 무기CObject 멤버 변수private: GROUP_TYPE m_ObjType; wstring m_..

[Win32 API Brotato 모작] 4. Core & Scene

이번에는 CCore 클래스의 progess 함수에 대해 살펴보겠다.void CCore::progress() { // ============ // Manager Update // ============ CTimeMgr::GetInstance()->update(); CkeyMgr::GetInstance()->update(); CCamera::GetInstance()->update(); CSoundMgr::GetInstance()->update(); // ============ // Scene Update // ============ CSceneMgr::GetInstance()->update(); // 충돌 체크. CCollisionMgr::GetInstance()->update(); //UI 이벤트 체크 ..

[Win32 API Brotato 모작] 3. Main & Core & Manager (3)

마지막으로 설명한 Manager 클래스는 Direct2DMgr이다. 처음에는 GDI와 GDI+를 이용하여 화면을 렌더링하는 방식을 사용했는데, 앞서 CTimeMgr를 이용하여 FPS를 구해보니 매우 처참한 성능이 나왔다. 전투맵에서 타일맵만 렌더링했는데 FPS가 20~40대가 나왔다.  그래서 채택한 방식이 Direct2D를 이용하여 이미지파일과 객체들을 렌더링하는 방법을 사용했다. 그 전에 먼저 알고가야할 개념이 하나 있다. 바로 더블 버퍼링(Double Buffering)이다. 더블 버퍼링 ( Double Buffering )더블 버퍼링은 컴퓨터 그래픽스와 사용자 인터페이스에서 화면을 업데이트하거나 애니메이션을 표시할 때 발생하는깜박임(flickering) 현상과 같은 시각적 문제를 해결하기 위해 사..

[Win32 API Brotato 모작] 2. Main & Core & Manager (2)

이전 포스트에 이어서 CFontMgr, CEventMgr, CCollisionMgr, CSceneMgr, CUIMgr를 살펴보겠다.#include "pch.h"#include "CFontMgr.h"#include "CPathMgr.h"#include "CFontCollectionLoader.h"CFontMgr::CFontMgr() : m_pDWriteFactory(nullptr){ DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast(&m_pDWriteFactory));}CFontMgr::~CFontMgr(){ delete[] m_fontFamilies; for (auto f..

[Win32 API Brotato 모작] 1. Main & Core & Manager (1)

시연 영상https://www.youtube.com/watch?v=d-VZS1AdvtA&list=LL&index=3 이번 기회에 win32api를 유튜브로 간단하게 독한한 뒤 "BlobFish" 개발사의 Brotato 게임을 모작으로 한번 만들어 보겠다. 제작을 시작한지는 시간이 꽤 지나긴했지만 기억을 되살려 한번 제작기를 작성해보도록 하겠다. int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_P..

[Win32 API] 4. Delta Time

1. Delta Time 이란 ?Delta Time ( 델타 타임 ) :현재 프레임과 이전 프레임 사이에 경과한 시간을 나타낸다.단위는 보통 초 (seconds) 또는 밀리초 (milliseconds)로 표현된다.델타 타임은 게임의 동작( 예 : 캐릭터 이동, 애니메이션, 물리 계산 등등 ) 이 프레임 속도에 의존하지 않도록 만들어 준다.  2. Delta Time이 중요한 이유프레임 속도 독립성 :게임은 다양한 하드웨에에서 실행되기 때문에, 프레임 속도가 다를 수 있다. ( 예 : 고성능 PC는 120FPS, 저사양 PC는 30FPS )프레임 속도에 따라 게임의 동작이 달라지면 문제가 발생한다. 예를 들어, 캐릭터가 초당 5픽셀씩 이동하도록 설정했을 때30FPS에서는 초당 5 x 30 = 150픽셀 이..

WinApi 2025.02.08

[Win32 API] 3. 디자인 패턴 ( 싱글톤 , Singleton )

1. 싱글톤 이란 ?싱글톤(Singleton) 패턴은 클래스의 인스턴스가 단 하나만 생성되도록 보장하고, 해당 인스턴스를 전역적으로 접근할 수 있는 디자인 패턴이다.주로 자원 관리 ( 예 : 데이터베이스 연결 , 설정 관리 , 로깅 시스템 ) 와 같은 상황에서 사용된다. 2. 싱글톤 패턴의 특징단일 인스턴스 보장 : 클래스의 인스턴스가 프로그램 내에서 단 하나만 생성되며, 이를 통해 메모리 낭비를 방지한다.전역 접근 제공 : 생성된 인스턴스를 어디서든 접근할 수 있도록 합니다.지연 초기화 : 필요할 때만 객체를 생성하여 초기화 순서 문제를 방지한다.복사 방지 : 복사 생성자와 대입 연산자를 비활성화하여 인스턴스가 복제되 않도록 한다. 3. 싱글톤 구현#include class Singleton {publ..

WinApi 2025.02.08

[Win32 API] 2. 그려보기

이번에는 창에다가 사각형을 그려보고 이동시키는 작업을 해보겠다. 1. Device Context(DC) 란?Win32 API에서 Device Context ( DC )는 출력 장치와 상호작용하기 위해 사용되는 중요한 데이터 구조체이다.DC는 그래픽 출력 작업을 수행하기 위해 필요한 모든 정보를 포함하며, Windows의 GDI(Graphics Device Interface) 모듈에 의해 관리된다. 정보에는 색상, 폰트, 비트맵, 그리기 모드 등 여러가지가 포함되어 있다. - 간단한 텍스트 출력LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message) { case WM_COM..

WinApi 2025.02.05

[Win32 API] 1. 개요

1. Win32 API란?Win32 API는 Windows 운영 체제에서 애플리케이션이 시스템 리소스(파일, 메모리, 프로세스 등)을 사용할 수 있도록 제공하는 함수 집합이다.주로 네이티브 C / C++ 환경에서 사용된다.2. Win32 API의 기본 구조wWinMain 함수 : Win32 프로그램의 진입점이다. 윈도우를 생성하고 메시지 루프를 처리하는 역할을 수행한다.int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdSho..

WinApi 2025.02.05

[BOJ/백준 12025/C++] 장난꾸러기 영훈

https://www.acmicpc.net/problem/12025 [ 문 제 ]- 희현이는 인터넷 ID를 만들 때 주로 쓰는 비밀번호가 있다. 하지만 이 비밀번호는 너무 길어서 희현이는 항상 쪽지에 적어 다니면서 확인을 한다.- 하지만 장난꾸러기 영훈이는 이 쪽지를 가져가 1들 중 몇 개를 6로, 6들 중 몇 개를 1로 바꾸고 2들 중 몇 개를 7로 7들 중 몇 개를 2으로 바꾸는 장난을 쳤다. 따라서 영훈이가 장난쳐놓은 비밀번호 무용지물이 되었다.- 왜냐하면 1이라고 쓰여 있어도 1 또는 6일수가 있고, 또한 6이라 쓰여 있어도 1 또는 6일수가 있다. 2과 7에서도 마찬가지이다. - 하지만 희현이는 이러한 상황에 대비하여 비밀번호에 대한 한 가지 단서를 만들어 놓았는데 이는 다음과 같다.- 비밀번호..

BOJ 풀이 2025.02.04