GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


Problema de IA

4 participantes

Ir para baixo

Problema de IA Empty Problema de IA

Mensagem por elicray Seg 24 Jan 2011, 18:29

Estou a tentar fazer um bomberman(um pouco diferente de um bomberman normal, mas não deixa de ser um bomberman), mas deparei-me com um problema: o inimigo...

Ele está "meio burro" pois acaba sempre por suicidar-se em menos de 20 segundos. Para tornar o inimigo mais desafiador, estou a tentar fazer com que ele se aperceba de quando está ao alcance de uma bomba e, quando isso acontece, ele foge. Infelizmente, não estou a conseguir por isso vim pedir aqui ajuda ;)

O meu problema actual, é mesmo não conseguir fazer com que ele identifique se está dentro do raio de fogo de alguem, e de onde vem...

Alguma dica?


Última edição por elicray em Dom 30 Jan 2011, 09:25, editado 1 vez(es)
avatar
elicray

Data de inscrição : 20/12/2010
Reputação : 0
Número de Mensagens : 109
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por mpirlo123 Seg 24 Jan 2011, 19:10

você faz esse código assim:

if distance_to_object (bomba_obj) < 50 "raio de fogo da bomba"
{
//codigo do que ele deve fazer
}

distance_to_object(bomba_obj): Ele vai comparar a distancia do objeto que chamou esse script, com o objeto que vc pois no argumento 0.

> : sinal "maior" se a distancia for maior que...50 "raio de fogo"

50: distancia...
mpirlo123
mpirlo123

Data de inscrição : 18/01/2011
Reputação : 0
Número de Mensagens : 13
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por Markituh Seg 24 Jan 2011, 19:22

Hmm... Sim, a estrutura que o cara acima lhe passou é correta. Mas você devia armazenar o raio numa certa variável, pois quando se pega o item que aumenta a potência o raio da bomba aumenta obviamente. Mas cara, no Bomberman de NES os inimigos eram burros mesmos, eles só voltavam quando colidia com a bomba. Pois se voltasse toda vez que detectasse o raio, seria impossível pegar ele, entendes? É mais viável você colocar para ele ir na direção contrária quando colidir com o objeto da bomba:
Código:
direction=!direction
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por mpirlo123 Seg 24 Jan 2011, 19:31

É verdade os inimigos eram burros mesmo,mas você poderia colocar para quando ele colidir com o raio da bomba ele ir na direção contrária, e então só daria para matá lo colocando uma bomba com grande alcance de fogo bem perto dele assim ñ daria tempo dele fugir.
mpirlo123
mpirlo123

Data de inscrição : 18/01/2011
Reputação : 0
Número de Mensagens : 13
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por Markituh Seg 24 Jan 2011, 19:35

Sim, sim, isso daria certo. Mas se o jogador encurralasse ele na parede ele iria ficar andando contra ela. Por que? Porque ela está desviando do alcance do raio. Portanto ainda acho que seria mais viável só virar ao colidir. Mas você que sabe cara, escolha a melhor forma que preferir.
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por elicray Seg 24 Jan 2011, 19:40

Quanto ao distance_to_object eu já tinha pensado nisso mas não retorna de onde vem o perigo, logo, não me serve...

Mas você devia armazenar o raio numa certa variável, pois quando se pega o item que aumenta a potência o raio da bomba aumenta obviamente.
Eu já tenho a var do alcance e o power up de aumentar o alcance, basicamente, já completei o raio

Mas cara, no Bomberman de NES os inimigos eram burros mesmos, eles só voltavam quando colidia com a bomba. Pois se voltasse toda vez que detectasse o raio, seria impossível pegar ele, entendes?
Quando eu modifiquei o codigo para ele so mudar de direcção quando batesse numa parede ou numa bomba ele durou aproximadamente 10 segundos... Soltou a bomba, foi contra a parede e, apesar da nova direcção ser aleatoria, como no inicio do jogo o espaço que se tem para movimento é pouco ele acaba sempre por morrer...

Eu queria apenas que ele não se suicida-se com tanta frequência, que se desviasse apenas das suas bombas

EDIT: Aqui está um bomberman bastante engraçado, os inimigos são desafiadores, dificeis de matar...
Bomb It
avatar
elicray

Data de inscrição : 20/12/2010
Reputação : 0
Número de Mensagens : 109
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por Markituh Seg 24 Jan 2011, 19:45

O espaço que se tem para movimento é pouco? Só é você fazer um bom uso do choose... Repetir um mesmo valor para assim este vir com mais frequência.
Código:
choose(obj_nada,obj_nada,obj_nada,obj_parede,obj_parede)
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por elicray Seg 24 Jan 2011, 19:48

Sim, eu estava planeando usar isso mais tarde (vi na engine de Bomberman que tem ca no forum e achei interessange) mas a taxa de suicidio continua a ser elevada
avatar
elicray

Data de inscrição : 20/12/2010
Reputação : 0
Número de Mensagens : 109
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por Markituh Seg 24 Jan 2011, 19:54

Tenta usar collision_line, se der colisão com a bomba, ele volta.
Código:
if collision_line(x,y,x+raio,y,obj_bomba,100,true)
{
direction=!direction
}
Aí se a linha de colisão colidir com o obj_bomba desde a posição x + o valor do raio, ele irá voltar. Repita o processo para as demais direções:
Código:
if collision_line(x,y,x+raio,y,obj_bomba,100,true)
{
direction=!direction
}
if collision_line(x,y,x-raio,y,obj_bomba,100,true)
{
direction=!direction
}
if collision_line(x,y,x,y+raio,obj_bomba,100,true)
{
direction=!direction
}
if collision_line(x,y,x,y-raio,obj_bomba,100,true)
{
direction=!direction
}
A sintaxe da collision_line é a seguinte:
Código:
collision_line(x1,y1,x2,y2,objeto,precisão,notme)
x1 e y1 são os pontos iniciais; x2 e y2 os pontos finais. Objeto é o objeto que está a ser verificado a colisão, precisão a precisão da linha. notme é para não contar o próprio objeto; true se sim, false se não. Tente este esquema, se não der certo avise.
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por elicray Seg 24 Jan 2011, 19:57

É capaz de resultar, amanha dou os resultados, eu sou português e não tenho os mesmos horários, estou meio cansado hoje...
avatar
elicray

Data de inscrição : 20/12/2010
Reputação : 0
Número de Mensagens : 109
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por saim Ter 25 Jan 2011, 15:41

Eu sugeriria diferente. Como existem vários jogadores e cada jogador tem uma bomba de raio diferente, sugiro uma collision_line com o tamanho da fase (room) e, no caso de colisão, checa pelo raio daquela bomba, especificamente. Dá pra colocar todos os 4 testes num "for", variando o ângulo.


Código:
linha=max(room_width,room_height)
//essas direções abaixo são pra ver se pode ir nelas.
direcao[0]=1 //0
direcao[1]=1 //90
direcao[2]=1 //180
direcao[3]=1 //270


Código:
var i, cont;
for (i=0;i<4;i+=1){
 direcao[i]=1
 na_reta=collision_line(x,y,x+lengthdir_x(linha,90*i),y+lengthdir_y(linha,90*i),obj_bomba)
 if na_reta //se tem alguma bomba no caminho
  if na_reta.raio_da_bomba>=point_distance(x,y,na_reta.x,na_reta.y) //se estou no raio da bomba
  direcao[i]=0 //não ir na direção da bomba
 if place_meeting(x,y,x+lengthdir_x(1,90*i),y+lengthdir_y(1,90*i),obj_parede)
  direcao[i]=0 //não ir na direção das paredes
 }
//agora cada direção tem 0 ou 1, variando se pode ir naquela direção ou não

cont=0 //verifica se alguma direção é possível
for (i=0;i<4;i+=1){
 cont+=direcao[i]}

//se cont=0, não tem pra onde ir, melhor aceitar a morte
if cont=0
 speed=0
 else //se cont não for 0, alguma direção tem que ser possível
 while (1){ //loop infinito até o break ser chamado
  dir=choose(0,1,2,3) //escolhe um valor aleatório
  if direcao[dir]=1{  //se a direção aleatória é permitida
  direction=direcao[dir] //vai na direção permitida
  break}
  }

Ainda assim, é possível have falhas, como:
- a collision_line pode encontrar uma bomba distante e o perigo estar numa bomba próxima, na mesma linha
- o suicídio talvez poderia ser evitado se fugir de uma bomba prestes a explodir, indo em direção a outra que acaba de ser disposta (o código não prevê tempos de explosão)
- no bomberman original, existe um upgrade que te permite jogar longe a bomba já disposta. O código não prevê essa opção.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Problema de IA Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por elicray Qui 27 Jan 2011, 15:13

Desculpem a ausência, o meu pc encrava várias vezes e de vez em quando não consigo vir cá ao fórum, que foi o que se sucedeu nos últimos dias

@Markituh
Obrigado pela ajuda, acho que com o collision_line talvez consiga melhorar a IA do inimigo

@Saim
Gostei da ideia do collision_line do tamanho da room, vou ver se depois consigo dar um edit no code para resolver o problema que apontas-te:
a collision_line pode encontrar uma bomba distante e o perigo estar numa bomba próxima, na mesma linha
avatar
elicray

Data de inscrição : 20/12/2010
Reputação : 0
Número de Mensagens : 109
Prêmios : Problema de IA Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Problema de IA Empty Re: Problema de IA

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos