I.A TopDown

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

I.A TopDown

Mensagem por Gonzo em Seg 18 Jun 2012, 12:57

oi gente.. uma vez eu vi uma engine de topdown bem feitinha era tipo assim..
quando vc ia para cima do adversário ele se esquivava , mais ele tambem atacava , e a inteligencia artificial era muito real, é uma pena que eu não consiga mais achar essa engine, se alguem souber fazer essa I.A , agradeço e já dei uma procurada aqui no forum, mais a I.A não é boa, vlw Like a Star @ heaven

Gonzo

Número de Mensagens : 927
Data de inscrição : 29/05/2012
Reputação : 33
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por saim em Seg 18 Jun 2012, 14:43

Inteligência artificial foi o tema do primeiro desafio. O meu jogo foi feito open-source. Você pode baixá-lo no tópico de resultados do concurso. O jogo em si é meio idiota, mas o princípio do funcionamento da engine é interessante, é uma variação da máquina de estados finitos que, por levar em conta a posição do jogador, é mais honesta do que uma que levasse em conta as entradas de dados.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por Gonzo em Seg 18 Jun 2012, 14:52

saim

pede pra alguem arrumar o link, pq ta fora do ar, vlw pelo toque Smile

Gonzo

Número de Mensagens : 927
Data de inscrição : 29/05/2012
Reputação : 33
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por saim em Seg 18 Jun 2012, 15:29

Ish, lascou... Agora que me lembrei, a inscrição naquele concurso era feita colocando os arquivos na pasta do Pedro. Na minha conta do dropbox, mesmo, não coloquei nada...
Olha, eu ainda tenho os objetos aqui. Vou te passar o código da IA, mas não estou conferindo se está tudo comentado ou se existem globais que requerem contextuação. Se precisar de qualquer explicação, estamos aí!
objIA:
object_set_sprite(argument0, argument1);

object_event_add(argument0, ev_create, 0, '
//general variables
initialHealth = 100;
Health = initialHealth;
initialAmmo = 20; //munição inicial
ammo = initialAmmo; //munição
meleDmg = 5; //dano manual (multiplicar por velocidade)
meleRng = 82; // alcance, em pixels, do dano manual
shotDmg = 15; //dano dos tiros
shotTime = 25; //tempo entre os tiros
shotLife = 25; //tempo ede vida dos tiros
shotSpeed = 6; //tempo ede vida dos tiros
dire = 0; //direção
angSpeed = 4; //velocidade angular
Speed = 4; //velocidade linear
atrict = 0.9; //atrito (multiplicador)
maxSpeed = 6; //velocidade máxima
side = choose(0, 1, -1); //1 = direita, -1 = esquerda
alarm[0] = 45; //atualiza o side


//state variables
var i; i = 0;
st_aiming = i; i += 1;
st_shooting = i; i += 1;
st_hitting = i; i += 1;
st_defending = i; i += 1;
st_hitRange = i; i += 1;
st_hitMele = i; i += 1;
state_index = 0;
state_time = 0;

//gameplay variables
enemy = objNinjPl;
aimDir = 0;
aimDist = 0;
')

object_event_add(argument0, ev_alarm, 0, '
side = choose(0, 1, -1); //1 = direita, -1 = esquerda
alarm[0] = 45; //atualiza o side
')

object_event_add(argument0, ev_step, 1, '
//vira pro inimigo
aimDir = point_direction(x, y, enemy.x, enemy.y);
aimDist = point_distance(x, y, enemy.x, enemy.y);
var angDiff;
angDiff = ((((aimDir - image_angle) mod 360) + 540) mod 360) - 180;
image_angle = median(image_angle, image_angle + sign(angDiff) * angSpeed, image_angle + angDiff);

if (!paused){
event_perform(ev_trigger, state_index);
state_time += 1;
}
')

object_event_add(argument0, ev_trigger, 0, '
//st_aiming
if state_time >= 30{
if (aimDist > meleRng * 1.5){
state_index = st_shooting;
state_time = 0;
}
else {
state_index = st_hitting;
state_time = 0;
}
}

var incoming;
incoming = false;
if (instance_exists(objShuriken)){
with(objShuriken){
if (direction == point_direction(x, y, other . x, other . y)){
incoming = true;
}
}
}
if (incoming == true){
state_index = st_defending;
state_time = 0;
}

if (side != 0){
x = median(0, x + lengthdir_x(Speed, image_angle + 90 * side), room_width) ; y = median(0, y + lengthdir_y(Speed, image_angle + 90 * side), room_height);
}
')

object_event_add(argument0, ev_trigger, 1, '
//st_shooting
if (state_time == 1){
if (ammo > 0){
with (instance_create(x + lengthdir_x(51, image_angle - 43.5), y + lengthdir_y(51, image_angle - 43.5), objBala)){
direction = other . image_angle;
image_angle = direction;
Speed = other . shotSpeed;
alarm[0] = other . shotLife;
damage = other . shotDmg;
}
ammo -= 1;
}
else {
state_index = st_hitting;
state_time = 0;
}
}

if (state_time == shotTime){
state_time = 0;
}

if (ammo < initialAmmo / 2 || aimDist > shotLife * shotSpeed){
x = median(0, x + lengthdir_x(Speed, image_angle), room_width); y = median(0, y + lengthdir_y(Speed, image_angle), room_height);
}

if (aimDist <= meleRng * 1.5){
state_index = st_hitting;
state_time = 0;
}

if (side != 0){
x = median(0, x + lengthdir_x(Speed, image_angle + 90 * side), room_width) ; y = median(0, y + lengthdir_y(Speed, image_angle + 90 * side), room_height);
}
')

object_event_add(argument0, ev_trigger, 2, '
//st_hitting
if (aimDist > (sprite_width + 5)){ //seria 2 * (sprite_width / 2)
if (ammo < initialAmmo / 2){
x = median(0, x + lengthdir_x(Speed, image_angle), room_width); y = median(0, y + lengthdir_y(Speed, image_angle), room_height);
}
else {
x = median(0, x - lengthdir_x(Speed, image_angle), room_width); y = median(0, y - lengthdir_y(Speed, image_angle), room_height);
if (point_distance(x, y, enemy.x, enemy.y) > meleRng * 1.5){
state_index = st_shooting;
state_time = 0;
}
}
}
if (aimDist <= meleRng && state_time >= 20){
with (instance_create(x, y, objCacete)){
image_angle = other . image_angle + 90;
damage = other . meleDmg;
creator = other;
}
state_time = 0;
}
')

object_event_add(argument0, ev_trigger, 3, '
//st_defending
var incoming;
incoming = false;
if (instance_exists(objShuriken)){
with(objShuriken){
if (direction == point_direction(x, y, other . x, other . y)){
incoming = true;
}
}
}
if (incoming == false){
state_index = st_aiming;
state_time = 0;
}

if (side != 0){
x = median(0, x + lengthdir_x(Speed, image_angle + 90 * side), room_width) ; y = median(0, y + lengthdir_y(Speed, image_angle + 90 * side), room_height);
}
')

object_event_add(argument0, ev_trigger, 4, '
//st_hitRange
if instance_exists(objCacete){
with(objCacete){
instance_destroy();
}
}
if (state_time == 10){
state_index = st_aiming;
state_time = 0;
}
')

object_event_add(argument0, ev_trigger, 5, '
//st_hitMele
if (state_time == 1 || state_time == 2){
x -= lengthdir_x(Speed * 10, image_angle); y -= lengthdir_y(Speed * 10, image_angle);
}
if (state_time == 15){
state_index = st_aiming;
state_time = 0;
}
')

object_event_add(argument0, ev_draw, 0, '
draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, c_white, 1);
draw_sprite_ext(sprGun, 0, x, y, image_xscale, image_yscale, image_angle, c_white, 1);
draw_rectangle_color(10, 10, 10 + 100, 30, $000088, $000044, $000044, $000088, 0);
draw_rectangle_color(10, 10, 10 + 100 * Health / initialHealth, 30, $004400, $008800, $008800, $004400, 0);
var i;
for(i = 0; i < initialAmmo; i +=1){
draw_rectangle_color(10 + 5 * i, 35, 13 + 5 * i, 45, $000000, $000000, $000000, $000000, (ammo <= i))
}

')

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por Gonzo em Seg 18 Jun 2012, 16:15

saim

saim, rss MIM só queria a I.A da cpu, mais vlw

Gonzo

Número de Mensagens : 927
Data de inscrição : 29/05/2012
Reputação : 33
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por moisesBR em Seg 18 Jun 2012, 17:15

hum sain. acho que eu baixei essa engine.... só lembre o nome que procuro aqui e upo pra ela!

Mina, a propósito, vc viu minh IA? assinatura. mas se o problema é o 4shared dou um jeito

Edit:
Ops! nao vi direito "IA top view!" por isso: strike, mas queria opinar mas vai que eu tenha aqui e nao sei?

No mais estou trabalhando arduamente nisso! Mina, acho que vale a pena vc dar uma olhada. Só pra vcs saber: to tentando fazer a IA como a do Metal gear solid!!!

moisesBR

Número de Mensagens : 873
Idade : 40
Data de inscrição : 24/10/2009
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://inprovise.blogspot.com/

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por Gonzo em Seg 18 Jun 2012, 17:38

moisesBR não vi sua I.A! vou dar uma procurada pra ver se acho..vlw

Gonzo

Número de Mensagens : 927
Data de inscrição : 29/05/2012
Reputação : 33
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por saim em Ter 19 Jun 2012, 08:21

Mina do Rock escreveu:só queria a I.A da cpu
Foi o que eu postei. Onde esta escrito "object_event_add", você coloca o código dentro do evento correspondente. É que eu fiz o jogo com arquivos externos, por isso está com essa sintaxe estranha, mas é a mesma coisa.

moisesBR escreveu:hum sain. acho que eu baixei essa engine.... só lembre o nome que procuro aqui e upo pra ela!
Era o "Tira vs Ninja".

@Mina do Rock: Depois eu fiquei pensando, acho que nada do que postarmos aqui vai te atender completamente, porque só fizemos os jogos pensando em situações específicas. Acho que o mais indicado seria você entender como funciona uma IA e fazer a sua, personalizada. Basicamente, você vai ter que definir exatamente como quer que a personagem reaja a cada situação (todas as situações possíveis devem ser previstas) e traduzir isso em código. Vai ter que escrever muito, mas é mais trabalho braçal do que mental.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: I.A TopDown

Mensagem por Conteúdo patrocinado Hoje à(s) 22:52


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