Conectar-se
Quem está conectado
19 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 18 Visitantes

JPlays

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
Data de inscrição : 29/05/2012
Número de Mensagens : 929
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 33
Ver perfil do usuário

I.A TopDown

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
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: I.A TopDown

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.
Data de inscrição : 29/05/2012
Número de Mensagens : 929
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 33
Ver perfil do usuário

Re: I.A TopDown

em Seg 18 Jun 2012, 14:52
saim

pede pra alguem arrumar o link, pq ta fora do ar, vlw pelo toque Smile
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: I.A TopDown

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))
}

')
Data de inscrição : 29/05/2012
Número de Mensagens : 929
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 33
Ver perfil do usuário

Re: I.A TopDown

em Seg 18 Jun 2012, 16:15
saim

saim, rss MIM só queria a I.A da cpu, mais vlw
avatar
Data de inscrição : 24/10/2009
Número de Mensagens : 873
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 14

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://inprovise.blogspot.com/

Re: I.A TopDown

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!!!
Data de inscrição : 29/05/2012
Número de Mensagens : 929
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 33
Ver perfil do usuário

Re: I.A TopDown

em Seg 18 Jun 2012, 17:38
moisesBR não vi sua I.A! vou dar uma procurada pra ver se acho..vlw
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: I.A TopDown

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.
Conteúdo patrocinado

Re: I.A TopDown

Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum