![](../images/menudivider.jpg)
English
![](../images/menudivider.jpg)
![](../images/menudivider.jpg)
Inicio
![](../images/menudivider.jpg)
Características
![](../images/menudivider.jpg)
API
![](../images/menudivider.jpg)
Licencia
![](../images/menudivider.jpg)
Contactar
![](../images/menudivider.jpg)
![](../images/menudivider.jpg) Download
![](../images/menudivider.jpg)
|
|
StateCore v0.5 (Beta)
StateCore es una genérica maquina de estados finitos (FSM), basado
en el patrón estado y escrito en C++. StateCore fue creado con la idea
de ayudar a los desarrolladores. Esto fue creado bajo la licencia LGPL.
Esto quiere decir que es completamente gratis para utilizarlo en
aplicaciones comerciales y no comerciales. Tu puedes utilizar esto para aplicar estados a: - aplicaciones, ... (networking, videojuegos, ...)
- objetos, armas, personajes, enemigos, ... (cinematicas, videojuegos, ...)
- redes neuronales, pathfinding, A*, inteligencia artificial, ... (AI)
Ejemplo utilizando la clase implementación
Este es un pequeño ejemplo que muestra como crear una maquina de estados utilizando la clase implementación.
// Incluimos el archivo de
cabecera que contiene la clase implementacion.
#include
<ceStateCoreImpl.h>
#include <cstdio> // Para printf.
// utilizamos el
namespace "ce" (CorEngine) por defecto (Opcional).
using namespace
ce;
// Creamos nuestros propios estados, heredando la clase interfaz para los estados. class
CGlobalState : public IState
{
public:
// Esto se ejecutara cuando se entre al estado.
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the > Global state \n"); };
// Esto es llamado por la función de actualización del dueño // en cada paso - de actualización. inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the > Global state \n"); };
// Esto se ejecutara cuando se salga del estado. inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the > Global state \n"); };
} GlobalState;
class
CGamePlayState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the GamePlay state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the GamePlay state \n"); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the GamePlay state \n"); };
} GamePlayState;
class
CMenuState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the Menu state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the Menu state \n"); // Cambiar a un nuevo estado actual. Owner -> ChangeState(&GamePlayState); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the Menu state \n"); };
} MenuState;
class
CIntroState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the Intro state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the Intro state \n"); Owner -> ChangeState(&MenuState); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the Intro state \n"); };
} IntroState;
// Creamos nuestra propia clase manager, heredando la clase implementacion.
class
CStateManager : public IStateManagerImpl<CStateManager>
{
public:
inline void
Example(void) const
{ // Le pasamos un estado global que será llamado cada vez que el FSM // sea actualizado. this -> State -> SetGlobalState(&GlobalState); // Le pasamos un estado actual que será llamado cada vez que el FSM // sea actualizado. this -> State -> SetCurrentState(&IntroState);
// Esta función provocará la actualización en el estado global y // el estado actual. this -> State -> Update(); this -> State -> Update(); this -> State -> Update(); };
// Operador -> (Opcional).
const CStateManager* operator
-> (void) const
{ return this;
};
};
int
main(int
argc, char
**argv)
{
// Creamos una instancia de nuestra clase manager.
const CStateManager State;
// Verificamos la integridad de la clase manager (Opcional). if (State -> VerifyStateManager() == 0) return 1;
State -> Example();
return 0;
}Ejemplo utilizando la clase interfaz
Este es un pequeño ejemplo que muestra como crear una maquina de estados utilizando la clase interfaz.
// Incluimos el archivo de
cabecera que contiene la clase interfaze.
#include
<ceStateCore.h>
#include <cstdio> // para printf.
// utilizamos el
namespace "ce" (CorEngine) por defecto (Opcional). using
namespace ce;
// Creamos nuestros propios estados, heredando la clase interfaz para los estados. class
CGlobalState : public IState
{
public:
// Esto se ejecutara cuando se entre al estado.
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the > Global state \n"); };
// Esto es llamado por la función de actualización del dueño // en cada paso - de actualización. inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the > Global state \n"); };
// Esto se ejecutara cuando se salga del estado. inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the > Global state \n"); };
} GlobalState;
class
CGamePlayState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the GamePlay state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the GamePlay state \n"); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the GamePlay state \n"); };
} GamePlayState;
class
CMenuState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the Menu state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the Menu state \n"); // Cambiar a un nuevo estado actual. Owner -> ChangeState(&GamePlayState); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the Menu state \n"); };
} MenuState;
class
CIntroState : public IState
{
public:
inline void OnEnter(const IStateManager *Owner) { std::printf("\n + Entering in the Intro state \n"); };
inline void OnExecute(const IStateManager *Owner) { std::printf(" > This is the Intro state \n"); Owner -> ChangeState(&MenuState); };
inline void OnExit(const IStateManager *Owner) { std::printf(" - Leaving the Intro state \n"); };
} IntroState;
int
main(int
argc, char
**argv)
{
// Creamos una instancia de la clase manager.
IStateManager *State = CreateStateManager(); if (State == NULL) return 1;
// Le pasamos un estado global que será llamado cada vez que el FSM // sea actualizado. State -> SetGlobalState(&GlobalState); // Le pasamos un estado actual que será llamado cada vez que el FSM // sea actualizado. State -> SetCurrentState(&IntroState);
// Esta función provocará la actualización en el estado global y // el estado actual. State -> Update(); State -> Update(); State -> Update();
// Liberamos la instancia de la clase manager. DestroyStateManager(&State);
return 0;
}
Hasta
aquí ya sabes lo básico para su utilización, para mas información,
recomiendo leer la documentación de la API. Para
soporte o ante
cualquier duda o sugerencia, no dudes en contactarme.
![(cc) Creative Commons v2.5 (By - NC - ND).](../images/somerights20.png)
Copyleft (cc) 2010 por FX Programmer. Algunos Derechos Reservados.
|
|