Texto: Guillermo Sáiz Ruiz
Se otea esta utilidad más espartana, menos intuitiva que la descubierta el mes pasado, si bien –también– es más acorde a la informática en estado casi puro. Por qué decimos esto, esencialmente por ser un lenguaje de programación sin elementos gráficos que aligeren el trabajo. Hasta ahora, con la sana excepción de "Red Alert", todo lo que ha pasado por estas páginas –antes de papel y ahora de bytes– han sido herramientas programas que servían de intermediarios entre un lenguaje de programación y nuestras expectativas. No podremos denunciar a los desarrolladores por introducir un despreciable número de triggers, todo depende ahora de nuestra imaginación y capacidad de lógica.
Las Sentencias (o Rules)
Son la base de este lenguaje. Su modo de funcionamiento no resulta extraño: de cumplirse las condiciones establecidas las instrucciones asignadas a aquellas se acometerán, en caso de que no se cumplieran la sentencia no tendría efectos.
En el esquema de una sentencia la colocación de los paréntesis es un requisito para el correcto funcionamiento:
(defrule
(Condición)
=>
(Efecto)
)
Si se quiere deshabilitar una línea para comprobar su funcionamiento o para introducir un comentario, bastará con colocar al comienzo de aquella o del comentario un ‘;’.
Así se puede diferenciar dos partes dentro de toda sentencia: las condiciones y los efectos o sucesos.
Las primeras, denominadas Facts, son las circunstancias que desencadenarán los efectos; mientras que los Sucesos (Actions según la doctrina) son los comportamientos de la IA en función de que se haya cumplido previamente una condición.
Órdenes
También llamados comandos, son los que crean sentencias. La introducción de una constante requiere la siguiente proposición:
"(desconst <nombre-constante> <valor>)"
Donde ‘nombre-constante’ es el nombre por el cual se invocará, de ser compuesto, separando cada término por un guión; el ‘valor’, el número constante deseado, tendrá que estar comprendido entre –32768 y 32767.
En cuanto a los caracterizadores del sistema, se encuentran separados en dos grupos, a razón del modo de elección: de una lista (type 1) o de un ‘check-box’ (type 2). A su vez, pueden ser identificados por los jugadores a los que afecten: Global de afectar a todos los jugadores y Local cuando únicamente afectan a uno. De esta forma se puede condicionar la IA según el modo de juego elegido.
Condiciones
A continuación recogemos una serie de condiciones, y lo que vienen a significar:
"true". La acción siempre tendrá lugar. Todo lo contrario ocurrirá con "false".
"attack-soldier-count <relación> <valor>". Supone el cómputo de todas las unidades de infantería. De querer que se acometa la misma operación sobre las embarcaciones de combate sustituir ‘soldier’ por "warboat".
"building-count <relación> <valor>". Se cuenta el número de edificaciones reales del jugador; para que se computen las que están en proceso de construcción o en espera, igual pero "building-count-total".
"building-count <edificio> <relación> <valor>". Lo mismo pero tan sólo se tendrán en consideración un específico tipo de construcción.
"building-available <edificio>". Se acometerá la ejecución de la instrucción siempre que la IA pueda construir el edificio determinado, independientemente cuente con los recursos necesarios para ello.
"can-afford-building <edificio>". La condición es que el jugador disponga de los recursos necesarios para levantar la estructura.
"can-afford-unit <unidad>". Se analiza si se dispone de la cantidad de recursos para entrenar cierta unidad.
"cc-players-building-count <jugador> <relación> <valor>". La condición consiste en que el jugador determinado disponga de estas edificaciones; este fact es susceptible de las variaciones antes analizadas, dentro del mismo grupo con los tipos y con unidades.
"cheats-enabled". Se activará la instrucción cuando un tramposo haya activado los trucos.
"civ-selected <civilización>". Civilización con la que jugará la IA.
"current-age <relación> <edad>". Edad del jugador.
"death-match-game" o "regicide-game". Caso de que sea la modalidad de juego.
"difficulty <relación> <grado de dificultad>". Grado de dificultad del escenario.
"food-amount <relación> <valor>". Cantidad de comida disponible.
"game-time <relación> <valor>". El tiempo de juego, en segundos.
"map-size <tamaño del mapa>". Lo relevante es el tamaño del mapa.
"map-type <tipo del mapa>". Igual pero con el tipo de mapa: islas, costa, continental, etc.
"military-population <relación> <valor>". Condicionada por el número de unidades militares; ideal para preparar ataques, o mejor dicho, para establecer una defensa mientras no se ataca.
"player-human <jugador>". Verifica si el jugador en cuestión no es manejado por el sistema. Si se quiere comprobar si es controlado por la IA la redacción será "player-computer <jugador>". Dentro de la misma onda se encuentra "player-in-game <jugador>" que analiza si el jugador continúa jugando.
Tenemos una serie de condiciones compartidas, con pequeñas modificaciones –el jugador ya no es la IA: "players-civ <jugador> <civilización>", "players-current-age <jugador> <relación> <edad>", y así los vistos arriba.
"town-under-attack". Que el principal establecimiento de la IA sea atacado.
"victory-condition <condición>". Cuando se cumpla la condición de victoria determinada.
![]() |
Instrucciones |
![]() |
Parámetros |
![]() |
Relación de comportamientos de la IA |
![]() |
Extensión y residencia de los ficheros caracterizadores de la IA |
![]() |
La técnica del asedio |
![]() |
Foro del lector |
![]() |