Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/07/2012, 09:08
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 7 meses
Puntos: 28
Problema con la IA

Estoy creando un juego de las "Motos de luz". Manejas una moto que deja un rastro de color a su paso y tienes que intentar matar al otro (haciendo que se estrelle contra una pared).

El caso es que quiero crearle una IA, el problema esque siempre que llega a la esquina superior izquierda. Empieza a cabecear de forma rara hasta suicidarse (la amarilla es la maquina):



La funcion que gestiona los movimientos de la maquina es la siguiente:

Código C++:
Ver original
  1. void InteligenciaArtificial(Vehiculo &Jugador2)
  2. {
  3.  
  4.      int color;
  5.      int color2;
  6.      bool Movido = false;
  7.  
  8.      // Si se choca en el eje X
  9.  
  10.      if (Jugador2.MovimientoX != 0) // Si se mueve en el eje x
  11.      {
  12.         color = getpixel(screen,Jugador2.X+50*Jugador2.MovimientoX, Jugador2.Y); // Comprobamos si hay algun obstaculo
  13.  
  14.         if ((color != 0)&& (color != palette_color[15]))
  15.         {
  16.  
  17.            color = getpixel(screen,Jugador2.X, Jugador2.Y+50);
  18.            color2= getpixel(screen,Jugador2.X, Jugador2.Y-50);
  19.  
  20.            if ((color!= 0)&& (color != palette_color[15])&& (color2 != 0)&& (color2!= palette_color[15]))
  21.               Jugador2.MovimientoY = 1;
  22.            else  
  23.                Jugador2.MovimientoY = -1;
  24.  
  25.            Jugador2.MovimientoX = 0;
  26.            Movido = true;
  27.            // return;
  28.         }
  29.  
  30.  
  31.      }
  32.  
  33.      // Si se choca en el eje Y
  34.  
  35.      if ((Jugador2.MovimientoY != 0)&& (Movido == false))
  36.      {
  37.         color = getpixel(screen,Jugador2.X, Jugador2.Y+50*Jugador2.MovimientoY);
  38.  
  39.         if ((color != 0)&& (color != palette_color[15]))
  40.         {
  41.            color = getpixel(screen,Jugador2.X+50, Jugador2.Y);
  42.            color2= getpixel(screen,Jugador2.X-50, Jugador2.Y);
  43.  
  44.            if ((color!= 0)&& (color != palette_color[15])&& (color2 != 0)&& (color2 != palette_color[15]))
  45.               Jugador2.MovimientoX = 1;
  46.            else
  47.                Jugador2.MovimientoX = -1;
  48.  
  49.            Jugador2.MovimientoY = 0;
  50.            Movido = true;
  51.            //return;
  52.         }
  53.      }
  54.  
  55.  
  56. }

La función GetPixel es una función de la librería gráfica que te devuelve el color de un determinado adyacente. Lo uso para determinar si el siguiente pixel es un obstaculo o solo parte del fondo.

Saludos!