Há um artigo muito interessante sobre o assunto no Gamasutra: Erros inteligentes: como incorporar a estupidez ao seu código de IA , de Mick West.
Este artigo fala sobre uma IA de jogo de sinuca. Ao implementar uma IA desse tipo, é muito fácil fazer uma bola a cada tiro. Uma maneira simplista de tornar a IA menos "inteligente" é, como sugerido em outras respostas, adicionar um fator aleatório ao cálculo, fazendo com que a AI perca mais.
Mas existem duas grandes falhas com essa abordagem. Primeiro, é imprevisível. Para um jogador que joga no modo "Fácil", é inaceitável que a IA tenha "sorte". E se o seu fator aleatório fizer com que a IA dê um tiro ainda melhor, acertando uma bola mais valiosa ou fazendo um combo? Você não sabe o que vai acontecer, e ter sorte não deve ser uma opção para a IA em um modo fácil.
A outra falha é que o jogador tentará identificar um padrão nos comportamentos de IA. E com um simples fator aleatório, não há padrão. Mas isso não significa que o jogador não verá nenhum padrão, pelo contrário, de fato. Assim que a IA tiver sorte, o jogador verá uma estratégia em seu comportamento. No artigo, os jogadores estão reclamando sobre a IA jogar uma estratégia de posição. Quando há apenas um fator aleatório na precisão angular .
Do meu ponto de vista, depois de ler este artigo revelador, uma IA não perfeita nunca deve usar a randomização como um fator de simplificação. É exatamente o contrário. Uma IA mais fácil deve ser mais inteligente, mas tentando ajudar o jogador.
No artigo Exemplo de jogo de sinuca, a melhor opção para implementar uma IA de "modo fácil" era remover todos os fatores aleatórios e adicionar uma estratégia de posicionamento. A IA tentaria acertar as bolas para preparar um tiro fácil e impressionante para o jogador .
Dessa forma, o jogador pensará que teve sorte. E é isso que você espera de um jogo ao jogar com facilidade.
O conceito principal é evitar dar ao NPC "conhecimento perfeito".
Tenho certeza de que há muitos outros exemplos, talvez você possa nos contar sobre o seu jogo e podemos ser mais específicos :-)
fonte
Uma maneira rápida de tornar uma IA perfeita combatível é fazê-la tomar decisões imperfeitas, adicionando algum 'ruído' às suas entradas ou saídas. Por ruído, quero dizer alguns fatores aleatórios.
Aqui está um pequeno exemplo de saída:
Aqui estão algumas idéias para entrada:
Uma coisa óbvia a ser levada em consideração é a velocidade da IA. Na maioria dos jogos, as IAs podem reagir MUITO mais rápido que os seres humanos (especialmente nos combates) e fazer multitarefa aparente (muito visível nos jogos RTS). Portanto, você deve agir de acordo com isso, mantendo a IA um pouco lenta (talvez de forma adaptativa) e limitando a quantidade de coisas que ela pode fazer em um determinado período de tempo (ou seja, uma ação a cada meio segundo).
Espero que isso ajude e boa sorte!
fonte
É difícil dar uma resposta diretamente útil sem saber exatamente o que você está tentando fazer.
Tenho duas coisas a dizer sobre o assunto que podem ajudá-lo.
A primeira coisa (e essa é de longe a mais importante), se você está tentando fazer o inimigo parecer mais interessante e humano, suas táticas de combate são irrelevantes. O truque para fazer os jogadores "acreditarem" que um inimigo está vivo é usar animação, sons e pequenos detalhes para implicar o comportamento humano. A IA perfeita pode dobrar a esquina, ver um jogador e atirar. Uma IA humana pode dobrar uma esquina, ver um jogador, ter um olhar surpreso no rosto e gritar alarmada e disparar. O primeiro parece robótico. O segundo parece humano. Ambos estão usando IA idêntica em todos os aspectos, exceto na inserção da animação antes do disparo (ou, para manter o comportamento tático igual durante o disparo).
Segundo, evite aleatorizar. Os jogadores não apreciam isso tanto quanto os designers querem pensar que vão. Os jogadores não veem "o computador gerou 1 em 100, seguido por 5, 3 e 4; portanto, os fatores de erro para as quatro últimas fotos foram de apenas 1%, 5%, 3% e 4%, e isso é por que você morreu em meio segundo nesta rodada. " Os jogadores apenas veem inimigos que às vezes erram demais e outras vezes os acertam repetidamente sem motivo discernível, o que é incrivelmente frustrante. Um bom design de jogo é basicamente sobre a criação de padrões que os jogadores humanos podemobserve, aprenda e bata, e obtenha o sucesso do jogador com base em seu próprio julgamento, habilidades e intuição, em vez de determinar se o jogador teve sorte. O desejo de randomizar vem da experiência com jogos de mesa e jogos de azar, ambos meios incrivelmente diferentes dos videogames (e o que funciona em um meio geralmente não faz sentido em outro).
fonte
Lembro que no nosso curso de IA na faculdade havia um tópico sobre tornar a IA mais "humana" e menos perfeita. Isso foi há muitos anos, então eu me lembro de alguns pontos do topo da minha mente.
É claro que esses são apenas conselhos gerais que devem ser estudados e testados para cada caso e podem de fato fazer sua IA parecer ainda mais artificial do que o pretendido. No entanto, acho que eles são um bom ponto de partida.
fonte
Acabei de ver isso aparecer e queria compartilhar uma ideia que usei no passado.
Digamos que o personagem tenha três jogadas e cada uma seja pontuada, uma pontuação maior é uma jogada melhor. (Outras respostas falam sobre adicionar ruído à criação dessa pontuação.)
Resuma o total de pontos (100)
Tire o status de inteligência do personagem do valor máximo possível para esse status (digamos 60 de 100).
Gere um número aleatório entre 0 (ou algum outro andar) e a taxa de inteligência (0,6), multiplicada pelo total de pontos (100). No nosso exemplo, digamos que o resultado seja 45.
Agora você começa a subtrair os movimentos ruins desse valor até atingir zero. (Subtraia em ordem.)
Primeiro, consideramos o feitiço Ice, que obteve 20. 45 - 20 = 25. Como está acima de zero, jogamos fora o feitiço Ice.
Segundo, olhe para o ataque com uma espada, no valor de 30 pontos. 25-30 = -5. Atingimos nosso limiar, então escolhemos o ataque com uma ação de espada.
Neste sistema, um personagem com pouca inteligência não escolherá a melhor jogada. E um personagem com alta inteligência geralmente escolhe a melhor jogada. (Neste exemplo, um personagem com inteligência perfeita escolhe a melhor jogada 50% do tempo.)
Adicionar um mecanismo de piso ao número aleatório aumentará a chance de melhores movimentos serem selecionados.
fonte