
랜덤 맵을 구현해야 하는 상황이 생겨서 얼마전 부터 간단한 절차적 생성 알고리즘들을 공부해 보고 있다. 처음에는 일정 크기의 방들을 맵툴로 찍어낸 후 생성된 방들을 알고리즘을 통해 섞어낼려고 했었다. 그러다가 이왕 만들어보는 절차적 생성이니 만큼 별도의 맵툴없이 구현해 보고 싶어졌다. 처음에는 셀룰러 오토마타 방식으로 구현을 해보았는데 마음에 드는 모양을 만드는게 너무 어려웠다. 셀룰러 오토마타 알고리즘은 매우 간단한데 각 타일마다 주변 타일을 검사해서 자신의 상태를 결정하는 알고리즘이다. 많은 부분이 난수에 의존하기 때문에 어느정도 원하는 모양의 동굴을 만들어 내기가 힘들다. 그래서 다른 방식을 써서구현을 하게 되었는데 순서는 다음과 같다. 1. 랜덤한 크기의 방들을 일정기준안에서 난수로 생성한다. 2..

1)Lambda?? lambda는 람다 표현식, 익명함수라고도 불린다. 람다는 함수객체를 암시적으로 정의하고 함수객체를 생성합니다. 프로그래밍을 하다보면 함수포인터나 함수 객체가 필요한 시점이 있다. 함수객체의 가장 큰 단점은 정의 할때 구조체나 클래스를 사용해야 한다는 점이다. 그로 인해 코드도 길어지고 보기도 좋지 않다. 람다는 함수포인터와 함수 객체의 장점만을 골라서 가져왔다고 볼 수 있다. 2)Lambda의 구조 lambda표현식은 캡쳐(capture),인자(parameter),반환형(returnType),몸통(body)로 이루어져 있습니다. a) 캡쳐 [] : 캡쳐 블록이라고 불리며 생략할 수 없습니다. 외부 변수를 사용하지 않겠다는 뜻입니다. [=] : 는 값을 복사하여 사용하겠다는 뜻이다. ..

해쉬 테이블은 map,multimap과 마찬가지로 key를 통해 data를 저장하는 자료구조로서 data의 탐색속도가 매우 빠르다. 해쉬 테이블은 기본적으로 배열로 동작한다. 자료를 저장할 때 key값을 배열의 인덱스로 바꾸는 해싱 함수를 통해 적절한 배열의 인덱스에 저장 한다. 이 배열을 버켓이라고 한다. (리스트로 따진다면 Node) ex ) idnex = hash_function(key) % arrSize; 이런 식으로 자료를 탐색 및 추가 삭제 하기 때문에 매우 빠른 속도를 자랑하는데 여기에는 항상 문제가 따른다. hadh_function(key) % arrSize를 통해 나온 인덱스가 중복될 수 있다는 점이다. 예를 들어 int를 키값으로 하는 해쉬테이블을 구현했는데 hash_function의 ..

매서드 및 작업을 객체로 캡슐화한 것을 커맨드 패턴 및 명령패턴이라고들 한다. 커맨드 패턴을 활용하면 작업로그를 저장하거나 작업취소등의 기능을 쉽게 구현할 수 있다. 커맨드 클래스에 실행 함수와 명령을 취소할 수 있는 순수가상함수 Undo를 정의한다. 다음으로 간단하게 위치 이동에 대한 커맨드를 구현해 보았다. Undo에서는 Excute에서 실행되기 전의 상태를 저장한다. 다음으로는 커맨드를 관리하는 클래스가 필요한데 예제에서는 간단하게 벡터로 구현해 보았다. (개인적으로는 deque으로 구현하면 좋을것같다.)

DirectX11의 Texture2D버퍼로부터 Direct2D의 RenderTarget을 생성해서 기존에 사용하던 Direct2D 프레임워크를 사용하면서 라이팅처리만 따로 사용하고 싶었다. 지금은 위와 같이 SwapChain으로부터 IDXGISurface를 받아서 ID2D1RenderTarget을 생성해서 사용했지만 D2D로 다양한 후처리를 하고 싶다면 Texture2D버퍼로 부터 RenderTarget을 생성하는 방법도 있다. 새로 DirectX11기반의 2D엔진을 만들시간이 없어서 이런 식으로 만들어서 사용하고 있는데 솔직히 기존 Direct2D프레임워크를 사용할 수 있다는 편한점보다는 불편한 점이 더 많다. 오브젝트 별로 다르게 Material을 줄 수 없다는 점이나, 하드웨어 인스턴싱이라던가 . ..
final class Test final{}; 과 같이 final키워드를 붙이게 되면 해당 클래스를 더 이상 상속받을 수 없게 된다. 또한 class Test : public Parent { void TestFunc() final override; }; 다음과 같이 가상함수에 final키워드를 붙이게 되면 Test를 상속받은 자식 클래스들은 더 이상 TestFunc을 오버라이딩 할 수 없다. explicit class Test { public: Test(){} Test(const int& i){} } int main() { Test t; t = 3; } 위의 코드 내용을 보면 클래스 변수에 상수를 대입하고 있는데 이 코드는 에러를 일으키지 않지만 상당한 문제를 동반한다. 위의 상황에서 컴파일러..