2010-04-08 5 views
1

Je me demandais si je pouvais coder un type de FSM "générique" pour un jeu en C++?FSM générique pour le jeu en C++?

Mon jeu a une conception orientée composants, donc j'utilise un composant FSM. Mon composant Machine à états finis (FSM), ressemble plus ou moins de cette manière. Je voudrais entendre vos opinions/idées ou suggestions sur la façon de faire ce composant FSM, générique. Avec générique, je veux dire:

1) Créer la fsmTable à partir d'un fichier xml est vraiment facile, je veux dire que c'est juste un tas d'entiers qui peuvent être chargés pour créer une matrice MAX_STATESxMAX_ACTION.

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

2) Mais qu'en est-il de la méthode «Effectuer une action»?

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; 
    } 
} 

si je voulais faire les « actions » et le commutateur générique?

Ceci afin d'éviter de créer une classe de composant FSM différente pour chaque GameEntity? (gecFSMZombie, gecFSMDryad, gecFSMBoss etc?). Cela me permettrait d'aller "Data Driven" et de construire mes FSM génériques à partir de fichiers par exemple.

Que proposez-vous?

+1

Avez-vous regardé la bibliothèque de la machine d'état boost? –

Répondre

1

Jetez un coup d'œil à la bibliothèque Boost Statechart. (anciennement connu sous le nom boost :: fsm) Il est livré avec un très bel exemple de photo.

+0

Jetez un coup d'oeil, merci pour la suggestion – Goles

Questions connexes