레플리
글 수 57

FSM, 몬스터 인공지능의 구현

조회 수 2707 추천 수 0 2016.03.19 03:45:15


K-1.jpg

 

소스코드 및 실행 : 첨부파일

 

 

 

FSM(Finite State Machine) - 게임 인공지능의 전통적인 방법

 

게임에서 적들의 움직임을 인공지능적으로 구현하기 위해 기존의 게임들에서 자주 사용되던 방법중 하나가 바로 FSM, 즉유한상태기계이다. FSM은 오래전부터 다양한 방법으로 널리 쓰여온 컴퓨터공학 / 수학적 개념인데, 용어 뜻 그대로 유한한 개수의 상태들로 구성된 하나의 간단한 기계를 말한다. 여기서 하나의 상태(State)라는 것은 그냥 하나의 조건을 뜻한다고 생각하면 된다.

 

FSM은 크게 현재상태, 입력, 출력상태, 전이함수의 4가지 요소로 나눌 수 있다. 현재상태는 말그대로 현재 FSM의 상태를 말하고, 입력은 FSM에 들어온 입력정보, 출력상태는 다음 단계의 상태, 전이함수는 입력정보와 현재상태를 기반으로 출력상태를 결정하는 함수라 할 수 있다.

 

요약하자면, FSM이라는 것은 유한한 개수의 상태들을 가진 하나의 기계이고, 그 상태들 중 하나가 현재 상태인 것이다. FSM은 입력을 받고 어떠한 상태전이함수에 기반해서 현재상태로부터 출력상태로의 상태전이를 일으킨다. 그리고 출력상태는 새로운 현재 상태가 된다. 컴퓨터 역시 크게 보면 FSM의 한 예라 할 수 있다.

 

 

 

FSM을 사용한 몬스터의 행동 인공지능

 

이런한 FSM은 게임내에서 인공지능을 구현하기 위해 다양하게 사용될 수 있는데, 그 중 대표적인 사용예가 적 몬스터의 행동을 결정하는 인공지능의 구현이라 할 수 있다. FSM의 각각의 상태를 몬스터의 감정이라서 하면, 이는 현재 상태와 FSM으로의 입력에 따라 변하며, 어떤 식으로 변할 것인지는 상태전이 규칙들에 의해 결정된다. 몬스터의 감정에 기반해서 서로 다른 행동을 수행하는 코드를 만들면 몬스터가 마치 감정을 가진 실제 괴물처럼 움직이게 될 것이다.

 

복잡한 캐릭터라면 훨씬 더 많은 상태들과 입력들, 그리고 상태전이 규칙들을 가질 것이다. 어떤 상태들과 입력들을 구분할 것이며 그것들이 어떤 방식으로 전이될 것인지를 결정하는 것이 바로 FSM에 기반한 인공지능을 만드는 기본적인 과정이다.

 

 

 

실제 FSM의 게임 인공지능 구현, FSM Monster Hunter

 

위의 방법을 사용해서 간단한 게임을 만들어 보았다. Java Applet을 기반으로 작성하였고, 게임의 목적은 플레이어를 조정해서 몬스터를 물리치는 것이다. 이때 몬스터의 움직임을 몬스터의 현재상태에 따라 결정된다. 몬스터의 상태와 그에따른 행동은 다음과 같다

 

     REST(안정)   - 랜덤하게 움직이며 공격을 하지 않는다
     ANGRY(화남) - 이동속도가 두배로 빨라진다. 나머진 REST와 동일
     RAGE(분노)   - 플레이어가 주변에 있으면 공격수행. 없다면 플레이어를 향해 이동. 이동속도는 두배
 

현재상황, 즉 FSM의 입력은 다음과 같다

 

     플레이어 접근     - 플레이어가 몬스터 근처에 있음
     플레이어 멀어짐   - 플레이어가 몬스터에게서 떨어져 있음
     플레이어 공격      - 플레이어가 몬스터에게 공격
 

이를 이용해 상태전이과정을 도표로 그리면 다음과 같다

 

fsmgraph.jpg

 

 

 

[참고자료]

    - Game Programming Gems 1권, p.319 ~ p.332

 

 

 

< 인공지능 개발자 모임 >

- 페이스북 그룹에 가입하시면 인공지능에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/AIDevKr/

 

List of Articles
제목 글쓴이 날짜 조회 수
에이카 온라인의 가상캐릭터 - 프란 file 깊은바다 2016-03-19 279
2008년 게임 인공지능 연구동향 file 깊은바다 2016-03-19 187
게임 인공지능 기술 file 깊은바다 2016-03-19 366
Age of empire 인공지능 개발자의 개발 후기 깊은바다 2016-03-19 369
네트워크 게임에서의 인공지능의 필요성 깊은바다 2016-03-19 605
게임에서의 인공지능 추세 깊은바다 2016-03-19 266
2000년 게임 AI의 현주소 깊은바다 2016-03-19 283
인공지능 원리로 구현하는 장기 게임 file 깊은바다 2016-03-19 1895
게임트리를 사용한 제로섬 게임의 인공지능 file 깊은바다 2016-03-19 4320
NPC 인공지능 처리 기본 구성 - 스택 기반 FSM 깊은바다 2016-03-19 1274
더 나아진 몬스터 인공지능에 대해서 깊은바다 2016-03-19 318
FSM, 몬스터 인공지능의 구현 file 깊은바다 2016-03-19 2707