package net.sf.colossus.variant; import java.util.List; /** * Interface for the use of AI Hints. * * @author Romain Dolbeau */ public interface IVariantHint { /** * The style of play the AI should prefer. * * This can be used to make an AI prefer recruits that are geared * towards a certain style of play, e.g. recruiting strong attackers * for an offensive AI or a more long-term recruitment strategy for * AIs that play more defensively (and thus don't get involved in * battles as soon). */ enum AIStyle { /** * Default value if no particular play style is preferred. */ Any, /** * Marks a preference for offensive recruiting, i.e. strong * creatures are usually preferred over long-term recruiting * strategies. */ Offensive, /** * Marks a defensive play, with the assumption that battles * are often avoided. Thus long-term recruiting strategies are * important. */ Defensive } /** * Give the suggested recruit in this terrain for this legion. * * @param terrain Type of terrain * @param legion The recruiting legion * @param recruits List of all recruitable Creature * (returned value must be the name of one of those) * @param oracle An oracle that answers some questions * about the situation of the legion * @param aiStyles The styles the AI prefers to play * @return The suggested recruit type, a null means recruiting should be * skipped. */ public CreatureType getRecruitHint(MasterBoardTerrain terrain, IOracleLegion legion, List<CreatureType> recruits, IHintOracle oracle, List<AIStyle> aiStyles); /** * Obtains the list of creatures to split on turn one. * * @param startingTower The starting Tower. * @param aiStyles The style the AI prefers to play. * @return The list of creatures to split. */ public List<CreatureType> getInitialSplitHint(MasterHex startingTower, List<AIStyle> aiStyles); /** * Give an offset to apply to the creature Point Value before * estimating its recruitment value. * * @param creature Type of the creature * @param styles List of AI styles to hint for * @return An offset to the Point Value of the creature. */ public int getHintedRecruitmentValueOffset(CreatureType creature, List<AIStyle> styles); }