728x90
반응형
SMALL

전체 글 46

[C++] Priority Queue - 우선순위 큐

오늘 공부해 볼 자료구조는 우선순위 큐이다. 우선순위 큐는 어디서 사용되는가? - 시뮬레이션 시스템 - 네트워크 트래픽 제어 - 운영체제에서의 작업 스케쥴링 - 수치 해석적 계산 우선 큐(Queue)라는 자료구조는 FIFO(First In First Out) 구조로 먼저 들어온 데이터가 먼저 나오는 구조이다. 이와 달리 우선순위 큐는 들어간 순서와 상관없이 우선순위가 높은 데이터가 먼저 나오는 것을 말한다. 보통 우선순위 큐는 힙(Heap)으로 구현된다. 힙(Heap) - 완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조 - 여러 개의 값들 중에 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조 - 힙은 중복 값을 허용함.' 힙의 종류 - 최대 힙 : 부모 노드의 키 값이 자식 노드보..

Modern C++ 2021.08.19

[C++] Iterator

오늘 알아볼 것은 Iterator(반복자)다. 반복자란? - 컨테이너의 요소를 가리키는 포인터라고 할 수 있다. 간단한 예로 list를 한번 보자. 나는 int형 리스트 l을 선언하고, l에 1,2,3을 차례대로 삽입했다. 그리고, iter에 l의 맨 처음 요소를 삽입해주었고, 이 iter은 결국 1이라는 값을 출력할 것이다. 이런 식으로 반복자를 간단하게 생각하면 그냥 컨테이너의 요소를 가리키는 포인터라고 생각할 수 있다. 여기서 iter에 1을 더하면 그 다음 인자인 2로 넘어간다. 반복자 설명 생성되는 방식 읽기 접근 쓰기 증감 비교 입력 반복자 (Input Iterator) 읽기만 가능, 순방향 이동 istream_iterator =*p -> ++ == != 출력 반복자 (Output Iterat..

Modern C++ 2021.08.16

[C++] 상속

오늘 알아볼 것은 상속 개념이다. 사실 C++기초를 공부했던게 워낙 옛날이라서 프로젝트를 진행하면서 상속에 대한 개념이 조금 부족했다. 그래서 다시한번 상기시켜보자는 의미로 정리를 한번 해보려고 한다. 상속이란? - 한 클래스가 다른 클래스에서 정의된 속성(변수, 함수)를 이어받아 사용 - 이미 정의된 클래스를 바탕으로 필요한 기능을 추가하여 정의 라고 단순하게 말할 수 있다. 상속의 장점? - 중복된 코드를 부모에서 구현하여 중복을 제거할 수 있다. - 상속을 통해 자식 클래스에서 부모가 가지고 있지 않은 기능을 구현할 수 있다. - 다형성을 활용한 객체 지향적 디자인 다형성이란? - 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미함. 이 다형성이라는게 사실 처음에 C++을 공부하면서 도대체 ..

Modern C++ 2021.08.15

[Algorithm] A Star

오늘 포스팅 주제는 A Star 알고리즘이다. // 11.21 추가 내용 정보과학 분야에 있어서, A* 알고리즘(A* algorithm 에이 스타 알고리즘[*])은 주어진 출발 꼭짓점에서부터 목표 꼭짓점까지 가는 최단 경로를 찾아내는(다시 말해 주어진 목표 꼭짓점까지 가는 최단 경로임을 판단할 수 있는 테스트를 통과하는) 그래프 탐색 알고리즘 중 하나이다. 이 알고리즘은 다익스트라 알고리즘과 유사하나 차이점은 각 꼭짓점에 대해 그 꼭짓점을 통과하는 최상의 경로를 추정하는 순위값인 "휴리스틱 추정값 "을 매기는 방법을 이용한다는 것이다. 이 알고리즘은 이 휴리스틱 추정값의 순서로 꼭짓점을 방문한다. 그러므로 A* 알고리즘을 너비 우선 탐색의 한 예로 분류할 수 있다. 이 알고리즘은 1968년 피터 하트, ..

Algorithm 2021.08.15

[WinAPI] 2D 게임 현황 <완성>

2021.07.25 ~ 2021.08.14 드디어 끝났다. 사실 크게 달라진 것은 없다. 충돌처리, 엔딩씬, 포털, UI와 같은 짜잘한 것들을 모두 구현하고 이제 끝이 났다. 3일간 휴일이니 정리를 열심히해서 마무리 짓고, 이제 언리얼 프로젝트를 해볼 생각이다. 완성! 유튜브에 올린 포트폴리오 동영상이다. 편집프로그램 너무 비싸요.. 나는 체험판을 사용했다. 나름 재미있었다. 진짜.. STL이랑 Modern C++을 안쓰다가 써보니 까먹었던 것도 생각나게 되었고, 이 프로젝트를 통해 좀 더 자신감을 얻을 수 있었다. 앞으로 정리해야 할 사항에 대해 다시 한번 상기해보자. 1. A Star Algorithm의 원리 및 구현 2. 상속과 Overriding 3. Iterator 3가지는 3일동안 무조건 포스..

WinAPI 2021.08.14

[WinAPI] 2D 게임 현황 <3주차>

이제 조금만 더 하면 될거같다.. 끝이 보인다. 이번 주 개발 진행 상황은 이렇다. 우선, 지난주에 unique_ptr에 대해 leak이 발생하는 부분에서 왜 발생하는지 확인하였고, 결과적으로 상속 객체가 유일성을 지키지 못하기 때문이라는 것을 알게 되었다. 그러므로, 이를 해결하기 위해서는 소멸자에 virtual을 붙여주거나, unique_ptr이 아닌 shared_ptr을 사용하면 된다. 하지만, virtual을 사용하는 것이 좀 더 나을 것이라 생각하여 나는 virtual을 사용하여 해결하였다. 그래서 이제 memory leak문제는 완벽하게 해결하였다. 그럼 이제 다음번에는 virtual 에 대해 다시 공부해봐야겠다. 뭐 가상소멸자쓴거긴 한데,, 정확히 모르겠슴.. ㅠ 그리고, A Star 알고리..

WinAPI 2021.08.08

[WinAPI] 2D 게임 현황 <2주차>

안타깝게도 이번주에 여러 일이 있어서 진행을 많이 하지는 못했다. 하지만, 핵심적인 알고리즘인 A*알고리즘을 공부할 수 있었다. 하지만, A*의 경로 탐색을 실시간으로 하기에는 약간 무리가 있을 것 같다. 그래서 나는 현재 프로젝트를 디펜스게임으로 바꾸어 보려고 한다. 목적지인 집이 있고, 슬라임은 집을 공격해서 부술 수 있다. 부서지면 게임은 끝나게 되고, 플레이어는 나오는 슬라임을 제거하여 집을 지키면 되는 간단한 게임을 만들어보려고 한다. 우선 이번주 진행 사항에 대하여 살펴보자. 1. A* 알고리즘 A*의 경우 좀 보완하고 싶은 부분이 있어 자잘한 부분들을 모두 구현하고 나면 다시 보완할 생각이고, 따로 포스팅 할 생각이다. 현재 몬스터는 플레이어의 위치까지 최단경로로 이동한다. 이 때 맵을 바꿔..

WinAPI 2021.08.01

[WinAPI] 2D 게임 현황 <1주차>

주말동안 할 것도 없고.. 프로젝트 진행을 해야겠다 싶어서 하나씩 천천히 만들어보았다. 우선, 타이틀 화면이다. 게임스타트와 맵을 관리할 수 있는 맵툴을 만들었다. 맵툴을 만든 이유는 핵심적인 요소가 A* 알고리즘이고, 이를 보여주기 위해서는 맵툴이 반드시 필요할 것이라 생각하였다. 그리하여 만든 맵툴 아주 간단하다. 맵을 다음과 같이 만들고, 초록색은 플레이어, 빨간색은 보스이다. 길을 클릭하면 파란색으로 만들어 플레이어와 보스가 통과할 수 없도록 구현하였다. 참고로 아직 A* 알고리즘은 미구현하여 플레이어만 움직일 수 있는 상태이다. 대충 클릭해서 맵을 만들고 Save Map버튼을 누르면, 맵이 다음 파일처럼 저장된다. 1은 장애물, 0은 움직일 수 있는 길, 2,3은 플레이어와 보스 객체이다. 이후..

WinAPI 2021.07.25

[WinAPI] 개발계획 - 2D Game

간단한 2D게임을 포트폴리오용으로 한번 개발해 볼 계획이다. 이번에 제작할 게임에 들어가게 될 요소의 핵심은 A* 알고리즘 일 것 같다. 이 프로젝트의 경험을 토대로 A* Algorithm에 대한 내용을 작성할 예정이다. 대충 생각 중인 게임의 구조는 이렇다. 1. 슬라임이 보스고 플레이어는 슬라임과 싸운다. 2. 슬라임은 몇 가지 패턴을 가지고 있고, 플레이어는 무기를 사용하여 슬라임을 제압해야 한다. 3. 맵은 2D 맵 툴을 사용할 것이며, 맵 툴 또한 직접 구현할 예정이다. 4. 슬라임은 장애물을 피해 플레이어를 향해 이동한다. (A* 알고리즘) 그리고, 플레이어와 가까워 졌을 때 공격한다. 간단하게 이 정도로 한번 구현해 볼 예정이다. 시간이 얼마나 걸릴지는 잘 모르겠으나, 2D FrameWork..

WinAPI 2021.07.24

[C++] Container - Map

List에 이어 이번에 알아볼 Container는 Map이다. Map의 자료구조는 Red Black Tree이다. 이는 자가 균형 이진트리로써, 삽입과 삭제가 일어나는 경우 자동으로 그 높이를 작게 유지해주는 이진트리이다. 꽤나 어려운 내용이므로, 코드를 직접 구현하기 보다는 STL Library를 살펴보는 것이 나을 것 같다. 먼저 map의 기본 형태는 다음과 같다. map : Key-Value Type > Key와 Value가 쌍으로 저장되는 형태를 띄며, Key값을 이용하여 Value값을 찾을 수 있다. 이런 형태를 사실 파이썬에서는 Dictionary라는 자료형으로 사용하고 있다. Map은 다음과 같이 사용한다. key의 자료형을 string, value의 자료형을 int로 놓고 사용한 예이다. ..

Modern C++ 2021.07.20
728x90
반응형
LIST