전체 글 71

파일입출력

파일에도 역시나 핸들이 있고 핸들은 파일에 접근 권한을 가져오는 것이다. FILE* Ptr; 이렇게 파일의 핸들을 얻을 수 있다. 파일은 여는 함수로는 fopen_s(&Ptr, FileName,"wb"); 이런 함수가 있고 핸들을 넣어주고 파일이름을 맞게 넣어줬다면 3번째 인자에 따라서 달라지게 되는데 첫번째 글자의 w는 쓴다의 의미이고 r이면 읽는다는 의미이다. 다음글자로 t는 텍스트를 뜻한다. b가 오면 바이너리로 그냥 비트 그대로 저장하겠다는 의미이다. fclose(Ptr); 다 사용했다면 역시나 내가 만든것이 아니기 때문에 반환해줘야한다. fwrite(); fwrite함수는 char배열을 넣어주고 그게 char몇개짜리 배열인지 알려주는 함수이다. int x; int y; fwrite(&x , si..

WinAPI 2021.02.12

FSM (Finite State Machine)

FSM이란 유한상태기계로 어떤 오브젝트(온라인게임을 예로 들면 플레이어,NPC,몬스터 등)가 상태를 가지고 그 상태에 대한 동작을 1가지만을 실행하게 하는 코드를 말한다. 예를 들면 플레이에 공격,이동,방어라는 상태가 있다고 가정하면 공격과 이동을 같이하는 경우에는 공격상태와 이동상태를 조합하기보다는 공격 이동이라는 새로운 상태를 새로 만드는것이 좋다. 각각의 상태에 따른 기능들이 조합해서 사용하다 보면 사이드 이펙트가 발생하고 FSM이란 이런 사이드이펙트를 막는 방법중 하나이다. 즉, 각각의 상태를 완전히 다른 곳으로 보고 각각 따로 가지고 있는 것이다.

WinAPI 2021.02.02

GetAsyncKeyState() 함수

GetAsyncKeyState() 함수는 키가 눌러졌을 때나 떨어졌을 때 호출되는 함수로 호출된 시점에서 키 상태를 조사하여 메세지 큐를 거치지 않고 바로 리턴 해주는 함수다. SHORT GetAsyncKeyState(int vKey); 함수의 원형은 위와 같으며 인자에 들어가는 vKey는 Virtual-Key Codes이다. 넣은 키의 대소문자를 가리지 않는다. Virtual-Key Codes 목록 docs.microsoft.com/ko-kr/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN Virtual-Key Codes (Winuser.h) - Win32 apps The following table shows the symbolic cons..

WinAPI 2021.01.30

키 입력, template 가변인자

키 입력의 상태는 4가지의 경우로 볼 수 있다. 처음 눌렸다. 누르고 있다. 지금 땟다. 안누르고 있다. 특정 키를 만들어 낼 수 있고 멀티키 입력으로도 만들어 낼 수 있다. #include void CreateKey(const std::string& _KeyName, int _Key) 위와 같이 키를 만들어 내는 함수를 만들수 있는데 위의 함수는 하나의 키 입력으로 밖에 만들 수 없다. CreateKey("LeftMove" , 'a') 이런식으로는 가능하지만 CreateKey("Attact" , 'q' , 'e') 이렇게 q와e가 눌리면 공격하는키는 만들어 낼 수가 없다.그렇다고 인자를 하나 늘린다면 2개의 키조합까지만 가능한 함수가 된다.그래서 가변인자를 사용할 수 있다. 가변인자를 사용할 경우 인자..

WinAPI 2021.01.30

Delta Time (델타 타임) , QueryPerformanceFrequency 함수

컴퓨터 A B 초당 함수 실행 횟수 5번 1번 위의 A 컴퓨터와 B 컴퓨터가 있을때 이동함수 1회에 100을 이동한다고 가정하면 A컴퓨터에서는 1초에 500을 이동하고 B컴퓨터에서는 1초에 100을 이동한다. 같은 게임에서 이렇게 되면 공평하지도 않고 말도 되지 않는다. 해결방법으로는 A컴퓨터에서 500을 5로 나누거나 500에 0.2를 곱해주면 된다. 그치만 5를 구해서 나누는 방법은 컴퓨터의 성능,실행 환경에 따라 달라지기 때문에 사실상 불가능에 가깝다. 0.2의 숫자를 구하는 방법은 있다. 컴퓨터는 언제나 숫자를 세고 있는데 이는 성능과 전혀 상관없이 CPU에 달려있는 다른 장치에서 해주는 것이기 때문에 언제나 정확하다.컴퓨터가 켜지거나 혹은 어떤 프로그램이 실행되면 숫자를 계속 세고있다. 즉, 1..

WinAPI 2021.01.29

포인터형 싱글톤

class Test { private: static Test* pInst; public: static Test* Inst() { if(nullptr == pInst) { pInst = new Test(); } return pInst; } private: Test() { } public: ~Test() { } }; Test* Test::pInst = nullptr; 이렇게 사용하는 방식으로 싱글톤은 하나의 객체만 생성하기 위한 문법으로 pInst가 nullptr일때 하나를 생성하고 리턴해주며 그 이후로는 처음에 만들어진 객체를 계속 리턴하는 방식이다. new를 이용해서 생성했기 때문에 당연히 delete도 해줘야 하며 이를 함수로 만들어서 객체가 필요없어질 경우 호출해주면 된다. 클래스가 프로그램 실행중 ..

WinAPI 2021.01.26

파일 경로 관리(문자열 파싱)

코드에서 사용하는 경로는 문자열이라고 볼 수 있다. 코드상 경로에는 폴더와 파일 2가지로 나눠볼 수 있다. find_last_of 함수 std::string 클래스에는 제공하는 여러가지 문자열 함수들이 있다. find_last_of()는 인자값에 넣어주는 문자를 문자열의 가장 뒤에서부터 찾아서 리턴해준다.첫번째 인자에 찾고 싶은 문자를 넣고 두번째 인자에는 디폴트 인자로 -1값이 들어가 있는데 가장 뒤에서 부터 찾는것이고 예를들어 여기에 6을 직접 넣으면은 문자열의 6번째부터 뒤에서부터 입력한 문자를 찾아나간다. D:\\AAAA\\BBBB\\CCCC\\DDDD.bmp 이런 파일경로가 있을경우 마지막 \\나오는곳을 찾아서 그 위치부터 문자열의 전체 사이즈의 -1 까지 문자열을 구하면 파일명을 가져올 수 있..

WinAPI 2021.01.23

TransparentBlt 함수 , #pragma comment

BitBlt 함수는 크기 조절이 안되고 그냥 한쪽의 이미지를 다른 한쪽으로 크기만큼 복사해주는 함수이다.BitBlt 함수도 원하는 위치에 일부만 출력은 가능하지만 크기를 조절은 안된다. 크기를 조절할때 TransparentBlt 함수를 사용하면 되는데 이 함수는 원하는 특정색을 제거하고 출력하는 기능도 포함되있다. 이 함수는 Window.h에 들어있기 때문에 사용은 가능하지만 구현은 msimg32.lib 여기에 들어있다. 그렇기 때문에 #pragma comment 을 통해 파일을 참조하게 해줘야 한다. 이는 헤더가 아니고 코드 그 자체를 추가하는 문장이다. 경로 설정 없이 가능한 이유는 윈도우에서 제공해주고 있는것이고 프로젝트 속성으로 들어가서 VC++ 디렉터리의 라이브러리 디렉터리에 설정되어있다. #i..

WinAPI 2021.01.22