2010-04-08 2 views
1

Мне было интересно, есть ли способ, которым я мог бы написать какой-то «общий» FSM для игры с C++ ?.Общий FSM для игры на C++?

В моей игре есть компонентный дизайн, поэтому я использую компонент FSM.

мой компонент конечной машины (FSM), выглядит более или менее таким образом.

class gecFSM : public gecBehaviour 
{ 

public: 
    //Constructors 
    gecFSM() { state = kEntityState_walk; } 
    gecFSM(kEntityState s) { state = s; } 

    //Interface 
    void setRule(kEntityState initialState, int inputAction, kEntityState resultingState); 
    void performAction(int action); 

private: 
    kEntityState fsmTable[MAX_STATES][MAX_ACTIONS]; 

}; 

Я хотел бы услышать ваши мнения/идеи или предложения о том, как создать этот компонент FSM, общий. С общим я имею в виду:

1) Создание fsmTable из xml-файла очень просто, я имею в виду, что это просто куча целых чисел, которые можно загрузить для создания матрицы MAX_STATESxMAX_ACTION.

void gecFSM::setRule(kEntityState initialState, int inputAction, kEntityState resultingState) 
{ 
    fsmTable[initialState][inputAction] = resultingState; 
} 

2) Но как насчет метода «выполнить действие»?

void gecFSM::performAction(int action) 
{ 
    switch(smTable[ ownerEntity->getState() ][ action ]) 
    { 
     case WALK: 
      /*Walk action*/ 
     break; 
     case STAND: 
      /*Stand action*/ 
     break; 
     case JUMP: 
      /*Jump action*/ 
     break; 
     case RUN: 
      /*Run action*/ 
     break; 
    } 
} 

Что делать, если я хотел сделать «действия» и общий ключ?

Это во избежание создания другого компонента компонента FSM для каждого GameEntity? (gecFSMZombie, gecFSMDryad, gecFSMBoss и т.п?). Это позволило бы мне пойти «Data Driven» и построить, например, мои общие FSM из файлов.

Что вы, люди, предлагаете?

+1

Вы посмотрели на библиотеку авторизованного автомата? –

ответ

1

Посмотрите на библиотеку состояний Boost Statechart. (ранее известный как boost :: fsm) Он поставляется с очень красивым примером фотокамеры.

+0

Посмотрите, спасибо за предложение – Goles