Creando mi primera inteligencia artificial avanzada de videojuego

Oct 25

Creando mi primera inteligencia artificial avanzada de videojuego

La programación de la IA de un juego es una tarea compleja, se han hecho muchos estudios al respecto ya que cada vez se intenta simular más la inteligencia humana, los agentes deben realizar sus tareas de forma eficiente y en tiempo real, la toma de decisiones en un videojuego es algo fundamental que hace que un jugador se plantee si debe seguir jugando o no.

Para empezar con las tareas de programación de una IA de un videojuego vamos a tomar prestado el proyecto ORTS cuya Homepage se encuentra en la dirección:


ORST : SkatGame
Nos vamos a ir a Linux y vamos a descargarnos el árbol de SVN de código fuente (svn co …) , con las instrucciones de la web, de modo que una vez hecho o mientras tanto nos vamos a instalar los paquetes de los que depende que son:

  • g++ >= 3.4 (< 3.4 suffers from internal compiler errors) boost >= 1.32 (www.boost.org)
  • gnumake >= 3.8 (< 3.8 has a bug and won’t do anything) SDL, SDL_devel (>= 1.2.7, http://www.libsdl.org)
  • SDL_net, SDL_net-devel (>= 1.2.5, http://www.libsdl.org)
  • OpenGL >= 1.3 (including glut, freeglut works)
  • glew >= 1.3.2 (http://glew.sourceforge.net)
  • zlib

Todos estos paquetes se pueden instalar muy fácilmente en distribuciones de Linux con Apt-Get , synaptic ,etc. ya que basta con poner el nombre del paquete o buscarlo en la lista para instalarlo.

Una vez instalados los paquetes, hacemos un típico make init y luego un make para compilar el juego, si queremos optimizarlo basta con hacer un make -j2 -w MODE=opt en este caso se especifica que es un procesador de doble núcleo.

Al final del proceso de compilación debe aparecer algo como:

### linking bin/ortsg

que viene a ser el mensaje de que ha terminado de generar el ejecutable de aquel y ahora podemos crear los servidores y los clientes para entrar en batallas de inteligencia artificial!!

En mi caso he utilizado tres consolas con los comandos:

  1. Crear el servidor para 2 clientes: juax@ubuntu:~/mcp/orts/trunk$ bin/orts -nplayers 2 -nobjs 20
  2. Crear primer cliente: juax@ubuntu:~/mcp/orts/trunk$ bin/orts -m client -act -disp
  3. Segundo cliente: juax@ubuntu:~/mcp/orts/trunk$ bin/orts -m client -act -disp

donde -disp es la opción para que el servidor muestre los gráficos en 2D y sea más eficiente para mostrar el rendering.

El resultado de esto es algo como la captura de pantalla siguiente:

Ahora, para crear nuestras propias modificaciones, es decir, contribuciones al motor de ORTS, para ello necesitamos un directorio válido que cuelgue de trunk, que es, uno que contenga un fichero units.bp y un subdirectorio ortsg con un fichero dentro de este llamado gui.bp,si hacemos esto además debemos añadir nuestro directorio al makefile. Por ahora no nos complicaremos pero si queremos añadir una aplicación iremos al directorio apps, en nuestro caso lo que queremos es una IA para que combata con otra y poder participar en concursos de IA’s como los de RoboCode.

Antes de empezar, vamos a probar las pruebas de los torneos, por ejemplo las del 2009:

  • juax@ubuntu:~/mcp/orts/trunk$ tournament-2009/game1_orts_test

donde game1 se puede cambiar por game2 o game3; debe aparecer una pantalla como esta:

Estas pruebas tournament están diseñadas para crear IA’s, con la línea: tournament-2009/game3_orts se carga el servidor y sólo queda crear dos clientes que se conecte al puerto 7777 para pelearse en batalla con sus armas jeje

Ahora podemos comenzar a programar nuestra IA, vamos a coger uno de los ejemplillos hechos de tournament-2009, game2, la documentación está en tournament-2009/doc/game2, el objetivo es eliminar tantos edificios del enemigo como sea posible en un tiempo prefijado de 15 minutos. Lo vamos a modificar para que además elimine tantos enemigos como sea posible y en lugar de 15minutos serán 2minutos, para eso podemos fijarnos en la documentación del ejemplo game4 que implementa esta segunda parte.

Evidentemente, si mejoramos la estrategia colocando técnicas como tablas de acciones y árboles de decisión vamos a obtener mejores resultados.

Entonces, lo que tenemos que hacer es abrir Eclipse, añadir el proyecto de ORTS y empezar a editar el fichero tournament-2009/game2.bp, la macro tournament-2009/game2_orts se encarga de lanzar el servidor especificando el fichero game2.bp, el número de jugadores, dimensión del tablero, niebla, etc.

¡¡Manos a la obra!!

Veamos un ejemplo de programación de una IA básica para ORTS, se generan dos equipos ,uno de ellos con agrupación densa y rotación de unidades para repartir el daño y otra sin rotación, al final gana la primera opción.

Evidentemente no es una buena idea hacer este tipo de agrupaciones porque el enemigo al disparar nos dará siempre, lo que nos interesa es separar las unidades y mantenerlas en movimiento para esquivar los disparados calculados (predichos) por el enemigo de forma que elevemos nuestras posibilidades de supervivencia al máximo posible.


Charla importante relacionada completamente con el tema.

Artículos relacionados

Exprésate dejando un comentario:

Introduce el captcha

Por favor escriba los caracteres de la imagen captcha en el cuadro de entrada