No sé mucho sobre la máquina de estados finitos en IA u otros comportamientos del juego en el juego, excepto este tutorial rápido con un minero: http://www.ai-junkie.com/architecture/state_driven/tut_state1.html que está orientado a objetos.
Realmente no sé si este tutorial describe el patrón de estado o no, ¿qué te parece?
No estoy hablando de otras cosas más orientadas a la aritmética, como la dirección o la física o la búsqueda de caminos o colisiones, sino más bien sobre la lógica del juego, la inteligencia artificial impulsada por el estado y cosas que involucran muchos estados if
y / o switch
es simultáneos
¿Cuáles son las ventajas y desventajas de utilizar un patrón de estado o una verificación secuencial de una estructura de estado simple como esta:
struct States
{
bool is_walking, is_running, holds_a_weapon, is_crouch;
int weapon_id, int id_team;
};
void HandleStates (States state)
{
//etc
}
Respuestas:
Trataré de responder esto lo mejor que pueda, pero hay ciertas "mejores prácticas" de las que no estoy seguro, pero trataré de analizarlo de la manera más limpia posible.
FSM
En primer lugar, el tutorial de Miner es de Programming Game AI by Example de Mat Buckland (que recomiendo que consigas como introducción a AI). Él usa una enumeración para cada estado, NO una estructura. Con la estructura en su ejemplo, tiene booleanos como estados, por lo que podría tener cualquier número de estos al mismo tiempo. Esto puede conducir al comportamiento que desea, pero la mayoría de las veces con FSM (máquinas de estado finito) conduce a un comportamiento indeseable.
Por ejemplo:
En segundo lugar, esa no es la única forma en que describe los estados. La forma en que personalmente prefiero (dependiendo de la situación) es crear una clase abstracta llamada State que tenga las funciones Enter (), Exit () y Update (). Luego crea mis estados como subclases de la clase State.
Como esta imagen (que se encuentra en la página 2 de ese enlace en realidad):
Patrón de estado
En mi opinión personal, el patrón de estado es solo una parte del diseño del software donde el software tiene varios estados. La implementación depende del desarrollador. No creo que haya una diferencia adecuada entre usar una declaración de cambio grande o crear una máquina de estado completa para ejecutar todos sus estados como he descrito anteriormente. Básicamente están haciendo lo mismo. En ese sentido, la respuesta a una de sus preguntas es sí, creo que esa página describe el patrón de estado.
Pros contras
Hay ventajas y desventajas de cualquier método que use para implementar un diseño basado en el estado.
Uso de una declaración If / Else o Switch
Pros:
Contras:
Usando una máquina de estado orientada a objetos
Pros:
Contras:
Espero que conteste todas sus preguntas. De hecho, acabo de abrir mi copia de Programming Game AI con Example y Mat menciona que la máquina de estado se conoce como el "patrón de diseño de estado". Personalmente, no estoy de acuerdo, pero a cada uno lo suyo.
Espero eso ayude :)
fuente