Todo mundo que começa a programar jogos passa por esse ritual: você cria o movimento com um if (andando). Depois adiciona if (pulando), if (atacando), if (tomandoDano) e if (noChao).
Pouco tempo depois, o script do herói tem centenas de linhas repletas de variáveis booleanas que entram em conflito: o personagem bate enquanto pula, toma dano enquanto ataca ou trava em animações incorretas. O famoso código espaguete entrou em ação.
Hoje na série Vida de Game Dev, vamos estruturar isso de forma profissional com o padrão de projeto mais clássico da indústria: a Máquina de Estados Finitos (Finite State Machine, ou FSM).
O Conceito: Apenas Um Estado por Vez
A regra de ouro da FSM é simples: em qualquer momento do tempo, uma entidade só pode estar em exatamente UM estado ativo.
Por exemplo, seu personagem pode estar em:
ESTADO_PARADO (Idle)ESTADO_MOVENDO (Run)ESTADO_PULANDO (Jump)ESTADO_ATACANDO (Attack)
Estando no estado ESTADO_ATACANDO, ele ignora comandos de corrida até que o ataque finalize e ocorra a transição de volta para ESTADO_PARADO. Isso elimina conflitos de animações e bugs de lógica.
Os 3 Momentos de Cada Estado
Uma máquina de estados robusta organiza cada estado em três métodos:
- Entrar (Enter): Executado uma única vez ao iniciar o estado (tocar o áudio do golpe, resetar a velocidade).
- Atualizar (Update): Executado a cada quadro enquanto o estado persistir (aplicar hitbox de dano, checar término de animação).
- Sair (Exit): Executado ao trocar para outro estado (desligar caixas de colisão de ataque, limpar variáveis temporárias).
IA de Inimigos de Forma Clara
A FSM também é a base para inteligência artificial clássica de inimigos:
- Patrulha: Anda entre pontos demarcados. Gatilho: Avistou o jogador → transiciona para Perseguir.
- Perseguição: Move-se em direção ao jogador. Gatilho: Chegou ao alcance de ataque → transiciona para Atacar. Perdeu o jogador de vista → retorna para Patrulha.
- Ataque: Desfere o golpe e entra em tempo de recarga (cooldown).
Código-Fonte e Padrões de Arquitetura
Disponibilizei modelos de implementação de Máquinas de Estados em C# e GDScript no meu GitHub (github.com/dfilitto) para você clonar e estudar nos seus projetos. E se você quiser se aprofundar em boas práticas de Orientação a Objetos e padrões de software, confira os artigos de arquitetura e programação no dfilitto.blog.br.
No YouTube (DFILITTO), tenho vídeos detalhando a implementação passo a passo. E para um treinamento estruturado em programação de jogos e mecânicas completas, explore meus cursos na Udemy.
Você já utiliza máquinas de estados nos seus projetos ou costuma usar variáveis booleanas no Update? Comente abaixo! Na semana que vem: Level Design 101 — ensinando o jogador sem precisar de tutoriais intrusivos.





