Não sei muito sobre a máquina de estados finitos na IA ou sobre outros comportamentos do jogo, exceto este tutorial rápido com um Mineiro: http://www.ai-junkie.com/architecture/state_driven/tut_state1.html, que é orientado a objetos.
Realmente não sei se este tutorial descreve o padrão State ou não, o que você acha?
Não estou falando de outras coisas mais orientadas à aritmética, como direção, física, busca de caminhos ou colisões, mas sim lógicas de jogos, IA orientada a estados e coisas que envolvem muitos estados if
e / ou switch
es simultâneos.
Quais são os prós / contras do uso de um padrão de estado ou uma verificação seqüencial de uma estrutura de estado simples 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
}
Respostas:
Tentarei responder a isso da melhor maneira possível, mas há algumas "melhores práticas" nas quais não tenho certeza, mas tentarei decompô-lo da maneira mais limpa possível.
FSMs
Primeiramente, o tutorial do Miner é de Programming Game AI by Example por Mat Buckland (que eu recomendo que você obtenha como uma introdução ao AI). Ele usa uma enumeração para cada estado, NÃO uma estrutura. Com a estrutura no seu exemplo, você tem booleanos como estados, portanto, você pode ter qualquer número deles ao mesmo tempo. Isso pode levar ao comportamento desejado, mas na maioria das vezes com FSMs (Finite State Machines), leva a um comportamento indesejável.
Por exemplo:
Em segundo lugar, essa não é a única maneira que ele descreve os estados. A maneira como eu pessoalmente prefiro (dependendo da situação) é criar uma classe abstrata chamada State que possui as funções Enter (), Exit () e Update (). Em seguida, crie meus estados como subclasses da classe State.
Como esta foto (encontrada na página 2 desse link, na verdade):
Padrão de Estado
Na minha opinião pessoal, o padrão de estado é apenas uma parte do design do software em que o software possui vários estados. A implementação é do desenvolvedor. Eu não acho que exista uma diferença adequada entre usar uma declaração de chave grande ou criar uma máquina de estado completa para executar todos os seus estados, como descrevi acima. Eles estão essencialmente fazendo a mesma coisa. Portanto, a esse respeito, a resposta para uma de suas perguntas é sim, acredito que essa página descreve o padrão de estado.
Prós e contras
Existem prós e contras em qualquer método usado para implementar um design controlado pelo estado.
Usando uma declaração If / Else ou Switch
Prós:
Contras:
Usando uma máquina de estado orientada a objetos
Prós:
Contras:
Espero que responda todas as suas perguntas. De fato, acabei de abrir minha cópia do Programming Game AI por Example e Mat menciona que a máquina de estados é conhecida como "padrão de design de estados". Pessoalmente, eu discordo, mas cada um na sua.
Espero que ajude :)
fonte