포터블기기 강좌


iOS용 게임개발) 2. FSM

2013.01.15 01:42

가영성채아빠 조회:5784

어떻게 어떻게 2번째 글을 쓰게 되었습니다.

이번에 다뤄볼 주제는 FSM(Finite State Machine)입니다.

오토마타라고도 하죠. 우리는 '유한 상태 기계' 라고 번역하고 매우 어려운 느낌이 들지만 너무나 간단한 것입니다.

 

FSM은 무엇인가의 유한한 상태와 그 변화를 정의하고 처리하는 방식으로 컴퓨터가 탄생하기 전부터

일상이나 수학에서 써오던 방식입니다.

꼭 게임이 아니더라도 본인도 모르게 다들 쓰고 있는 것이죠.

 

복잡하게 설명하면 머리아프니 간단한 예를 들어보면서 설명하겠습니다.

우리가 테트리스 게임을 하게 되면 상태는 어떤게 있을까요?

 

A. 로고표시

B. 타이틀표시 및 시작대기

C. 게임진행

D. 랭킹등록

 

간단하게 나열하면 이정도가 되겠습니다.

이제 C의 게임 진행상태를 자세히 보면 다음처럼 될 수 있겠습니다.

 

C-1. 스테이지 타이틀 표시(예. STAGE 1)

C-2. 게임

C-3. 클리어

C-4. 게임오버

 

큰범주의 A,B,C,D의 상태와 작은 점수의 C-1, C-2, C-3, C-4의 상태가 존재합니다.

이 사이의 관계를 도식화 해보면 다음과 같습니다.

 

우선 큰 상태들의 관계를 도식화 해본 것입니다.

flow1.jpg

 

A. 로고표시

B. 타이틀표시 및 시작대기

C. 게임진행

D. 랭킹등록

 

이런 상태들이 있는 것이고요.

관계를 생각해보면

 

A => B : 로고를 보여주고 일정시간 대기 후 전이

B => C : 타이틀 상태에서 스크린을 터치하면 전이

B => D : 타이틀 상태에서 조작없이 일정시간이 지나면 전이

C => D : 게임진행이 종료되면 전이

D => B : 랭킹입력이나 랭킹보여주는 것이 끝나면 전이

 

이렇게 됩니다.

이런 도식화된 유한한 갯수의 상태들의 관계를 유기적으로 전이시켜주면서 관리하는 것이 바로 FSM입니다.

switch 문으로 만들어도 되고 if문들이나 포인터배열등으로 만들어도 됩니다.

편하게 작업하면 되는 것이고 이런게 있다는 것을 기억하시면 됩니다.

 

덤으로 게임 진행쪽에 대한 상태 전이를 추가로 보겠습니다.

flow2.jpg

C-1. 스테이지 타이틀 표시(예. STAGE 1)

C-2. 게임

C-3. 클리어

C-4. 게임오버

 

이런 상태들이 있는 것이고요.

관계를 생각해보면요.

 

C-1 => C-2 : 현재 몇 스테이지인지 일정시간 표시 후 전이

C-2 => C-3 : 주어진 조건을 클리어하면(일정 점수 획득이라던가) 전이

C-2 => C-4 : 게임오버 상태가 되면 전이(테트리스 예니까 블록이 화면 상단끝까지 다 찼다던가)

C-3 => C-1 : 클리어 영상 출력 후 전이

 

이정도가 되겠죠.

역시 이런 것을 관리하는 것이 FSM입니다.

구현은 맘대로겠죠. ^^;

 

보통 FSM을 구현할 때는

 

State에 들어갈 때 / State에서 나갈 때 를 구현합니다.

어떻게 구현할 지는 맘대로겠지만, 많이 쓰이는 방법중에는 MFC처럼 들어갈 때는 onEnter / 나갈 때는 onLeave 같은 식으로 공통된

인터페이스를 만들어서 모든 상태를 객체로 만들고 이 인터페이스를 상속받아서 구현하는 방법들이 있습니다.

 

interface State

{

public onEnter(lastState);

public onLeave();

};

 

object LogoState implemented State

{

어쩌고 저쩌고 지화자 좋다

};

 

와 같은 이런 구조겠죠.

 

이런 FSM은 그러면 이런 진행구조들에만 사용될까요?

게임 내의 객체들의 AI(인공지능)나 패턴을 구현하는 데에도 사용됩니다.

예를 들면 몬스터 오거라는게 있고 이 오거의 패턴을 다음과 같이 생각했다고 합시다.

 

오거는 임의의 방향으로 2걸을 옮기고 두리번 걸며 적을 찾는다.

적이 오거의 시야(오거 중심 반경 100픽셀)에 걸리면 해당 적을 쫓는다.

적을 쫓다가 적과의 거리가 직선거리 300픽셀이 넘어가면 적을 포기하고 다시 임의의 방향으로 움직이기 시작한다.

반대로 적을 쫓다가 적이 반경 20픽셀 안에 들어오면 공격한다.

 

이를 잘 살펴보면 몇가지 상태로 이뤄져 있음을 알 수 있습니다.

그러면 당연히 FSM으로 만들 수 있게 되겠죠

 

그럼 이것(FSM)과 cocos2d for iphone의 관계는 무엇일까요?

별 것 없습니다. 게임을 작성하려면 어떻게 구현하던 FSM이 꼭 필요합니다.

장면전환부터 객체의 인공지능, 패턴까지 FSM이 필수로 사용되지요.

cocos2d는 자체적으로 Scene이라는 장면에 관련되어서 State를 구체화시키고 분류시킬 수 있는 것을 가지고 있습니다.

어떤 스프라이트Sprite가 움직이는 패턴을 정의하는 일종의 FSM도 가지고 있습니다.

하지만 우리가 구현하는 FSM이 필요한 경우가 더 많겠죠.

 

일단 2번째 이야기로 FSM을 다뤄봤습니다.

시간이 된다면 3번째 이야기는 씬이나 레이어, 스프라이트에 대한 얘기로 넘어가야겠습니다.

그러면서 자연스럽게 간단한 FSM을 구현해 보겠습니다. 시간이 된다면 말이죠. ^^;

 

 

========================================================================

그리고 빼먹은 것이지만 중요한 것.

강좌는 펌을 허락하지 않습니다. 어디까지나 목적은 KPUG에 컨텐츠를 채우는 것이 목적이니까

블로그나 타 사이트로의 펌은 허락하지 않습니다.

링크는 허용합니다. :-)

번호 제목 작성자 작성일 조회
141 안드로이드 싱크하기 - 무선 - 사진 등등 - 쉬움 [8] 맑은하늘 06.16 5578
140 티없이 맑게~ 자신있게~ 액정 보호지 붙이기~ [18] file yohan666 06.20 11365
139 Chuwi J4 펌 업그레이드 방법 [2] file 햇반 07.06 3604
138 안드로이드 잠금패턴 잊었을 때 긴급 대처 [6] 기둥 07.07 14243
137 저가형 태블릿 플라이 터치2 [10] file 스파르타 08.02 5329
136 태빗 허니콤 사용기(빌드6) 영상은 링크~ [2] 스파르타 08.19 3967
135 디파이 개봉샷 [2] TX 09.02 4217
134 PalmBible+ 용 성경책 파일 만들기 [2] file 왕초보 09.29 3810
133 '정직한 기술' 저가형 필름스캐너 Fotobox 간단리뷰 [3] file 팬디 10.01 8459
132 아이폰에서 쓸만한 무료 일기장 고르기 [7] jubilee 10.03 4599
131 대륙의 짝퉁 마이크로 sd32기가 [12] file 준용군 10.14 4386
130 발로쓰는 리뷰 (해드폰) [1] file 스파르타 10.22 4063
129 타블렛 비교표 [2] file jubilee 10.24 5739
128 델스트릭 장단점 다시 한번 비교 해봤습니다. file 준용군 10.25 5142
127 N12 루팅하기 (Root 권한은 획득하나 System 폴더 변경 불가) [4] 별사랑 10.26 4807
126 N12 루팅하기 2편 (System 폴더 RW 권한 획득 - 내용 삭제,새로 글 올릴 예정임.) [9] 별사랑 10.27 3983
125 N10 (带蓝牙)버전 리뷰 [8] 짜짜로니 10.29 3931
124 N12 루팅하기 3편 (기존 게시물 내용 상관없이 이번 내용만 적용하면 가능) [9] 별사랑 11.04 4674
123 초보자를 위한 안드로이드 앱 목록 [14] jubilee 11.17 6172
122 lg기업 최고의 역작 옵큐사전 [14] 프리페 11.18 4660

오늘:
585
어제:
717
전체:
15,195,228