Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/04/2013, 02:51
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Desafío JavaScript: Inteligencia artificial

En la calse PONG, dentro del método LOOP, hay este código:

Código Javascript:
Ver original
  1. var direccion2=Direccion.QUIETO;
  2.     if (ia.checked)
  3.     {
  4.         if (this.pelota.pos.y-this.pelota.lado/2 <= this.palas[1].pos.y)
  5.         {
  6.             direccion2=Direccion.ARRIBA;
  7.         }
  8.         if (this.pelota.pos.y+this.pelota.lado/2 >= this.palas[1].pos.y)
  9.         {
  10.             direccion2=Direccion.ABAJO;
  11.         }
  12.     }

Eso es la inteligencia artificial que hay ahora, y es lo que teneis que modificar. Si hay gente suficiente, refactorizaré el código, como dije, para evitar que vuestras IAs modifiquen algunos valores que no deban.

Para practicar por ahora, sustituye ese código por el tuyo. Puedes crear funciones y variables nuevas, y usarlas ahí. Y desde ahí se tiene acceso de lectura (prohibido modificar nada) a estas variables:

Todos los métodos y atributos de todas las clases son PRIVADOS, no se pueden utilizar, excepto la lista que pongo a continuación.
Todos los métodos y atributos de la clase Vector2D, que son PÚBLICOS.

Atributos accesibles para lectura por tu IA:

this.pelota.pos -> Vector2D con la posición del centro de la pelota en ese momento.
this.pelota.velocidad, ó this.pelota.vector.longitud() -> Velocidad pixeles por segundo actual de la pelota. Cada vez que choca con una pala, incrementa en 10.
this.pelota.vector -> Vector2D con la dirección que lleva la pelota.
this.pelota.lado -> Longitud del lado del cuadrado que forma la pelota. Constante.

this.palas[0 o 1].pos -> Vector2D con la posición del centro de la pala de cada jugador.
this.palas[0 o 1].ancho -> Anchura de la pala. Constante.
this.palas[0 o 1].alto -> Altura de la pala. Constante.
this.palas0 o 1].velocidad -> Velocidad pixeles por segundo de las palas. Constante.


delta -> Tiempo en segundos transcurridos desde la última vuelta del bucle.
this.canvas.width -> Anchura del mundo. Constante.
this.canvas.height -> Altura del mundo. Constante.

Todos esos datos están disponibles porque es lo que un jugador humano puede ver mientras juega. Así que una buena IA también debería ser "consciente" de ellos.

Lo único que debe modificar cada IA es la variable direccion2. Tienes que ponerle un
Direccion.QUIETO, Direccion.ARRIBA o Direccion.ABAJO según lo que quieras que tu pala haga en cada vuelta del bucle principal del juego.

Y por último quiero recalcar que no es obligatorio usarlas todas. Están accesibles para quien quiera usarlas, pero perfectamente puedes usar sólo la posición de la pelota, y la de tu pala, como la IA original.
Los códigos que hagais no los posteeis aquí, para que no os copien vuestra maravillosa idea xd. Enviádmelos por MP cuando los tengais terminados o tengais alguna duda. Lo que sí me gustaría es que la gente que esté dispuesta a participar, esriba algo, porque con sólo un participante que hay de momento, mucho campeonato no va a ver xd.

Última edición por marlanga; 11/04/2013 a las 03:10