O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Programando #3 - Inteligência Artificial

Iniciado por Raizen, 10/03/2015 às 09:21




[box class=information]
Programando (#3) é um quadro que traz dicas e macetes de como programar tanto em Ruby/RGSS quanto em eventos, sendo os quadros pares programação em eventos, e os ímpares em Ruby/RGSS, hoje mesmo impar, será mesclado, o quadro vai trazer um pouco de cada "linguagem".
[/box]

[box class=titlebg2]
Inteligência Artificial
[/box]
A inteligência artificial é estudada há anos, aproximadamente desde 1940, a verdadeira I.A como vou chamar daqui para frente, ainda não foi alcançado e há muitas controvérsias se deve ou não ser feito(basta assistirem exterminador do futuro para ter uma noção do perigo). Essa inteligência artificial seria a capacidade de além de tomar decisões, aprender com elas e se modificarem, em relação a codificação, um software que modifique o seu próprio código. Dito isso, há dois tipos de modos de se programar algo semelhante a uma I.A em seu jogo, um software que tome decisões e/ou um que aprenda conforme "jogue", os 2 casos podem ser feitos aqui, e vou explicar como.

[box class=titlebg2]
I.A nos jogos atuais
[/box]
   O que muita gente não sabe, é que mesmo nos jogos atuais, a I.A é pouco explorado, e apenas utilizada em alguns poucos jogos. Jogos de estratégia, tabuleiro e cartas são os mais importantes para terem I.A, porém ter I.A realmente faria diferença em um jogo como RPG?

   A resposta é sim! Claro, o fato atual é que para compensar a falta de I.A nos RPGs, nós e as grandes empresas fazemos inimigos com muito mais vida e bem mais fortes que o jogador para balancear a falta de raciocínio do mesmo, isso também é visto em hack n' slash, side-scrollers e vários outros jogos em que o adversário simplesmente solta golpes aleatórios torcendo que algum acerte.

   A realidade é que I.A não é tão complicado para implementar quanto aparenta, mas que poucos utilizam em seus jogos, por isso vou dar uma breve explicação de como aplicar I.A na criação de jogos. Existem dois tipos principais na criação de I.A, a primeira é a tomada de decisão, e a segunda é a aprendizagem.


[box class=titlebg2]
Tomada de decisão
[/box]
  Um modo de implementar I.A em algum npc(personagem não jogável), é simplesmente utilizando condições, e aqui vai alguns exemplos:
Um side-scroller ou hack n' slash clássico
Se personagem tiver ataques de longe
Então buscar aproximação para ataques de curta distância

Ou então
Se personagem pular
Então Utilizar ataques aéreos

Esse é um modo bem simples de I.A, a ação e reação, quando o jogador tiver uma ação, logo o inimigo terá uma reação. Como podem ver esse tipo de ação e reação é bem simples de ser aplicado em um jogo, mas a verdadeira I.A entra quando temos muitas escolhas para serem feitas, e ai entra a chamada Árvore de Decisão Que pode ser visto abaixo



Pela imagem é possível ver que há mais condições inclusas na I.A, e que pode ser adicionadas muitas outras que destrincham para causar a reação mais adequada.

Existe também o mapeamento de decisões, o mapeamento é utilizado muito em jogos de cartas e tabuleiros, abaixo um exemplo de um jogo da velha,
Em um jogo da velha existem 9 possíveis jogadas menos os campos já preenchidos, logo podemos fazer uma I.A da seguinte maneira.

Vamos simular um tabuleiro do seguinte modo.


E a próxima jogada é do npc, ele tem (9-4) jogadas possíveis, e em cada jogada deve haver uma prioridade na árvore de decisão, as prioridades para um jogo da velha podem ser feitas da seguinte maneira.
prioridade 0 - vencer o jogo(quando a jogada vai fazer com que o NPC vença o jogo)
prioridade 1 - defender a vitória do jogador
prioridade 2 - preparar uma vitória
prioridade 3 - jogada aleatória

Dito isso ele vai ver cada jogada possível dele e ver se encaixa na prioridade 0, caso não, move para a prioridade 1... e assim vai.
Esse é o principio da árvore e tomada de decisão, isso pode ser expandido para praticamente qualquer jogo, desde puzzles a RPGs.


[box class=titlebg2]
Aprendizagem
[/box]
  Muito mais complexo de se implementar, criar uma aprendizagem para um npc é um modo muito eficiente de I.A. A partir da aprendizagem é feito a tomada de decisão com base no que o npc aprendeu, o modo mais usual das empresas de game utilizar esse modo de inteligência é criar um banco de dados que contém todo o aprendizado do NPC. Basicamente ele utiliza os dados do banco como a árvore de decisão, um exemplo bem clássico de uma I.A de aprendizagem é o famoso akinator,
http://pt.akinator.com/
O akinator faz as perguntas com base nas respostas anteriores, se você disser que busca um personagem fictício, a próxima pergunta pode muito bem ser se é de um desenho animado por exemplo. Isso também pode ser expandido para o RPG e outros jogos também, por exemplo se um certo ataque atingir mais o jogador, então priorizar a utilização desse ataque, ou então se um personagem utiliza sempre um ataque frontal, evitar ficar na frente do personagem.


[box class=titlebg2]
Concluindo
[/box]
[box class=windowbg3]
  Chegamos ao fim de Programando #3.  Espero que tenham gostado dessa aula, ela foi bem focada em como dar um diferencial ao seu jogo implementando a inteligência artificial e como fazer isso, aguardem as próximas matérias! :clap: [/box]

Você não merece palmas, Raizen. Merece o Tocantins inteiro.
Ótima aula. Ótimo quadro. Ótimas imagens.
Em Lifes, estou trabalhando com IA.
Esperarei o próximo quadro.
Essa aula me foi útil!
:clap:

Gostei bastante da aula vai me ajudar muito ^^
Mesmo estando meio afastado das comunidades, continuo com o maker e estava precisando de uma aula dessas :)
boa aula Raizen-senpai  :ok:
:linha3:
01110111 01101001 01100011 01100011 01100001
:linha3:

Citação de: Nandikki online 10/03/2015 às 12:43
Você não merece palmas, Raizen. Merece o Tocantins inteiro.
Ótima aula. Ótimo quadro. Ótimas imagens.
Em Lifes, estou trabalhando com IA.
Esperarei o próximo quadro.
Essa aula me foi útil!
:clap:
Vlws manolo :D, esse demorou a valer, mas já tenho algumas ideias de como fazer a próxima aula. Qualquer coisa só chamar man, vlws por ter lido e acompanhado.

Citação de: Prand online 10/03/2015 às 13:54
Gostei bastante da aula vai me ajudar muito ^^
Mesmo estando meio afastado das comunidades, continuo com o maker e estava precisando de uma aula dessas :)
boa aula Raizen-senpai  :ok:
Opa grande Prand :), faz um bom tempo que não te vejo, espero que apareça ativo de novo, de verdade x).

Um bom tema a se tratar. Isso me lembra que muitos simplesmente ignoram a possibilidade de programar tropas inteligentes mesmo em sistemas de batalha por turnos apostando apenas nos valores definidos no database para cada monstro integrante no grupo.

Para determinados problemas desenvolver uma I.A. razoavelmente forte é bem uma questão de definir condições e prever o estado do jogador. Só que nesse sentido alguns problemas, as vezes até praticáveis como o caso do jogo da velha, podem ser incrivelmente complexos. Aprecio muito as I.A's que se baseiam em buscas para resolução de problemas considerados intratáveis definindo apenas condições. Gerar um lance, uma jogada, um movimento com base no estado atual de determinado jogo dá um outro sentido ao poder real de uma IA.

A capacidade de criar algo capaz de te vencer jogando de igual pra igual com você também é assustadora. Essa busca por poder no RM tem me trazido resultados satisfatórios nesse aspecto.

Citação de: Shiroyasha online 10/03/2015 às 20:11
Um bom tema a se tratar. Isso me lembra que muitos simplesmente ignoram a possibilidade de programar tropas inteligentes mesmo em sistemas de batalha por turnos apostando apenas nos valores definidos no database para cada monstro integrante no grupo.

Para determinados problemas desenvolver uma I.A. razoavelmente forte é bem uma questão de definir condições e prever o estado do jogador. Só que nesse sentido alguns problemas, as vezes até praticáveis como o caso do jogo da velha, podem ser incrivelmente complexos. Aprecio muito as I.A's que se baseiam em buscas para resolução de problemas considerados intratáveis definindo apenas condições. Gerar um lance, uma jogada, um movimento com base no estado atual de determinado jogo dá um outro sentido ao poder real de uma IA.

A capacidade de criar algo capaz de te vencer jogando de igual pra igual com você também é assustadora. Essa busca por poder no RM tem me trazido resultados satisfatórios nesse aspecto.
Exact!

Sei que você já mexeu com I.A, e eu sempre achei essa a parte da programação em si a mais divertida. É que eu não tenho muito tempo por dia, eu queria preparar um joguinho da velha que fosse impossível vencer, já que não é uma lógica muito complicada para isso, mas de qualquer modo, eu consegui fazer algo parecido no Triple Triad, que na verdade ainda é uma I.A média. Vlws ai man, qualquer coisa estamos por aqui  :ok:

Um texto realmente muito bom de se ler. Eu estive trabalhando com I.A em uns tempos, mas decidi apenas fazer o método das reações, já que não possuía muita paciência para fazer um banco de dados nem a necessidade disso para o que eu estou fazendo.
No mais, é bem útil para jogos de simulação, que a pessoa aprenda isso.
Ótimo texto.