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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: O jogo como máquina de estado: telas e eventos.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Cada tela é um estado. As telas de um jogo (menu, jogando, pausa, fim) são estados de uma máquina.
Estado ou transição?. Uma confusão comum é misturar o que é estado com o que é transição.
O modelo que organiza interfaces. Liste as telas ou modos distintos: cada um é um estado.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.
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.