Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con la IA

Estas en el tema de Problema con la IA en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/07/2012, 09:08
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 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!
  #2 (permalink)  
Antiguo 10/07/2012, 12:31
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Respuesta: Problema con la IA

amigo, si te he entendido bien, lo que te sucede es que al llegar la luz a un punto frontera como es el superior isquierdo te da errores o no funciona?, se me ocurre que deberias controlar las posiciones de la pantalla ya sea utilizando if o con alguna matriz de movimiento.
Por ejemplo, para un juego de ajedrez, tienes una mtriz 8x8, si quiere mover por ejemplo el alfil, hacia la isquierda superior reduces 1fila y reduces 1 columna, eso se puede controlar de esta forma

if ( pos - 1 >=0 && pos-1>=0 ) puedo mover

o si lo quieres mover hacia superior derecha
if ( pos-1>=0 && pos+1 <=8 ) puede mover..

espero haberte entendido...

s2
cronos
  #3 (permalink)  
Antiguo 10/07/2012, 12:40
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Respuesta: Problema con la IA

amigo, si te he entendido bien, lo que te sucede es que al llegar la luz a un punto frontera como es el superior isquierdo te da errores o no funciona?, se me ocurre que deberias controlar las posiciones de la pantalla ya sea utilizando if o con alguna matriz de movimiento.
Por ejemplo, para un juego de ajedrez, tienes una mtriz 8x8, si quiere mover por ejemplo el alfil, hacia la isquierda superior reduces 1fila y reduces 1 columna, eso se puede controlar de esta forma

if ( pos - 1 >=0 && pos-1>=0 ) puedo mover

o si lo quieres mover hacia superior derecha
if ( pos-1>=0 && pos+1 <=8 ) puede mover..

espero haberte entendido...

s2
cronos
  #4 (permalink)  
Antiguo 10/07/2012, 12:44
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con la IA

Buenas.

El sistema para moverse ya lo tengo implementado y funciona perfecto para dos jugadores (no va por matrices, sino por pixeles).

El problema es la IA, que al llegar a esa esquina se le va la pinza y empieza a cabecear de un lado para otro (en las demas esquinas si funciona).

Quiero aclarar, que la variable Jugador2.MovimientoX indica el desplazamiento en el eje X (positivo para la derecha y negativo para la izquierda). Lo mismo con Jugador2.MovimientoY.
  #5 (permalink)  
Antiguo 10/07/2012, 12:56
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Respuesta: Problema con la IA

se me ocurre que dentro de esta funcion hagas algo en especifico para esa posicion, no se porque te sirve para superior derecha y superior isquierda no, pudiera ser, todas las aplicaciones de este tipo tienen por defecto la incializacion de componentes u otras cosas en la superior isquierda...

s2
cronos
  #6 (permalink)  
Antiguo 10/07/2012, 12:56
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Respuesta: Problema con la IA

se me ocurre que dentro de esta funcion hagas algo en especifico para esa posicion, no se porque te sirve para superior derecha y superior isquierda no, pudiera ser, todas las aplicaciones de este tipo tienen por defecto la incializacion de componentes u otras cosas en la superior isquierda...

s2
cronos
  #7 (permalink)  
Antiguo 10/07/2012, 13:10
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con la IA

He estado probando, pero no encuentro ningún patrón para identificar esa esquina (por coordenadas no me vale, puesto que tendría que funcionar en otras esquinas similares).
  #8 (permalink)  
Antiguo 10/07/2012, 13:44
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 12 años
Puntos: 28
Respuesta: Problema con la IA

te aconsejo que entres a este foro es de C# pero puede preguntar algo en particular sobre eso de seguro te daran alguna idea o respuesta.

http://social.msdn.microsoft.com/For.../vcses/threads

Etiquetas: funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:15.