Módulo 12 - Máquinas de estado: estados, transições e eventos

O jogo como máquina de estado: telas e eventos

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026

O que você vai aprender

  • Enxergar as telas de um jogo ou app como estados.
  • Separar o que é estado (a tela) do que é transição (o evento).
  • Evitar bugs comuns como agir na tela errada.
  • Aplicar o modelo de máquina de estado a interfaces.

Cada tela é um estado

Um jogo simples tem um punhado de telas bem distintas. Há o menu, onde você escolhe começar. Há a partida em andamento, o estado jogando, onde o personagem se move e os pontos sobem. Há a pausa, uma parada temporária. E há a tela de fim, com o placar final. Cada uma dessas é um estado, porque o jogo se comporta de um jeito diferente em cada uma. No menu, o toque na tela escolhe uma opção; em jogando, o mesmo toque move o personagem; na pausa, ele nem deveria mexer no jogo. É o estado atual que dá sentido à ação, exatamente como o estado atual dava sentido ao evento no semáforo.

As setas entre as telas são as transições, e cada uma tem um evento claro. Do menu, tocar em jogar leva ao estado jogando. De jogando, apertar pausa leva à pausa; perder toda a vida leva ao fim. Da pausa, tocar em continuar volta a jogando; tocar em sair volta ao menu. Do fim, tocar em jogar de novo recomeça. Desenhar esse mapa antes de programar responde perguntas que, sem ele, viram bug: dá para pausar no menu? Não, porque não há transição de pausa saindo do menu. O jogo pode terminar durante a pausa? Só se você criar essa transição de propósito.

Diagrama de estados de um jogo com quatro caixas: Menu, Jogando, Pausa e Fim. Uma seta de Menu para Jogando rotulada 'tocar em jogar'. De Jogando saem duas setas: uma para Pausa rotulada 'apertar pausa' e outra para Fim rotulada 'perder'. De Pausa saem duas setas: uma de volta para Jogando rotulada 'continuar' e outra para Menu rotulada 'sair'. De Fim uma seta para Jogando rotulada 'jogar de novo'. Cada caixa é uma tela; cada seta é uma transição disparada por um evento.
As telas do jogo como estados e as ações do jogador como eventos que disparam as transições.

Estado ou transição?

Uma confusão comum é misturar o que é estado com o que é transição. O estado é uma situação que dura: você fica na tela de pausa até fazer algo. A transição, ou o evento que a dispara, é instantânea: apertar pausa acontece num piscar de olhos e o efeito é mudar de estado. Uma pergunta ajuda a separar: isso é um lugar onde o jogo permanece, ou um acontecimento que muda de lugar? Menu, jogando, pausa e fim são lugares onde o jogo fica; tocar em jogar, apertar pausa, perder e continuar são acontecimentos que movem entre esses lugares. Estado é substantivo de situação; evento é verbo de ação.

🎮 Jogo da aula

Estado ou transição?

Classifique cada item: é um Estado (uma tela onde o jogo permanece) ou uma Transição/evento (uma ação que muda de tela)?

Fazer essa distinção paga dividendos na hora de codar. Cada estado ganha um trecho que cuida do que desenhar e de quais eventos escutar naquela tela. Uma única variável, a tela atual, comanda tudo: o laço principal do jogo consulta essa variável para decidir o que atualizar e o que mostrar. Em jogando, ele move o personagem e escuta pausa e fim de vida. Na pausa, ele congela o mundo e só escuta continuar e sair. Sem a máquina de estado, esses cuidados viram um bolo de condições, e é assim que nascem bugs como o personagem que continua andando com o jogo pausado.

O modelo que organiza interfaces

Essa forma de pensar não é só para jogos; ela organiza qualquer interface com modos. Um aplicativo de banco tem a tela de login, o painel, a transferência, a confirmação. Um player de música alterna entre tocando, pausado e parado. Um formulário passa por vazio, preenchendo, enviando e enviado, com um estado de erro à espreita. Em todos, o segredo é o mesmo: liste as telas ou modos como estados, guarde qual é o atual numa variável e descreva as transições disparadas por eventos. O botão de enviar só deve funcionar no estado preenchendo e válido, nunca no estado enviando, e é a máquina de estado que garante isso com naturalidade.

Teste rápido

Num jogo modelado como máquina de estado, o que são as telas (menu, jogando, pausa, fim) e o que são ações como apertar pausa?

Perguntas frequentes

Por que modelar as telas de um jogo como estados?
Porque cada tela se comporta de um jeito diferente, e tratar isso com if soltos vira bagunça. Vendo cada tela como um estado, você guarda a tela atual numa variável e faz o jogo reagir só aos eventos válidos ali. Isso evita bugs clássicos, como o personagem se mover durante a pausa ou o placar subir na tela de menu.
Qual a diferença entre um estado de tela e um evento de interface?
O estado de tela é uma situação que dura: o jogo fica na pausa até você fazer algo. O evento de interface é uma ação instantânea, como tocar num botão, que dispara uma transição para outra tela. Estado é onde o jogo permanece; evento é o que o move de uma tela para outra. Um dura, o outro acontece.
Como a máquina de estado evita bugs de interface?
Ela garante que cada evento só tenha efeito nas telas onde faz sentido. Se não existe transição de pausa saindo do menu, é impossível pausar no menu, por construção. Ao escutar em cada estado apenas os eventos válidos, você elimina combinações absurdas que, sem o modelo, apareceriam como comportamentos estranhos difíceis de reproduzir.
Preciso de uma máquina de estado para jogos simples?
Para um jogo bem pequeno, um punhado de if resolve. Mas assim que aparecem menu, pausa e fim, a máquina de estado paga o esforço: a lógica fica mais clara, mais fácil de estender e menos sujeita a bugs. Como o modelo é leve, muitos programadores já começam por ele mesmo em projetos pequenos, para não ter que reorganizar depois.
Isso serve para aplicativos, não só para jogos?
Serve, e muito. Qualquer interface com modos distintos se beneficia: telas de um app de banco, os estados de um player de música, as fases de um formulário. A receita é idêntica: listar os modos como estados, guardar o atual numa variável e descrever as transições por evento. O jogo é só o exemplo mais visual de uma ideia que vale para toda interface.
Onde fica guardada a pontuação, se ela não é um estado de tela?
A pontuação é um dado comum que o jogo guarda em paralelo, não um estado de tela. A máquina de estado cuida de qual tela está ativa; a pontuação é uma variável que sobe enquanto o estado é jogando. Separar o estado de controle (a tela) dos dados do jogo (pontos, vidas, tempo) é justamente o que mantém a lógica organizada.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.