Ver la versión completa : Ayuda en Programación: IA de un Pong
Wild[Kyo]
09/12/2005, 03:14
Hola, pues eso básicamente es que estoy haciendo un Pong por SDL. Ya lo tengo hecho pero me gustaría saber como puedo currarme una buena IA y la verdad es que no me sale nada bien, en una que he realizado siempre me devuelve la bola...en otra no le da nunca... xD
A ver si podeis arrojar un poco de luz al proyecto, os lo agradeceré. :D
Y otra cuestión es, en el Pong debería hacer que al devolver la bola la inclinación cambiara o siempre con la misma?
Bueno, para mí, primero tienes que poner que la velocidad màxima sea la misma que la del jugador, así seguro que hay alguna manera de meterle gol (sobretodo si la velocidad de la pelota va creciendo) y despúes para que la ia sea buena pon que vaya en la direción al punto al que legarà la pelota (calculando los rebotes) y ya de paso que mientras la pelota va hacia el jugador se ponga en el medio de la pantalla.
Como dice Logann, poco mas se puede hacer, no es que sea un juego con mucha IA posible :p
En mi pong hice algo similar. Por ahi estan los fuentes si quieres mirar.
Wild[Kyo]
09/12/2005, 03:22
La velocidad máxima de la pala del cpu, no? No había pensado en lo de ir aumentando la velocidad de la pelota, lo voy a añadir que eso le dará más vida al juego. xD
Que vaya hacía la pelota lo tengo puesto o algo parecido. Osease: si las coordenadas y de la pelota son mayores que las coordenadas de la pala de la cpu, pues la pala va subiendo hasta llegar a estar en la misma y. Y viceversa. No había pensado en lo de centrar la pala del adversario cuando este volviendo la bola, tambien muy buena idea. :D Gracias! Que torpe soy para la IA por Dios. xD
Wild[Kyo]
09/12/2005, 03:23
Como dice Logann, poco mas se puede hacer, no es que sea un juego con mucha IA posible :p
En mi pong hice algo similar. Por ahi estan los fuentes si quieres mirar.
El problema es que miré las fuentes y me quede flipando de no entender nada. XDDDDD
']
Que vaya hacía la pelota lo tengo puesto o algo parecido.
Bueno yo decia ir donde la pelota llegara, no ir a donde la pelota esta, es parecido pero no igual :P, y además podrias poner que cuando vaya hacia el jugador, en lugar de ir al medio como he dicho antes mire en que lugar esta el jugador y en que lugar llegara la pelota, y calcular una aproximación de como sera el rebote y actuar en conseqüencia XDDD :loco: :loco: :loco:
Wild[Kyo]
09/12/2005, 03:35
Bueno yo decia ir donde la pelota llegara, no ir a donde la pelota esta, es parecido pero no igual :P, y además podrias poner que cuando vaya hacia el jugador, en lugar de ir al medio como he dicho antes mire en que lugar esta el jugador y en que lugar llegara la pelota, y calcular una aproximación de como sera el rebote y actuar en conseqüencia XDDD :loco: :loco: :loco:
Dios! XD Mis niveles ser limitados XDDDDD
Bueno yo decia ir donde la pelota llegara, no ir a donde la pelota esta, es parecido pero no igual :P, y además podrias poner que cuando vaya hacia el jugador, en lugar de ir al medio como he dicho antes mire en que lugar esta el jugador y en que lugar llegara la pelota, y calcular una aproximación de como sera el rebote y actuar en conseqüencia XDDD
Si haces el movimiento de la pelota vectorialmente (y creeme es una GRAN ayuda) solo has de encontrar el punto de corte entre la recta que forma el vector de la pelota a partir de su posicion y la recta de la pared con la que quieras poner la paleta, bueno tambien podrias calcular que si corta antes con las paredes superior o inferior la paleta se quede en medio.
(que rallada, esto del calculo emociona)
Si haces el movimiento de la pelota vectorialmente (y creeme es una GRAN ayuda)
Y por curiosidad, ¿cómo se haría? ¿Con un array en el que se guarden Xi Xf Yi Yf o algo así? Cuenta cuenta.
Wild[Kyo]
09/12/2005, 08:39
Si haces el movimiento de la pelota vectorialmente (y creeme es una GRAN ayuda) solo has de encontrar el punto de corte entre la recta que forma el vector de la pelota a partir de su posicion y la recta de la pared con la que quieras poner la paleta, bueno tambien podrias calcular que si corta antes con las paredes superior o inferior la paleta se quede en medio.
(que rallada, esto del calculo emociona)
Ni pajolera idea... xDDDD Ahora en castellano, como quedaría el asunto? XD
Puck2099
09/12/2005, 15:01
Ésta es una pregunta para ^Misato^ :)
Y por curiosidad, ¿cómo se haría? ¿Con un array en el que se guarden Xi Xf Yi Yf o algo así? Cuenta cuenta.
Bueno con una estructura que tenga x,y vx y vy, cada frame haces x=x+xi y=y+vy y luego para mostrar en pantalla redondeas a enteros.
De este modo cuando la bola choca contra una paleta multiplicas por -1 vx (darle la vuelta a la direccion horizontal) y cuando choca con una pared superior o inferior multiplicas vy por -1 (darle la vuelta en direccion vertical)
Ueeeeee, un post sobre pong :-p
"]Y otra cuestión es, en el Pong debería hacer que al devolver la bola la inclinación cambiara o siempre con la misma?
Pues yo haria (y he echo) que la inclinacion cambie segun la posicion de la pala que rebote ... para dar un poco mas de juego, que siempre con el mismo angulo es muy aburrido.
Y de paso, que la velocidad de la pelotita vaya aumentando.
Bueno con una estructura que tenga x,y vx y vy, cada frame haces x=x+xi y=y+vy y luego para mostrar en pantalla redondeas a enteros.
De este modo cuando la bola choca contra una paleta multiplicas por -1 vx (darle la vuelta a la direccion horizontal) y cuando choca con una pared superior o inferior multiplicas vy por -1 (darle la vuelta en direccion vertical)
Para la velocidad, yo he usado el modulo de la velocidad y el angulo.
Asi la posicion de la pelitita es:
x=x+velocidad*ticks*cos(angulo);
y=y+velocidad*ticks*sin(angulo);
De esta forma, augmentar la velocidad y canviar el angulo es muy facil.
Los revotes son "un poco" mas complicados que trabajando con las componentes ...
Revote por arriva i pro abajo:
angulo = - angulo;
Revote por los lados:
angulo = 180 - angulo;
Sobre la IA ... todavia no la he echo, a ver cuando me pongo :-p
Bye !
PD: el sin y cos con floats no van muy finos (por no decir que no van).
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.