Novo na criação de IA - por onde começar? [fechadas]

58

Eu sou novo na programação de jogos e estou tentando fazer um jogo espacial de cima para baixo em 2D com duas naves espaciais que lutam entre si. Estou indo bem com a nave espacial controlada pelo usuário, mas não tenho idéia de como começar a programar uma IA. Alguns métodos / padrões são melhores para esta situação? Onde eu começaria?

jle
fonte
11
Aqui estão meus slides sobre IA do curso que fiz: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa
4
declarações if. muitos deles.
Deceleratedcaviar

Respostas:

27

Se esta é sua primeira vez desenvolvendo IA, você não precisa se preocupar com coisas como padrão de estado, matemática comportamental ou até mesmo obter um livro sobre o assunto.

Você pode literalmente se safar com algo assim:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

O principal aspecto da correção da IA ​​é pensar em quais comportamentos você deseja que o personagem tenha e como isso pode ser alcançado de forma realista. Portanto, para um inimigo básico da espaçonave, eu imaginaria que as possíveis ações que ele poderia realizar seriam:

  • Mover-se
  • Fogo
  • Fugir

E quando essas ações poderiam acontecer?

  • Mover-se - nada mais a fazer
  • Fogo - Quando vejo um inimigo
  • Fugir - Quando estou com pouca saúde / Quando estou pegando fogo / etc

Depois de fazer isso devido ao baixo número de "estados" em que seu personagem pode estar, você pode usar uma declaração if simples como a acima. Eu recomendaria que você analise os comportamentos de direção, pois esses são comportamentos muito simples de implementar e podem resultar em um movimento realmente bonito.

Mais informações podem ser encontradas aqui: http://www.red3d.com/cwr/steer/
E eu recomendaria definitivamente o livro de Mat Buckland, Programming Game AI By Example , especialmente quando você está começando.

Quando você estiver realmente confortável com isso, sugiro examinar os padrões de estado e estratégia.

O ponto é começar pequeno e simples. Não se preocupe com todos esses termos, para que todos fiquem discutindo sobre FSMs e padrões de design e o que for. Projete e construa antes de tudo, depois se preocupe em como melhorá-lo usando métodos ou padrões existentes.

Espero que ajude!

Ray Dey
fonte
@Fuu Felicidades para a edição companheiro :)
Ray Dey
9

Você pode consultar o OpenSteer e a documentação dos comportamentos de direção que o acompanha. O código-fonte não é de nível iniciante, mas os conceitos por trás dele devem lhe dar boas idéias.

AShelly
fonte
As pessoas usam o opensteer em jogos ou é mais para simulações?
jle
Estou pelo menos tentando usá-lo em um jogo em desenvolvimento. Está funcionando bem para mim até agora. Acredito que o autor tenha desenvolvido muito dele enquanto trabalhava para o grupo Playstation da Sony - é provável que tenha entrado em alguns jogos. MobyGames o lista nos créditos de JohnMadden Football e um dos jogos Leisure Suit Larry.
ASHelly
O FreeOrion está usando o OpenSteer em seu mecanismo de combate tático.
Mike Strobel
11
+1 por mencionar o opensteer. Se você quiser ver alguns ótimos exemplos de composição de comportamentos muito simples, para formar algo que pareça muito complexo e intrincado. Comportamentos de direção do checkout! Google, "Boids" e veja alguns usos interessantes. Não é acalmar o que você quer, mas vai mostrar-lhe que, de simplicidade vem complexidade
onedayitwillmake
9

Você pode querer olhar para o padrão de design da estratégia . Escreva essencialmente as mesmas estratégias básicas de como os navios se comportarão:

  • Aproxime-se do alvo
  • Alvo de ataque
  • Fugir do alvo
  • Avance para power-ups
  • Use power-ups

Então você usará a lógica (máquinas de estado) para escolher entre essas estratégias. Por exemplo: Se os escudos dos navios caírem abaixo de 50%, corra para longe do alvo e vá em direção a itens de poder / cura e assim por diante.

Bryan Denny
fonte
11
então, a cada vez que passa pelo ciclo do jogo, ele decide qual dessas 'estratégias' tem prioridade e depois a executa?
jle
@ jle Praticamente. Portanto, cada uma de suas estratégias será dividida em suas próprias classes, mantendo seu código organizado.
Bryan Denny
7

Posso sugerir que você compre o livro Inteligência Artificial para Jogos de Ian Millington - é excelente! :) http://www.ai4g.com/

O código fonte está na licença Github - MIT.

Obviamente, se você não estiver usando C / C ++, isso poderá ser menos relevante.

Mas realmente uma introdução incrível ao mundo da estupidez / inteligência artificial.

O que você precisará é de máquinas de direção e de estado. Para iniciantes.

jacmoe
fonte
2

Alguns conselhos práticos se você optar por máquinas de estado: cuidado com o megastate.

É tentador ter um estado de "fuga" que lida com a definição de uma posição para a qual fugir, definindo uma velocidade de alvo alta, limpando todos os alvos etc. É muito melhor ter muitas máquinas de estado, cada uma controlando um ou poucos controles de navio - por exemplo, um máquina de estado que lida com a seleção de uma posição de destino, uma que lida com armas etc.

Isso pode parecer estúpido, pois você teria que adicionar estados de fuga a cada máquina individual, mas como você está restrito a apenas uma ou duas saídas, seus estados acabam muito pequenos, portanto isso não deve ser um problema.

Além disso, como agora cada controle está sob controle individual, você pode selecionar uma posição de alvo de fuga enquanto ainda tem o estado de ataque controlando suas armas. Você pode esmagar um inimigo enquanto ainda conserva a potência do motor devido a um vazamento de líquido de arrefecimento. Você pode dirigir para evitar uma colisão enquanto ainda descarta contramedidas. Tudo isso seria impossível com uma única máquina de estado abrangente.

tenpn
fonte
2

Matemática Comportamental para Game AI

Adicionando este livro à lista de pontos de partida para aprender a programação de IA. Com seu foco na observação e implementação de comportamento, em vez de algoritmos de aplicação limitada, acredito que seja bem adequado à tarefa.

Jay Bell
fonte
1

Como criar AI é uma pergunta complicada, porque consiste em várias partes:

  • Você escolhe uma arquitetura / paradigma geral para sua IA. É baseado em scripts? Será que vai usar o planejamento? É um FSM simples ou você prefere BTs?
  • Em seguida, você aplica esses paradigmas com uma implementação / conjunto de ferramentas específico.
  • Agora, você tem opções de design de jogo, pois precisa pensar em comportamentos que sua arquitetura usará.

Outros pôsteres sugeriram ótimos livros e eu gosto dos AI4Games sugeridos por jacmoe, mesmo sendo bastante geral em partes (como muitos livros, o que é claro que é compreensível).

Obviamente, cada tipo de jogo tem suas necessidades específicas, e os jogos de arcade / atirador não precisam de arquiteturas complexas para suportar uma jogabilidade interessante. As libs de direção simples farão o trabalho como base desse comportamento e, em seguida, você adiciona detalhes para vários tipos de inimigos (alguns disparam periodicamente, outros disparam prevendo o movimento do jogador, outros giram para enfrentar o inimigo, outros podem coordenar seus ataques etc).

  • Eu acho que a melhor maneira de aprender sobre codificação de jogos (AI) é olhar muito bem, executando o código. Então, explore o ohloh.net e o github e procure projetos FOSS existentes!
  • Obviamente, você pode escolher a parte mais difícil e jogar um jogo existente (mas simples). Tente fazer engenharia reversa do comportamento e pense em "Como eu projetaria isso?". Claro, as dicas sempre ajudam, e é provavelmente por isso que você perguntou aqui no gamedev.SE!
  • Algo no meio é olhar também para os jogos de tiro existentes nos fóruns do GameMaker! Você pode encontrar muitos scripts simples que farão o truque! ;)
Astyanax
fonte
1

Pense no que você faz quando joga o jogo. Faça a si mesmo algumas perguntas.

  • Quais informações eu preciso para poder tomar uma decisão?
  • Quando reajo às mudanças?
  • Quais são meus objetivos de "longo prazo" nesta sessão de jogo em particular?

Então, o que eu faço é fazer com que a AI olhe para o campo de jogo e faça uma lista de possíveis ações ou movimentos que a AI poderia fazer com base nessas perguntas. Classifico e classifico esses movimentos com um "fator de inteligência". Então, é tão simples quanto escolher e executar um movimento / ação com base em alguma combinação de aleatoriedade e em qualquer nível de dificuldade que o jogador escolheu no início do jogo.

Depois de 500 milissegundos, faço novamente.

Ele não possui habilidades de aprendizado nem nada, mas com ajustes suficientes pode ser bastante convincente, o que realmente importa

Gagege
fonte