Inspirado en el programa Robocode de IBM, esta simulación consiste en generar N tanques en un tablero (un plano), cada tanque puede girar, desplazarse hacia adelante o hacia atrás, tiene un radar y disparar. Mientras dura el torneo, en cada ciclo*, el tanque va perdiendo un punto de vida, pierde tres puntos de vida si es impactado por un proyectil de otro tanque y gana tres puntos de vida si al disparar acierta a otro tanque.
El tanque tiene cuatro(4) eventos que se activan cuando:
1. Es alcanzado por un disparo.
2. Acierta su disparo en otro tanque.
3. Choca contra otro tanque.
4. Detecta otro tanque con el radar.
Cada evento dispara un bloque de instrucciones. Los bloques de instrucción han sido generados previamente y se asocian al azar: Tanque+Evento -> Bloque
En cada bloque hay una serie de instrucciones, típicas de un lenguaje muy simple de programación se manejan:
1. Diez(10) variables.
2. Las instrucciones IF y SET (asignación)
3. Ocho(8) funciones:
a: Avanzar_Tanque();
b: Retroceder_Tanque();
c: Girar_Tanque(1-8); /* 8 posiciones */
d: Girar_Radar(1-8); /* El radar se mueve independiente del tanque */
e: Disparar();
f: GetPosX();
g: GetPosY();
h: GetVida();
Cuando inicia la simulación, se generan primero los bloques de instrucción, cada bloque tiene unas 10 instrucciones, luego se generan los tanques y por último al azar se asocia por cada tanque y por cada evento de este un bloque de instrucción.
Observaciones: Este programa se crea como base de desarrollos futuros para probar conceptos sobre la evolución: macroorganismos, reproducción, sensores, emociones, etc..
Fue diseñado para ser lo más rápido posible (modo texto o de consola) y escrito en C++.
Pruebas preliminares
Traté de aplicar las reglas originales de Robocode: el tanque pierde tres puntos de vida cuando es impactado, gana tres puntos de vida si logra acertarle un disparo a un tanque enemigo, por cada disparo disminuye la vida en un punto y cuando la vida sea cero el tanque es destruido. Sin embargo cuando ejecuté la simulación, para mi sorpresa, sobrevivieron los tanques que no disparaban, así que cambié las reglas: ahora por cada ciclo(*) cada tanque pierde un punto de vida, es decir, o empiezan a disparar y acertar o sino son destruidos. Allí si sobrevive uno.
(*) un ciclo cubre evaluar cada evento de todos los tanques de guerra)