INF 1771 – Inteligência Artificial  
Aula 22 – Máquinas de Estados Finitos  
Edirlei Soares de Lima  
<elima@inf.puc-rio.br>  
Introdução  
•
Máquinas de Estados Finitos (Finite State Machines - FSM)  
são provavelmente o padrão de software mais utilizado em  
ara selecionar o comportamento de agentes re
Máquina de Estados  
•
Uma máquina de estados é um modelo matemático usado  
para representar programas.  
–
–
–
Conjunto de estados.  
Regras de transição entre estados.  
Estado atual.  
Máquina de Estados  
•
•
Um exemplo bem simples de uma FSM é um interruptor de  
luz.  
Switch On  
On  
Off  
Switch Off  
Em um jogo normalmente uma FSM não é tão simples assim,  
visto que geralmente os agentes podem ter um conjunto  
muito maior de estados.  
Exemplo – Pac-Man  
•
•
Os fantasmas Inky, Pinky, Blinky e Clyde do  
jogo Pac-man são implementados via FSM.  
Os fantasmas tem 3 comportamentos:  
–
–
–
Caçar (Chase)  
Fugir (Evade)  
Dispersar (Scatter)  
•
•
A transição de estados ocorre sempre que o  
jogador conseguir alguma pílula de energia.  
A implementação da ação caçar de cada  
fantasma é diferente.  
Exemplo – Pac-Man  
•
Máquina de Estados:  
tempo_dispersar >= 5 (sec)  
tempo_caçar >= 20 (sec)  
Dispersar  
Caçar  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Fugir  
•
Os tempos variam em cada nível do jogo.  
Exemplo – Pac-Man  
•
Comportamento de Dispersar:  
–
Mover em direção aos cantos  
e ficar andando em círculos.  
tempo_dispersar >= 5 (sec)  
Dispersar  
tempo_caçar >= 20 (sec)  
Exemplo – Pac-Man  
•
Comportamento de Fugir:  
–
Movimentar-se mais lentamente com  
movimentos aleatórios.  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Fugir  
Exemplo – Pac-Man  
•
Comportamento de Caçar:  
–
Movimenta-se mirando na posição do Pac-Man.  
tempo_dispersar >= 5 (sec)  
tempo_caçar >= 20 (sec)  
Caçar  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Exemplo – Pac-Man  
•
Comportamento de Caçar:  
–
Movimenta-se mirando na posição 4 tiles
tempo_dispersar >= 5 (sec)  
tempo_caçar >= 20 (sec)  
Caçar  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Exemplo – Pac-Man  
•
Comportamento de Caçar:  
–
Movimenta-se mirando em uma posição que combina a  
posição/direção do Pac-Man e do Blinky
tempo_dispersar >= 5 (sec)  
tempo_caçar >= 20 (sec)  
Caçar  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Exemplo – Pac-Man  
•
Comportamento de Caçar:  
–
Quando está longe do Pac-Man, movimenta-se em direção ao Pac-  
Man. Quando está perto, movimenta
tempo_dispersar >= 5 (sec)  
tempo_caçar >= 20 (sec)  
Caçar  
tempo_player_  
energia >= 10 (sec)  
player_pegou_  
energia == true  
Exemplo – Pac-Man  
•
•
Fim de jogo?  
Teoricamente Pac-Man foi  
projetado para não ter fim,  
mas… no level 256…  
Exemplo – Quake  
•
•
Os NPCs do jogo Quake também são  
implementados via FSM.  
Estados/Comportamentos:  
–
–
–
–
–
–
Procurar Armadura (FindArmor)  
Procurar Kit Medico (FindHelth)  
Correr (RunAway)  
Atacar (Attack)  
Perseguir (Chase)  
...  
•
Até mesmo as armas são  
implementadas como uma mini FSM.  
–
–
–
Mover (Move)  
Tocar Objeto (TouchOject)  
Morrer/Explodir (Die)  
Exemplo – FIFA20XX  
•
•
O comportamento dos jogadores é  
definido através de FSMs.  
Estados/Comportamentos:  
–
–
–
–
Driblar (Dribble)  
Correr Atrás da Bola (ChaseBall)  
Marcar Jogador (MarkPlayer)  
...  
•
Os times também usam FSMs para  
definir comportamentos em grupo.  
–
–
–
Defender (Defend)  
Atacar (Attack)  
...  
Máquina de Estados  
Implementação  
void run(int *state){  
switch(*state){  
case 0: //procurar inimigo  
procurar();  
case 2: //recarregar energia  
recarregar();  
if(encontrou_inimigo)  
if(energia > 90)  
*state = 1;  
*state = 0;  
break;  
break;  
case 1: //atacar inimigo  
atacar();  
case 3: //fugir  
fugir();  
if (morto){  
if(!encontrou_inimigo){  
if(energia < 50)  
morrer();  
*
state = -1;  
*
state = 2;  
else  
state = 0;  
}
if (matou){  
*state = 0;  
*
}
}
break;  
if(energia < 50 || inimigo_forte)  
state = 3;  
break;  
}
*
}
Vantagens  
•
Elas são rápidas e simples de implementar – existem várias formas de  
implementar e todas são muito simples.  
•
•
•
Gastam pouco processamento.  
São fáceis de depurar – quando o numero de estados é pequeno.  
São intuitivas – qualquer pessoa consegue entender o seu significado  
apenas olhando para a sua representação visual. Isso facilita o trabalho do  
game designer, que muitas vezes não tem conhecimento de linguagens de  
programação.  
•
São flexíveis – podem ser facilmente ajustada pelo programador para  
prover comportamentos requeridos pelo game designer.  
Problemas  
•
•
Á medida que a complexidade do comportamento dos  
agentes aumenta, as FSMs tendem a crescer de forma  
descontrolada.  
As FSMs se tornam terrivelmente complexas quanto levam em  
consideração ações muito básicas necessárias a um agente.  
•
•
A representação visual torna-se intratável.  
Comportamentos complexos são necessários em jogos  
modernos.  
FSM um Pouco Mais Complexa…  
Máquina de Estados Finita Hierárquica  
•
É possível organizar uma FSM usando máquinas de estados  
finitas hierárquicas (HFSM).  
•
Níveis mais altos lidam com ações mais genéricas, enquanto  
níveis mais baixos lidam com ações mais específicas.  
•
•
Cada estado pode ser uma nova FSM.  
Infelizmente, a hierarquia não reduz o número de estados. Ela  
pode somente pode reduzir significativamente o número de  
transições e tornar a FSM mais intuitiva e simples de  
compreender.  
Máquina de Estados Finita Hierárquica  
Máquina de Estados Finita Hierárquica  
Leitura Complementar  
•
Millington, I.; Funge, J.: Artificial  
Intelligence for Games, 2nd Ed.,  
Morgan Kaufmann, 2009.