-
4. 컴퓨터 AI만들기C,C++로 만드는 간단한 프로젝트/에어 하키 - Cocos2D 활용 2021. 4. 8. 20:33
아래의 내용에 이어서 진행을 해보자.
designatedroom87.tistory.com/435?category=938310
FSM에 대해 간단히 설명하면, 컴퓨터 진영에 공이 넘어오면 공을 쫓아가는 추적 상태와
추적 상태에서 공을 친 이후에 원래 위치로 되돌아 오는 복귀 상태와
공이 플레이어 영역에 있으면 배회 상태를 만들 것이다.
기본적으로 FSM 설계에 필요한 변수들의 선언과 초기화를 보도록 하자.
아래는 Init 함수의 일부분이다.
컴퓨터의 AI 설정하는 함수를 SetComVector 라고 한다.
이 함수에서는 AI의 각 상태에 따라서 컴퓨터의 이동 방향 벡터를 구하면 된다.
이 함수는 내용이 길기 때문에, 이 세 상태를 나눠서 보도록 하자.
아래의 if 조건에서 m_bComTouched 변수가 true인 경우는 공과 컴퓨터의 라켓이 충돌이
발생했다는 정보를 담고 있다.
그렇기 때문에 이미 컴퓨터가 공을 친 경우에 다시 또 공을 쫒아가서 공을 칠 필요는 없다.
그러므로 공을 추적하는 상태는 공이 컴퓨터의 진영에 넘어오고 아직 컴퓨터가 공과 충돌이 되지 않았을 때,
컴퓨터의 이동 방향을 공 쪽으로 이동하도록 설정하면 된다.
그리고 컴퓨터의 진영은 위쪽이고 플레이어의 진영은 아래쪽이다.
즉, 공의 이동 방향 벡터의 y성분이 음수라는 의미는 공이 밑으로 이동하고 있다는 의미이므로
이는 플레이어 영역 쪽으로 이동하고 있다는 의미가 된다.
컴퓨터의 이동 속도보다 공의 이동 속도가 더 빠른 상태로 플레이어 진영 쪽으로 이동하고 있다면
굳이 컴퓨터가 공을 쫓아갈 필요는 없다.
말 그대로 배회한다는 말은 정찰 중인 상태로 봐도 될 것 같다.
크게 설명하면, 컴퓨터를 골문 위치로 이동시키고,
골문 위치에 도착하면 골문의 반대 방향으로 이동시키는 내용이다.
이 상태에서도 두 경우로 나눠서 컴퓨터의 이동 방향 벡터를 설정하면 된다.
컴퓨터의 위치가 골문에 있는 경우에는 골문의 위치와 RangeX와 RangeY 변수를 이용하면
골문을 중심으로 직사각형이 그려지는데
이 직사각형의 네 점의 위치와 컴퓨터의 위치와의 비교를 해서 반사 벡터의 개념을 적용하면
컴퓨터의 이동 방향 벡터를 쉽게 처리 할 수 있다.
복귀 상태라는 것은 추적 상태 이후의 상태이다.
이 상태에서도 컴퓨터의 이동 방향 벡터를 조건에 맞게 설정하면 된다.
즉, 공을 쫒아간 이후에 자신의 초기 위치로 이동하면 된다.
초기 위치에 도착하면, 잠시 컴퓨터의 이동을 멈추고 적정 시간 이후가 되면
다시 공을 쫒는 상태가 될 수 있도록 변수 설정을 한다.
SetComVector 함수는 아래의 Update 함수에서 처리를 한다.
프로그램 실행영상
소스 파일
'C,C++로 만드는 간단한 프로젝트 > 에어 하키 - Cocos2D 활용' 카테고리의 다른 글
3. 접촉면에 따른 파워 조절( SetPuckVector함수) (0) 2021.04.08 2. 공과 라켓의 충돌 처리 (0) 2021.04.08 1. 플레이어 라켓과 컴퓨터 라켓 만들기 (0) 2021.04.08