Go to the first, previous, next, last section, table of contents.
You can add new types of AIs to Xconq.
You would do this to add different strategies as well as
to add AIs that are programmed specifically for a single game or
class of games. (This is useful because the generic AI does not
always understand the appropriate strategy for each game.)
You have to design the object that is the AI's "mental state".
If your AI need only react to the immediate situation, then this
object can be very simple, but in general you will need to design
a fairly elaborate structure with a number of substructures.
Since there may be several AIs in a single game, you should be
careful about using globals, and since Xconq games may often
run for a long time, you should be careful not to consume memory
recklessly.
-
Name.
This is a string, such as
"mplayer"
.
It may be displayed to players, so it should not be too cryptic.
-
Validity function.
This runs after modules are loaded, and during player/side
setup, and decides whether it can be in the given game on the given side.
[have a chain of fallback AIs, or blow off the game?]
-
Game init function. This runs before displays are set up, just in case
a display needs to examine the AI's data (for instance to display whether
the AI is friendly or unfriendly).
The game init function should also look for and interpret the contents
of the side's
aidata
, if appropriate. The generic game reading code
fills the slot, but does not interpret the data further.
-
Turn init function. This runs after all the units get their acp and mp
for the turn, but before anybody actually gets to move.
-
Unit order function. This gets run to decide what the unit should do.
Usually it should be allowed to follow its plan.
[do separate fns for before and after plan execution?]
-
Event reaction functions. [how many?]
-
State save function. This formats state that should be saved into
a Lisp object. The game saving code then writes this state into
the file so that it can be read in again. You may not do any
allocation while saving a game however, so if you need space (and
note that even a single cons allocates space), you must have the AI
init routine or some such do the allocation early on, then reuse
the space.
Note that these functions have very few constraints, so you can write them
to work together in various ways. For instance, an AI can decide whether
to resign once/turn, once/action, or once for each 4 units it moves, every
other turn.
[describe default AI as illustrative example]
Go to the first, previous, next, last section, table of contents.