-
장점
- 빠르고 코딩하기 쉽다
- 오류수정 용이
- 계산 부담 없음
- 직관적
- 유연성이 있다
-
정의
- 행동과 상태를 가짐
-
입력에 따라
- 상태를 전환 하거나
- 출력 / 행동이 일어나게 하는 장치
-
구현 방법
-
if-then / switch
- 상태와 조건이 추가될 수록 스파게티가 되버림
- 유연성도 없고, 확장성도 없음
-
상태 전환표(state transition table)
- 현재 상태, 조건, 상태 전환
- 객체와 상태 전환표와 상태가 분리되어 있음
- 매 단계마다 표에 있는 규칙들을 조사해서 그에 따라 객체가 상태를 변환
-
State design pattern
- 각각의 상태 내부에 상태 전환을 위한 규칙을 내장
- 규칙에 따라 현재 상태 스스로 다른 상태로 바뀜
- 각 상태는 다른 상태가 존재함을 알고는 있으나 외부 논리에 의존하지는 않음
-
각각의 상태는 고유한 클래스로 구현
- 싱글톤 인스턴스로 구현
-
상태 전환 함수 지님
- 상태 진입 함수
- 상태 실행 함수
- 상태 종료 함수
- 객체는 정보를 가짐
-
West World Project
-
State class <template>
- Enter(Miner*)
- Execute(Miner*)
- Exit(Miner*)
- EnterMinerAndDigForNugget : public State<Miner>
- VisitBankAndDepositGold : public State<Miner>
- GoHomeAndSleepTileRested : public State<Miner>
- QuenchThirst : public State<Miner>
- function
- Singleton
-
StateMachine class <template>
- State<entity_type*> m_pGlobalState
- State<entity_type*> m_pCurrentState
- State<entity_type*> m_pPreviousState
- RevertToPreviousState()
- Update()
- ChangeState(State<entity_type>* pNewState)
- for state blip
- for state blip
-
BaseGameEntity Class
-
Miner : BaseGameEntity
- m_iGold
- m_iMoney
- m_iThirst
- m_iFatigue
- StateMachine<Miner>* m_pStateMachine
- Information