2024/03 27
-
10.5 C++11 / C++14 C++11과 C++14에서는 여러 가지 새로운 기능이 도입되었다. 이 절에서는 다른 장들에서 설명하기에 적합하지 않은 C++11과 C++14의 새로운 기능을 설명한다. 10.5.1 유니폼 초기화 C++11이전에는 데이터 타입에 대한 초기화 방식에 일관성이 없었다. 예를 들어 다음의 Circle 데이터에 대한 정의를 보자. 하나는 구조체를 이용하고 다른 하나는 클래스를 이용하고 있다. struct CircleStruct { int x, y; double radius; }; class CircleClass { public: CircleClass(int x, int y, double radius) : mX(x), mY(y), mRadius(radius) {} private: ..
-
주변 적을 확인, 그리고 주변 적들 중 가장 가까운 적을 타겟팅하는 시스템을 만들어보자. TargetEvent 정의 타겟을 했을 때의 이벤트를 정의한다. 먼저, Teb을 눌렀을 때, 함수가 실행되도록 정의할 것 이다. 항상 타겟팅은 전투모드 일 때만 가능하며, 사용시, 이전까지 붙어있던 모든 Visival에 대한 배열목록을 전부 탐색해서 커서가 켜져있는 객체를 꺼주고, 새로운 객체에 lookOn을 할 것 이다. 여기서, 모든 객체 순환이 아니라, 코드 구조 상 한번에 한개의 객체가 커서가 존재함으로, 객체를 탐색하기 전에, 먼저 전 객체를 꺼주는 식으로 하면 더 빠른 코드가 될 것 이다. LookOn함수 Lookon을 하는 함수이다. Self를 기준으로, 1000크기의 구체를 만든 뒤, 해당 구체에 닿은..
-
문제 설명 A와 B가 n개의 주사위를 가지고 승부를 합니다. 주사위의 6개 면에 각각 하나의 수가 쓰여 있으며, 주사위를 던졌을 때 각 면이 나올 확률은 동일합니다. 각 주사위는 1 ~ n의 번호를 가지고 있으며, 주사위에 쓰인 수의 구성은 모두 다릅니다. A가 먼저 n / 2개의 주사위를 가져가면 B가 남은 n / 2개의 주사위를 가져갑니다. 각각 가져간 주사위를 모두 굴린 뒤, 나온 수들을 모두 합해 점수를 계산합니다. 점수가 더 큰 쪽이 승리하며, 점수가 같다면 무승부입니다. A는 자신이 승리할 확률이 가장 높아지도록 주사위를 가져가려 합니다. 다음은 n = 4인 예시입니다. 주사위 구성 #1 [1, 2, 3, 4, 5, 6] #2 [3, 3, 3, 3, 4, 4] #3 [1, 3, 3, 4, 4,..
-
10.4 스코프 지정 C++프로그래머라면 스코프(Scope)라는 개념에 익숙해져야 한다. 프로그램 내의 변수, 함수, 클래스 등의 모든 이름은 특정한 유효 범위, 즉 스코프를 가진다. 그리고 네임스페이스, 함수 정의, 클래스 정의, 중괄호 쌍을 이용한 블록 정의를 통해 스코프를 만들 수도 있다. 어떤 변수나 함수 클래스에 접근하려 할 때는 가장 가까운 스코프에서부터 가장 먼 전역 스코프까지 차례로 찾게 된다. 네임 스페이스, 함수, 클래스, 중괄호 쌍 블록 모두 이름이 존재하지 않으면 전역 스코프에 있는 것으로 간주한다. 만약 전역 스코프에서도 찾지 못하면 컴파일러가 정의되지 않은 심벌이라는 에러 메시지를 출력한다. 어떤 경우에는 같은 이름의 다른 스코프 때문에 스코프가 가려지기도 한다. 또 어떤 경우에..
-
에니메이션의 노티파이와 몽타주를 사용해서 일정 키가 입력되었을 때, 구르기 또는 백스텝이 작동하도록 한다. BP_Player 점핑 입력에서, 현재 상태값을 받아오고, 전투상태일 경우, BackStep에, 아닐경우 점프가 동작하도록 정의한다. 현재 함수는 롤링도 같이 적혀있지만, 구르기는 좌측 Alt를 눌렀을 때 동작하도록 정의하였다. Enum재정의 State의 ENum에 Dash를 추가한다. 항상 모든 상태값은 Idle일 때만 동작하게 됨으로, Dash를 추가하여 Dash중 Dash가 2번이상 동작하지 않도록 막아준다. 이때, 두번이상의 Dash를 추가하고 싶다면, 변수를 추가해서 Dash를 제어해주자. BP_Player BP_Player에서 정의된 커스텀 이벤트 이다. 현재 State를 판별하고, Id..
-
문제 설명 당신은 1~n 사이의 수가 적힌 카드가 하나씩 있는 카드 뭉치와 동전 coin개를 이용한 게임을 하려고 합니다. 카드 뭉치에서 카드를 뽑는 순서가 정해져 있으며, 게임은 다음과 같이 진행합니다. 처음에 카드 뭉치에서 카드 n/3장을 뽑아 모두 가집니다. (n은 6의 배수입니다.) 당신은 카드와 교환 가능한 동전 coin개를 가지고 있습니다. 게임은 1라운드부터 시작되며, 각 라운드가 시작할 때 카드를 두 장 뽑습니다. 카드 뭉치에 남은 카드가 없다면 게임을 종료합니다. 뽑은 카드는 카드 한 장당 동전 하나를 소모해 가지거나, 동전을 소모하지 않고 버릴 수 있습니다. 카드에 적힌 수의 합이 n+1이 되도록 카드 두 장을 내고 다음 라운드로 진행할 수 있습니다. 만약 카드 두 장을 낼 수 없다면 ..