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

- 우종하(deepseas(AT)sogang.ac.kr)

 


    - 마우스로 화면을 클릭한 후 키보드로 플레이어 조정

    - 소스코드 [Down]

    - 자바 Runtime [Down] : 애플릿이 실행이 안될 경우 설치, 설치후 익스플로어 재실행

 

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의 입력은 다음과 같다

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

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

                      

 

[참고자료]

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

 

[1]