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