Inteligencia artificial [tut]

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Inteligencia artificial [tut]

Mensagem por Esaucm98 em Seg 02 Jul 2012, 04:36

Um tutorial sobre inteligencia artificial simples, pra você usar em inimigos, ou amigos 'convencionais' dos seus jogos.. vamos lá.

FUNÇÕES:

Aqui estão as funções mais importantes para uma inteligencia artificial:

--distance_to_object(obj)--

Essa é a que eu mais uso, ela define a distancia para um certo objeto, por exemplo:

Código:
if distance_to_object(obj_player) > 100
  {
  move_towards_point(obj_player.x,obj_player.y,2;
  }
// Se a distancia para o objeto "obj_player" for maior que 100, mover em direção á obj_player com velocidade 2

isso é o mais básico de uma inteligencia artificial, seja plataforma ou camera de cima...

--choose--

Essa função escolhe determinados valores, pode-se citar vários exemplos, e é muito útil para programar i.a.
exemplo:

Código:
direction = choose(0,90,180,270);
speed = choose(1,2,3,4);

//escolhe os valores de direção 0,90,180 ou 270, respectivamente pra direita, cima, esquerda e baixo, muito útil para jogos com camera de cima e para NPC's que podem escolher livremente por onde andar , já na speed, escolhe a velocidade entre os determinados valores.

--Alarms--

Alarms são fundamentais para algo que precise de um delay, ou seja não executar ações de uma vez, os alarms funcionam assim: você faz um evento coloca as ações daquele alarme, e quando for pra "chamar" aquele alarm ou seja fazer ele ser executado, você coloca após quanto tempo (em steps) ele será executado por exemplo:

no evento alarm 0:

Código:
instance_create(obj_player.x,obj_player.y,obj_bala);
instance_create(obj_player.x,obj_player.yobj_fogo);

e no mouse global left button:

Código:
alarm[0] = 3;

// após 3 "steps" será executado o alarm 0

INTELIGENCIA ARTIFICIAL BÁSICA

Agora mão na massa, vou ensinar a fazer uma inteligencia artificial simples de um inimigo em 'camera de cima' logo após ensino em uma camera de plataforma.

--CAMERA DE CIMA--

Inteligencia artificial de um zumbi por exemplo:
Zumbis classicos, aqueles idiotas que só fazem correr pra cima de você tentar comer seu cérebro .. vamos lá:

vamos fazer um alarme 0, ele será para movimento aleatório..

alarm 0 :

Código:
direction = choose(0,90,180,270) ;
speed = choose(1,2,3);

// claro que pode adicionar várias outras direções pra ficar algo mais complexo e realista, ou simplesmente random(360)

isso vai deixar ele escolher qual a direção que quer ir e sua velocidade
agora vamos cria uma variável (nem é tão necessario mas vou fazer pra ficar algo mais organizado).

no create:

Código:
alerta = false

//define a variavel "alerta" que quer dizer se o zumbi viu o jogador ou não
no step:

Código:
if distance_to_object(obj_player) < 100
  {
  alerta = true
  }
else
  {
  alerta = false
  }

if alerta = false
  {
  alarm[0] = choose(1,10,20,30,40,50,60,70,100);
  }
else
  {
  move_towards_point(obj_player.x,obj_player.y,choose(1,2,3));
  }
//se a distancia diante do jogador for menor que 100 alerta será verdadeiro, caso contrário alerta é falso
// se alerta e falso o alarm 0 será escolhido entre os determinados valores (IMPORTANTE: tem que ter o 1 porque o step e executado a cada um FPS se não tiver o 1 o alarme nunca irá acontecer)
//se o alerta for true mover na direção do 'obj_player' e escolher velocidade entre 1,2 ou 3

isso ja e um bom começo para quem quer aprender a fazer uma inteligencia artificial bem simples.. para um jogo de zumbi ou algo parecido..


--PLATAFORMA--

no jogo plataforma deve ser a mesma coisa mas apenas com as direções 0 e 180 ( direita e esquerda respectivamente), mas para deixar um pouco mais além de apenas correr atraz do jogador, vamos fazer ele atirar, parar se estiver perto demais e andar se estiver longe demais:

vamos lá!

Create:

Código:

direita = false

alarm 0:

Código:
direction = choose(0,0,0,0,0,180,180,180,180);

//eu almentei o numero de parâmetros para que ele não mude de direção muito rapido e fique algo mais razoável

alarm 1:

Código:
instance_create(x,y,obj_bullet);
//cria a bala nas suas coordenadas

step:

Código:
//vou adicionar tambem um sistema para mudar de sprites dependendo da sua direção e velocidade!


if distance_to_object(obj_player) < 60
    {
    move_towards_point(obj_player.x,obj_player.y,2);
    alarm[1] = choose(1,10,10,20,20,30,60,60,60,60);
    }
if distance_to_object(obj_player) < 50
    {
    if obj_player.x > obj_soldado.x
        {
        direita = true
        speed = 0
        }
    if obj_player.x < obj_soldado.x
        {
        direita = false
        speed = 0
        }
    }
if direction = 0 and speed > 0
    {
    direita = true
    sprite_index = spr_soldado_correndo_para_direita
    }
if direction = 180 and speed > 0
    {
    direita = false
    sprite_index = spr_soldado_correndo_para_esquerda
    }
if direita = true and speed = 0
    {
    sprite_index = spr_soldado_parado_para_direita
    }
if direita = false and speed =0
    {
    sprite_index = spr_soldado_parado_para_esquerda
    }

// essa função faz com que o soldado inimigo mova-se contra você se estiver a uma certa distancia , e pare se estiver perto demais, atire se estiver lhe vendo ou ande aleatóriamente caso contrário
//tambem adicionei função para mudar de sprite, oque não vem ao tutorial, mas...

Nossa! quanto codigo pra pouca coisa, bom essa é a maneira que eu faço, e claro que existem maneiras mais curtas para poupar código e tempo.. mas postei aqui a que eu uso.

Inteligencia artificial pode ser feita de várias maneiras, postei aqui algo bem básico, so para quem ainda é iniciante e quer ter uma ideia de como fazer algo do tipo, acredito que isso seja útil a alguem..

I.A e algo bem variável, ou seja varia diante de cada situação, você precisa programar aquilo pra fazer determinadas ações diante de determinadas situações, então ela varia de acordo com seu jogo.

Foi um prazer compartilhar meu conhecimento com vocês! espero que gostem...

~Esaucm98 Cool

Esaucm98

Ranking : Nota D
Número de Mensagens : 275
Data de inscrição : 13/05/2012
Notas recebidas : D
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.legioncrafters.tk

Voltar ao Topo Ir em baixo

Re: Inteligencia artificial [tut]

Mensagem por jlevi900 em Qui 05 Jul 2012, 13:49

mano que obj_bullet é esse ?

jlevi900

Número de Mensagens : 61
Idade : 16
Data de inscrição : 02/07/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Inteligencia artificial [tut]

Mensagem por Esaucm98 em Qui 12 Jul 2012, 16:35

jlevi900 escreveu:mano que obj_bullet é esse ?

foi mal estava ausente por um tempo apos fazer esse tutorial e nao percebi,

obj_bullet=obj_bala
bullet=bala
bala=projetil etc..

Esaucm98

Ranking : Nota D
Número de Mensagens : 275
Data de inscrição : 13/05/2012
Notas recebidas : D
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.legioncrafters.tk

Voltar ao Topo Ir em baixo

Re: Inteligencia artificial [tut]

Mensagem por DavidSousa7474 em Sab 14 Jul 2012, 16:40

Esse tutorial vai dar-me jeito porque eu vou fazer npc e monstros no meu jogo de plataforma
Bom tutorial sorrindo2

DavidSousa7474

Ranking : Nota D
Número de Mensagens : 75
Data de inscrição : 07/12/2010
Notas recebidas : D
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Inteligencia artificial [tut]

Mensagem por Conteúdo patrocinado Hoje à(s) 11:45


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum