Your SlideShare is downloading. ×
Game ai.fsm.01
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Game ai.fsm.01

746
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
746
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 게임 인공지능 GameAI 상태구동형 에이전트의 디자인 By Changhoon Park http://www.wawworld.me Last Update : 2012. 03. 0312년 3월 31일 토요일
  • 2. 유한상태기계(FSM)란? 2 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 3. FSM의 정의 (p46) 유한상태기계는 주어지는 모든 시간에서 처해 있을 수 있는 유한 개의 상태를 가지고 주어지는 입력에 따라 어떤 상태에 서 다른 상태로 전환시키거나 출력 이나 액션이 일어나게 하 는 장치 또는 그런 장치를 나타낸 모델이다. 3 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 4. FSM의 정의 (p46) • 유한 수의 상태를 가진다 • 외부로 부터 입력을 받아들인다 • 자신의 상태를 전환할 수 있다. • 상태에서 출력이나 액션이 일어나게 한다. 4 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 5. FSM의 아이디어 (p46) 객체의 행동을 쉽게 처리할수 있는 ‘덩어리’ 또는 상태들로 분해하는 것 5 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 6. FSM의 아이디어 (p46) 예) 전등 • 상태의 수 • 외부 입력 • 상태 전환 • 출력/액션 6 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 7. 게임에서 FSM의 이용 예 (p47) Pac-Man에서 ghost의 행동 - 도피하기 상태 / 추격하기 상태 - 추격하기에서 도피하기로 전환하기 위한 조건 - 도피하기에서 추격하기로 전환하기 위한 조건 7 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 8. FSM은 AI 프로그래머가 에이전트(NPC)에게 환상적인 지능을 제공하기 위해 선택한 도구 8 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 9. FSM이 좋은 이유 (p45) 빠르고 코딩하기 쉬움 - 유한 상태를 구현하는 방법은 여러가지가 있음 9 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 10. FSM이 좋은 이유 (p45) 오류 수정이 쉬움 - 각 상태에 추적자 코드를 추가하여 오류수정이 가능 10 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 11. FSM이 좋은 이유 (p45) 계산 부담이 없음 - 코드화된 규칙으로 if-this-then-that과 같은 사고 절차 11 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 12. FSM이 좋은 이유 (p45) 직관적임 - 의사소통이나 아이디어 교환을 개선하기 위한 방법으로 제공 12 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 13. FSM이 좋은 이유 (p45) 유연함 - 새로운 상태와 규칙을 쉽게 추가하여 에이전트 행동의 법위를 간단하게 확장 13 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 14. FSM을 구현하는 방법 14 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 15. enum StateType { RunAway, Patrol, Attack }; IF-THEN / SWITCH (p48) void Agent::UpdateState(StateType CurrentState) { switch (CurrentState) { 더 많은 상태와 조건이 추가되는 경우? case state_RunAway: EvadeEnemy(); if (Safe()) { 초기 상태 진입할 때 / 상태에서 빠져 나 ChangeState( state_Patrol); 올 때 / 보통 상태일 때 } break; case state_Patrol: FollowPatrolPath(); if (Threatened()) { if (StrongerThanEnemy()) { ChangeState( state_Attack); } else { ChangeState( state_RunAway); } } break; case state_Attack: if (WeakerThanEnemy()) { ChangeState( state_RunAway); } else { 15 BashEnemyOverHead(); } break; }//end switch } By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 16. 상태 전환표 •표를 정기적으로 질의하며 수신한 자극을 근거로 상태 전환 (작은 칩) •각 상태는 에이전트 외부에 존재하는 별개의 객체로 모델링 (카트리지) •새로운 상태 추가 (카트리지 추가, 상태규칙 칩 재프로그램) 16 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 17. 내장된 규칙들 상태들 자신의 내부에 상태 전환을 위한 규칙을 내장 카트리지 - 카트리지 내부에 상태전환 칩의 규칙을 포함 - 외부 논리(상태전환 칩)에 의존하지 않음 - 새로운 카트리지를 추가할 때 머리에 손댈 필요 없음 - 각 카트리지는 다른 카트리지가 존재하고 있음을 알고 있음 17 By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 18. 내장된 규칙들 상태들 자신의 내부에 상태 전환을 위한 규칙을 내장 객체로 캡슐화된 상태 - 상태전환을 위한 논리 포함 - 모든 상태의 공통 인터페이스를 가짐 class State class Troll { { public: /* ATTRIBUTES OMITTED */ virtual void Execute(Troll* troll)=0; State* m_pCurrentState; }; public: /* INTERFACE TO ATTRIBUTES OMITTED */ void Update() { m_pCurrentState->Execute(this;) } void ChangeState(const State* pNewState) { delete m_pCurrentState; 18 m_pCurrentState = pNewState; } }; By Changhoon Park http://wawworld.me12년 3월 31일 토요일
  • 19. 내장된 규칙들 상태들 자신의 내부에 상태 전환을 위한 규칙을 내장 //------------------------------State RunAway //-----------------------------State_Sleep class State_Runway : public State class State_Slepp : public State { { void Execute(Troll* troll) { void Execute(Troll* troll) { if(troll->isSafe()) { if(troll->isThreatened()) { troll->ChangeState(new State_Sleep()); troll->ChangeState(new State_RunAway()) } else { } else { troll->MoveAwayFromEnemy(); troll->Snore(); } } } } }; }; 19 By Changhoon Park http://wawworld.me12년 3월 31일 토요일