Libro de mano de Imperfect World Of Robots

Author: Aidin Gharibnavaz
Traducción: Quimey Vivas
Última actualización: 28 de Septiembre de 2008

Table Of Contents


1. Introducción

Esto es una referencia completa al proyecto IWOR y como usarlo. Leyendo esto deberías ser capaz de escribir tus propios robots para IWOR.

IWOR simula un mundo virtual en el cual pueden vivir robots. Los robots son objetos fisicos en este mundo. Todo lo que un jugador(programador) debería hacer es diseñar un cerebro para estos pequeños robots, y mirarlos moverse alrededor de este mundo impergecto. En este articulo y en otros documentos la palabra 'robot' se referira a este cerebro(programa que controla a los robots fisicos) y no al robot fisico en si.


2. Reglas de juego

Este programa simulara un mundo en el que los robots pueden vivir, trabajar, defender su tribu contra el enemigo, engendrar nuevos niños,etc. Cada robot pertenece a una tribu. Los robots deben reunir los cristales para la fabrica de la tribu y defenderlos. A cambio la fabrica les proveera energia

Cada robot tiene una bateria. Haciendo actividades una cierta porcion de la bateria se consume. Ellos pueden cargar la bateria moviendose alrededor de la fabrica.

Cada tribu tiene su propia fabrica. La fabrica consumira cristal para producir energia. La tarea mas importante de cada robot es recoger cristal para la fabrica. Los cristales se encuentran alrededor del mundo. Los robots pueden recogerlos y arrojarlos a la fabrica. Haciendo actividades sociales, sirviendo a la tribu y ayudando a los otros los robots pueden sobrevivir mas en este imperfecto y despiadado mundo.

Clonación

Sirviendo a la tribu los robots ganaran honor. Si un cierto robot tiene suficientes puntos de honor, la sociedad le dejara tener un nuevo hijo.

Los robots deben enviar una "llave" valida al servidor para poder unirse al juego. Al principio hay algunas llaves libres (=0). El número de estas llaves se puede configurar usando la opcion ROBOTS_PER_TRIBE del archivo .config Despues de gastar estas llaves, los robots pueden obtener nuevas llaves enviando el comando CLONE al servidor (deben tener suficiente honor). En este caso pueden enviar las nuevas llaves a sus hijos(nuevos procesos) y esos chicos pueden unirse al juego.

De esta firma, solo los robots que sirven a la tribu pueder clonarse y expandir su generación.

Vida

Cada robot tiene un cierto tiempo de vida. Esto puede ser configurado usando ROBOT_LIFETIME en el archivo .config. Al enviar ciertos comandos al servidor (por ejemplo MOVE, PICK,...) los robots consumiran su tiempo de vida.

Uno de los objetivos de estos robots es clonarse antes de que se acabe su tiempo de vida.


3. Usando IWOR

IWOR usa un modelo cliente/servidor para la comunicación entre los robots y el servidor. Por lo tanto los robots deben funcionar como programas separados. Ellos pueden ser escritos en casi cualquier lenguaje y sistema operativo. Con este modelo los robots pueden correr en maquinas diferentes.

A sample image which
show how IWOR can run on separated machines

Para usar IWOR, primero debe correr el servidor que escuchara el puerto 7200. Los robots se pueden conectar al servidor usando este puerto. El juego comenzara inmediatamente despues de la primer conexion. Los clientes pueden enviar comandos al servidor para controlar sus robots. Si tu quieres usar una interfaz grafica (GUI) tambien necesitas ejecutarla como un proceso aparte. La GUI se puede conectar al puerto 7250 (por default) y el sevidor le enviara los objetos del mundo cada vez que algo cambie.

Si descargaste el paquete hay un directorio "bin" que contiene los archivos compilados para ejecutar el juego. Si no, debes compilarlos. En el archivo README hay instrucciones para compilar IWOR

Ejecutando `iwor' , el servidor comenzará y esperará por una conexión. Despues de ejecutar el servidor puedes ejecutar una gui(interfaz grafica). Hay una interfaz simple por defecto disponible. Ejecutá `gui' . Ahora esta todo listo para conectar los robots.

Si quieres probar los comandos sin escribir codigo podes usar "telnet". Ejecuta `telnet localhost 7200' y escribí los comandos directamente.


4. Comandos

Los comandos son mensajes que los clientees mandan al servidor para controlar sus robots. Son simples cadenas de texto que le dicen al servidor que quieren que hagan sus robots. Los comandos tienen un formato parecido a:

command&arg1&arg2&...&argn&

Los argumentos de un comando estan separados por '&'. Observar que hay un '&' al final del comando. Todos los comandos son en mayusculas.

Los comandos son:

INIT&Numero_de_tribu&Nombre&

Le dice al servidor que agrege este robot a la tribu Numero_de_tribu. Este comando deberia ser enviado al servidor justo despues de la conexion. Nombre puede ser cualquier cadena de texto, incluyendo la cadena vacia. Por ejemplo INIT&1&ejemplo& agregara al robot a la primera tribu y lo llamara ejemplo.

El robot sera puesto en algun lado alrededor de la fabrica de la tribu. Si no hay lugares vacios, el robot recibira el mensaje de error 190 (intente mas tarde)

MOVE&direccion&

Mueve al robot en la direccion direccion. direccion puede ser NORTH, SOUTH, EAST and WEST. (norte, sur, este, oeste).

LOCATION&

El servidor enviara la ubicacion actual del robot en el mundo en respuesta a este comando. La ubicacion se da en un formato como i,j. Donde i es la fila y j es la columna de la ubicacion.

SENSE&

Con este comando el radar del robot se encendera y el servidor devolvera los objetos alrededor del robot en el mundo. El resultado estara en el siguiente formato:

i1,j1,objeto1&i2,j2,objeto2& ...

Donde i1,j1 es la ubicacion del objeto objeto1. Los objetos estaran separados por '&'.

Los objetos pueden ser # (pared),C (cristal), R (robot), F (fabrica). R y F van seguidos de un numero que indica a que tribu pertenecen.

Por ejemplo en la siguiente imagen:

Ejemplo del mundo

El circulo rojo es nuestro robot, los azules son otros robots y los negros son paredes. El robot puede observar los cuadrados verdes. Enviando el comando SENSE recibira: (la posicion actual es 5,5)

3,7,R2&4,3,#&5,3,#&6,3,#&6,8,R2&

PICK&dirección&

Enviando este comando, el robot intentara agarrar un objeto de al lado suyo. Por ejemplo enviando PICK&WEST&, el robot intentará agarrar un objeto a su izquierda. Si fue un exito, el servidor devolverá 255, y si no, 130.

DROP&dirección&

Este comando se usa para soltar un cristal en una fabrica. Al igual que PICK, el servidor devolverá 255 si fue un exito, y 140 si no. Si no tiene nada que arrojar el robot recibirá 140.

ISHELD&

En respuesta a este comando el servidor enviará 250(Si) si el robot tiene algo en su mano, y 251(No) si no.

INFO&i&j

El robot puede usar este comando para obtener información de un objeto en el lugar (i,j). El servidor responderá en el siguiente formato:

objeto&id&tribu&

`objeto' puede ser WALL, ROBOT, y FACTORY. Obviamente no hay ID ni numero de tribu para un objeto WALL. Si no hay un objeto en ese lugar el servidor responderá 211.

WORLDSIZE&

El servidor devolverá el tamaño del mundo en el formato i,j.

HONOR&

En respuesta a este comando el servidor devolvera la cantidad de honor del robot que lo mandó

LIFETIME&

Al recivir este comando el servidor enviará la cantidad de tiempo que el robot tiene antes de morir.

SEND&id&message&

Usando este mensaje los robot se pueden comunicar. id es la ID del robot que debe recibir el mensaje. Y obviamente, message es el mensaje que será enviado.


5. Mensajes del servidor

El servidor envia varios mensajes en respuesta a los pedidos de los robots. Todos esos mensajes son numeros enteros. Aca hay una lista de los mensajes del servidor:

255 OK
El ultimo comando se ejecuto correctamente.
250 Si
Sera enviado en respuesta a los comandos Si/No como por ejemplo ISHELD.
251 No
Sera enviado en respuesta a los comandos Si/No como por ejemplo ISHELD.
210 No hay objetos alrededor del robot.
Este mensaje sera enviado en respuesta del comando SENSE. Si no hay objetos alrededor del robot el servidor le enviara 210.
211 No hay un objeto en esa ubicación.
Usualmente sera enviado en respuesta al comando INFO.
220 Le diste a un enemigo.
El robot acaba de acertar a un enemigo con su arma. Este mensaje será recibido en respuesta al comando SHOOT.
221 Le diste a un amigo
Acabas de acertar a uno de tus compañeros. Este mensaje será recibido en respuesta al comando SHOOT.
222 Le diste a una fabrica
Acertaste a una fabrica. Este mensaje será recibido en respuesta al comando SHOOT.
223 Le diste a una pared
Acertaste a una pared. Este mensaje será recibido en respuesta al comando SHOOT.
224 Le diste a un cristal
Acertaste a un cristal. Este mensaje será recibido en respuesta al comando SHOOT.
229 No le diste a nada
No habia nada en el camino de la bala. Este mensaje será recibido en respuesta al comando SHOOT.
100 El robot esta muerto.
Recibir este mensaje significa que el robot esta muerto. Justo despues de este mensaje la conexión con el servidor se cerrará.
110 Comando invalido
El comando estaba en un formato incorrecto.
112 Llave para clonación invalida.
El robot envio una llave invalida.
120 No se puede mover en esa direccion.
Esto pasa si el destino no estaba vacio, o si el robot no se puede mover por alguna razon.
130 No se puede agarrar un objeto.
El robot no puede agarrar este objeto. Sera enviado si no hay un objeto alrededor del robot o si el robot no puede agarrarlo(por ejemplo una pared).
140 No se puede soltar un objeto
Usualmente será enviado si el robot intenta soltar algo en una pared, o algo parecido.
150 No hay suficiente honor
El robot no puede clonarse porque le falta honor. Esto se envia en respuesta al comando CLONE.
160 No existe el robot.
La ID especificada no existe. Esto se envia en respuesta al comando SEND.
190 Intente mas tarde.
La mayoria de las veces este mensaje sera enviado como respuesta al comando INIT. A veces no hay espacio vacio alrededor de la fabrica de la tribu para poner al robot. El robot deberia mandar el mensaje INIT de nuevo.
199 Error desconocido.
Si ocurre un error inmanejable, el servidor enviara 199. Usualmente esto pasa cuando un robot se quiere mover pero ya murio antes. O en otras situaciones similares.


6. Archivo de configuración

El servidor leerá configuraciones y opciones del juego de un archivo .config. Es un archivo de texto ordinario que contiene los valores de las opciones del juego. Por default el sevidor buscara un archivo llamado iwor.config en el directorio actual. Puedes especificar otro archivo de configuración ejecutando el servidor con la opción -c Cosas como cuanta bateria consumen los robots, la cantidad de energía que generan las fabricas por cristal, etc... pueden ser personalizadas.

Algunas opciones importantes son:

ROBOTS_PER_TRIBE: Al principio del juego hay algunas llaves cero que permiten a un numero limitado de robots unirse al juego. (Mira las
reglas del juego para mas información.) Esta opcion define el numero de esas llaves.
HONOR_FOR_CLONING: La cantidad de honor que necesita un robot para poder clonarse.
ROBOT_LIFETIME: Cada robot puede hacer cierto numero de cosas antes de morir, esta cantidad se llama tiempo de vida. Usando esta opcion el tiempo de vida puede ser configurado.


7. Construcción del mundo

Los mundos se describen en un archivo de texto. El servidor lee estos archivos y construye el mundo simulado. Puedes construir tu propio mundo para IWOR. Esta sección describe el formato de estos archivos de mundo. Por ejemplo en el siguiente mundo pequeño:

9
15
###############
#000000000000##
#010000000c000#
#000000#000000#
#00000###00000#
#0000000000000#
#000c000000020#
#0000000##0000#
###############

Las primeras 2 lineas corresponden al tamaño del mundo. Las otras lineas muestran los objetos en el mundo. Los ceros son espacios vacios. Los numeros son la ubicación de las fabricas (1 para la primer tribu, 2 para la segunda y así sucesivamente), '#' es una pared, y 'c' es un cristal. Facil, no?


Copyright (c) 2008 Aidin Gharibnavaz
Eres libre para redistribuir y/o modificar este documento bajo los terminos de la GNU Free Documentation License. Una copia de esta licencia se encuentra en el archivo FDL junto con este documento