Notícias

Vida de Game Dev #07: Máquina de Estados (FSM): pare de criar montanhas de ‘if/else’

Mecânicas de jogo 2
Se o script do seu personagem virou um ninho de 'if/else' impossível de dar manutenção, você precisa conhecer as Máquinas de Estados Finitos (FSM). Aprenda como organizar ações como andar, pular, atacar e criar inteligências artificiais sem enlouquecer.

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:

  1. Entrar (Enter): Executado uma única vez ao iniciar o estado (tocar o áudio do golpe, resetar a velocidade).
  2. Atualizar (Update): Executado a cada quadro enquanto o estado persistir (aplicar hitbox de dano, checar término de animação).
  3. 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.

Danilo Filitto

Sou Mestre em Ciência da Computação pela Universidade Estadual de Maringá – UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná – UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista – UNOESTE.
Atuo na área acadêmica como professor desde 2006. Além de professor sou desenvolvedor de jogos, palestrante e mantenedor dos sites dfilitto e Make Indie Games.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 2.144 outros assinantes

Teoria e Prática

Anúncios

Aprenda a criar seus jogos com os melhores desenvolvedores de jogos

Dicas para quem quer começar a criar seus próprios jogos

Quer aprender a programar?