Re: [lua-br] Ajuda programação inteligencia artificial em lua para jogo (ragnarok)

425 views
Skip to first unread message
Message has been deleted

Michel Braz de Morais

unread,
Sep 14, 2014, 1:21:44 PM9/14/14
to lua...@googlegroups.com
Fácil...
Utilize vetor (geometria analítica) para fazer o calculo.
Subtraia o vetor de posição vOwner de Owner e guarde em um novo vetor "norm".
Normalize o vetor "norm".

Agora basta atribuir o valor de vOwner multiplicando a distancia que voce quer pelo vetor normal e somando ao vetor de posição inicial (acredito que seja o próprio vOwner) .

+- assim:
vOwner  = Owner + norm * distancia

Aproveite a oportunidade para aprender um pouquinho...

No wiki link_vetor tem uma explicação bem legal sobre vetores...

Caso você não saiba.
Boa sorte.




att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

Em 14 de setembro de 2014 11:52, febap <fernand...@gmail.com> escreveu:
eu uso o comando : vOwnerX, vOwnerY = OwnerX, OwnerY 
Onde vOwnerX é para para onde a inteligência artificial manda o homonculus(homunculus é tipo um assistente) ir no eicho x(horizontal) e ownerX/ownerY é a posição do mestre , ou seja esse comando faz com que o homonculus sempre esteja onde o mestre está , porém eu queria que ele ficasse distante então mudei para vOwnerX, vOwnerY = OwnerX +7, OwnerY +7 , assim ele fica 7 células mais distante , só que com + 7 ele sempre fica mais a direita assim se eu for pra direita ele vai ficar +7 células a minha frente e se eu for a esquerda ele vai ficar + 7 células atrás , soque o objetivo é que ele fique sempre 7 células ATRAS . Alguém pode me ajudar a modificar esse comando pra ficar assim?

--
Lua BR - http://groups.google.com/group/lua-br
---
Você recebeu essa mensagem porque está inscrito no grupo quot;Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

febap

unread,
Sep 15, 2014, 5:39:33 PM9/15/14
to lua...@googlegroups.com
Analisando um pouco mais sua resposta e lendo sobre vetores , acho que não soube me explicar direito na pergunta agora que já expliquei como eu tava programando posso ta postando  reformulando ela de um jeito mais simples : 
Colocando a posição de vOwnerX(homunculus) = OwnerX(mestre) +7 , o homunculus fica sempre 7 células mais a direita na horizontal (claro porque x no plano cartesiano é horizontal e só de ter + ja diz que ele fica pra direita) , ou seja ,  como quero que ele fique atrás do mestre quando vou com o mestre pra esquerda já ta tudo certo pois ele fica mais a direita a  (pois a posição dele está definida como a do mestre + 7 ou seja ele fica seguindo por trás)  , agora quando vou pra direita por ta definido que o homunculus fica 7 para direita (ou seja +7) , ele termina ficando na frente do mestre (porque pra ele ficar atrás nesse caso teria que ser -7) e eu gostaria que ele ficasse  7 atrás sempre tanto quando vou pra direita quanto pra esquerda (basicamente oque gostaria é de usar +7 quando fosse pra esquerda e -7 quando fosse pra direita pra ele sempre ficar atras , mas não sei como faço pra colocar essas duas posições ao mesmo tempo para cada caso),enfim expliquei muito pra não cometer o mesmo erro de não explicar oque quero direito . 
Se puder me ajudar de novo fico muito grato .

Eric Chiesse

unread,
Sep 15, 2014, 6:28:17 PM9/15/14
to lua...@googlegroups.com
Como você sabe para qual lado o mestre está virado?

Usa isso para controlar o sinal da posição que vc deseja do assistente.


---
Eric
Message has been deleted

febap

unread,
Sep 15, 2014, 11:16:50 PM9/15/14
to lua...@googlegroups.com

Esse é o problema , se tivesse algo que indicasse quando o mestre ta virado pra direita ou pra esquerda eu atribuiria mas não tem , quer dizer deve ter mas não faço ideia de onde buscar pois só estou programando a Inteligencia do Homunculus , não a do mestre, O jogo que da base ao que to editando é o ragnarok, não sei onde buscar o código de movimento do mestre(no caso do char) , achei que ficaria legal usar o condicional if relacionado ao movimento do char (Owner) para indicar se o homonculus iria seguir pra direita ou pra esquerda , porem nesse jogo o char (mestre) sempre fica no eixo X,Y(0,0) ou seja sempre fica no meio da tela,não teria como indicar nos eixos pra qual lado ele ta indo , só teria se fosse pelo deslocamento na tela ou associando diretamente ao comando que faz ele ir pra direita ou esquerda(ou até associando diretamente as teclas do teclado de movimento), mas o jogo não é opensource , e eu sou meio leigo em programar só to conseguindo programar oque já fiz até agora porque to seguindo o modelo de outras inteligências artificias pra homunculus open source .  

Thiago S

unread,
Sep 15, 2014, 11:23:08 PM9/15/14
to lua...@googlegroups.com
Você pode usar geometria analítica, como sugeriu o Michel. Para
calcular a direção do vetor (ou seja, para onde o mestre andou), você
subtrai um vetor do outro, assim:
x = OwnerX - vOwnerX
y = OwnerY - vOwnerY

Depois, você precisa calcular o versor, que é um vetor de mesma
direção e sentido, só que de tamanho (distância) 1. Pra calcular o
versor, primeiro tem que calcular a norma:
norma = math.sqrt(x*x +y*y)

Depois divide o vetor pela norma:
versorX = x / norma
versorY = y / norma

Então é só multiplicar pela distância que você quer e subtrair do
vetor do mestre:
distancia = 7
vOwnerX = OwnerX - versorX * distancia
vOwnerY = OwnerY - versorY * distancia

2014-09-15 23:54 GMT-03:00 febap <fernand...@gmail.com>:
> Esse é o problema , se tivesse algo que indicasse quando o mestre ta virado
> pra direita ou pra esquerda eu atribuiria mas não tem , quer dizer deve ter
> mas não faço ideia de onde buscar pois só estou programando a Inteligencia
> do Homunculus , não a do mestre.

--
Thiago Skapata

Eric Chiesse

unread,
Sep 16, 2014, 12:23:42 AM9/16/14
to lua...@googlegroups.com
Se vc tiver acesso aos eventos de teclado dá pra criar uma variável global com a última direção e atualizar durante o callback. Mas não sei se essa é a melhor maneira. Aparentemente vc tem acesso a alguma API para fazer o seu plugin. Provavelmente ela tem mais coisa.

Agora se vc estiver rackeando só vc pode dizer o que está encontrando.

De qq modo vc precisaria passar mais informações para alguem poder ajudar. O jogo tem algum hacking guide ou documentação de api para extensão?



---
Eric

Eric Chiesse

unread,
Sep 16, 2014, 12:32:18 AM9/16/14
to lua...@googlegroups.com
Olhando rapidamente me parece que na conta abaixo norma==distancia.

Então se acompanhar as expressões vai ver que na prática nada foi feito.

Para saber a direção atual do mestre é preciso saber a posição anterior ou inferir a direção pelo evento de keypress.

Saber o vetor entre o mestre e o homunculus não ajuda muito.

---
Eric

Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.

febap

unread,
Sep 16, 2014, 8:46:54 AM9/16/14
to lua...@googlegroups.com
Vou tentar usar este codigo pra ver se funciona , Qual quer coisa posto um feedback aqui

febap

unread,
Sep 16, 2014, 8:53:05 AM9/16/14
to lua...@googlegroups.com
O codigo dele é fechado , e da Api acho que também , não estou usando plugin pra programar isso, mas é como se fosse , esta em um script com extensão ".lua" depois vou da uma procurada mais a fundo ,Acho que seria legal usar o Keypress mesmo, tem algum codigo pronto sobre Keypress em Lua pra eu estudar ?. 

febap

unread,
Sep 16, 2014, 2:06:47 PM9/16/14
to lua...@googlegroups.com
Ae o codigo do Michel e do Thiago Deu certo , o Único problema é que o homunculos só troca de posição depois de uma certa distância percorrida toda vez que muda de lado , mas ele vai pro lado certo ... se desse pra usar os eventos do teclado como Keypress pra fazer isso como o Eric disse ficaria ainda mais perfeito . Grato a vocês , se puderem me ajudar com o Keypress ainda mais grato , e grato pelo aprendizado .

Michel Braz de Morais

unread,
Sep 16, 2014, 8:54:28 PM9/16/14
to lua...@googlegroups.com
Não conheço o Jogo, mas meu palpite é que a função que você esta intervindo só é chamada quando a distancia entre o assistente e o mestre forem maior que uma variável (tipo 7 de distancia).
Para que assim o assistente só ande depois que o mestre se distancie o bastante para não ficar andando a cada pouquinho.
Palpite:
Tem com ler as variáveis do game?

De repente achar outra função que seja atualizada quando o mestre movimente!!

Mas que legal que conseguiu algum progresso já.

 

att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

Você recebeu essa mensagem porque está inscrito no grupo quot;Lua BR" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

febap

unread,
Sep 17, 2014, 10:17:29 AM9/17/14
to lua...@googlegroups.com
Achei , mas só vai funcionar melhor quando eu resumir os códigos , a Ai ta meio lerda pelo código acho que pelo acumulo de funções . Como disse sou meio lerdo em programação entendo o mais básico das operações e lógica , teria livros , apostilas ou até video aulas pra me indicar sobre programação pra jogos? Achei muito legal esse cálculo com vetor, tem alguma dica de pesquisa pra mim sobre assuntos que englobem programação e a aplicação de calculos mais avançados como esse ou  como conseguir códigos pra estudo?

Michel Braz de Morais

unread,
Sep 17, 2014, 6:11:41 PM9/17/14
to lua...@googlegroups.com
Olha... tem muita coisa sobre matemática para games no próprio google.
Mas tem que ver o que você precisa!
Eu gosto muito de livros por exemplo tem esse que achei bem interessante:
Trigonometry-Dummies

esse outro Essential-Mathematics-Games-Interactive-Applications

Tem também sites como pontov.com.br que além de ser em português contem varias questões de games em diversas linguagens.

Boa leitura..


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

febap

unread,
Sep 18, 2014, 8:35:43 AM9/18/14
to lua...@googlegroups.com

Obrigado , vou tentar absorver ao máximo .

Joao Rener

unread,
Oct 5, 2014, 9:56:31 AM10/5/14
to lua...@googlegroups.com
olha você tem que escrever else que quer dizer senão e atribuir o -7, porque tudo que estiver na frente do else é um comando normal, e tudo oque estiver atrás é o contrário ou outro comando(ex: pra frente é o "w", "s" é pra trás, pra direita "a", pra esquerda "d"(para jogos 3d) ). 
Reply all
Reply to author
Forward
0 new messages