0Pricing
Lua Academy · Aula

Comportamento de IA com máquinas de estados

Implemente inteiramente em scripts Lua a lógica de IA de inimigos baseada em FSM.

Comportamento de IA com máquinas de estados é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

O que é uma máquina de estados finitos?

Uma Máquina de Estados Finitos (FSM) define o comportamento como um conjunto de estados com transições entre eles, acionadas por condições ou eventos.

Estrutura de tabela de uma FSM

Represente uma FSM como uma tabela com um estado atual, uma tabela de estados e retornos de chamada opcionais de entrada, saída e atualização para cada estado.

local function newFSM(initialState)
  return {
    current = initialState,
    states  = {},
  }
end

Definindo estados

Cada estado é uma tabela com funções opcionais enter, update e exit.

local fsm = newFSM("idle")
fsm.states.idle = {
  enter  = function(self) print("Enter idle") end,
  update = function(self, dt)
    if self.enemy then self:transition("chase") end
  end,
  exit   = function(self) print("Exit idle") end
}

Adicionando o estado de perseguição

O estado de perseguição segue o jogador e faz a transição para o ataque quando chega perto o suficiente.

fsm.states.chase = {
  enter = function(self) print("Chasing!") end,
  update = function(self, dt)
    if self.distToPlayer < 2 then
      self:transition("attack")
    elseif not self.enemy then
      self:transition("idle")
    end
  end
}

Função de transição

Uma transição chama exit no estado atual, altera o estado e então chama enter no novo estado.

function fsm:transition(newState)
  local cur = self.states[self.current]
  if cur and cur.exit then cur:exit() end
  self.current = newState
  local next = self.states[newState]
  if next and next.enter then next:enter() end
end

Atualizando a FSM

A cada ciclo do jogo, chame fsm:update(dt) para executar a lógica de atualização do estado atual.

function fsm:update(dt)
  local state = self.states[self.current]
  if state and state.update then
    state:update(dt)
  end
end

Máquinas de estados hierárquicas

Os estados podem conter FSMs aninhadas. Um estado pai trata do comportamento geral (combate ou patrulha), enquanto FSMs filhas tratam dos detalhes dentro de cada estado pai.

FSMs orientadas por dados

Defina as transições da FSM como tabelas de dados carregadas de arquivos de configuração. Isso permite que os designers ajustem a IA sem alterar o código.

local transitions = {
  idle  = {seeEnemy = "chase"},
  chase = {lostEnemy = "idle", nearEnemy = "attack"},
  attack = {enemyDead = "idle"},
}

Máquinas de estados empilhadas

Uma pilha de estados permite que estados temporários (por exemplo, "stunned") sejam colocados sobre o estado atual e que este seja retomado quando o estado temporário terminar.

Múltiplos agentes de IA

Cada entidade inimiga tem sua própria instância de FSM, portanto a IA de cada uma é executada de forma independente. Isso é fácil de fazer com tabelas e fechamentos de Lua.

Depurando uma FSM

Registre todas as transições durante o desenvolvimento. Uma tabela de rastreamento armazena {from, to, time} para a análise posterior do comportamento da IA.

Pergunta sobre FSM

O que aciona uma transição de estado em uma FSM?

Recapitulação: IA com máquinas de estados

As FSMs de Lua usam uma tabela de objetos de estado (enter/update/exit) com uma função de transição. Elas separam claramente as responsabilidades da IA, permitem um design orientado por dados e escalam de comportamentos simples de inimigos a árvores de comportamento hierárquicas complexas.

Perguntas Frequentes

A aula “Comportamento de IA com máquinas de estados” é grátis?

Sim — o texto completo de “Comportamento de IA com máquinas de estados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Comportamento de IA com máquinas de estados”?

Implemente inteiramente em scripts Lua a lógica de IA de inimigos baseada em FSM. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Comportamento de IA com máquinas de estados”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Sistemas de eventos em Lua
  2. Script baseado em componentes
  3. Comportamento de IA com máquinas de estados
  4. Configuração orientada por dados e recarga a quente
← Voltar para Lua Academy