本文整理匯總了Python中FleetUtilsAI類的典型用法代碼示例。如果您正苦於以下問題:Python FleetUtilsAI類的具體用法?Python FleetUtilsAI怎麽用?Python FleetUtilsAI使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了FleetUtilsAI類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: splitNewFleets
def splitNewFleets():
"split any fleets (at creation, can have unplanned mix of ship roles)"
print "Review of current Fleet Role/Mission records:"
print "--------------------"
print "Map of Roles keyed by Fleet ID: %s"%foAIstate.getFleetRolesMap()
print "--------------------"
print "Map of Missions keyed by ID:"
for item in foAIstate.getFleetMissionsMap().items():
print " %4d : %s "%item
print "--------------------"
# TODO: check length of fleets for losses or do in AIstat.__cleanRoles
knownFleets= foAIstate.getFleetRolesMap().keys()
foAIstate.newlySplitFleets.clear()
splitableFleets=[]
for fleetID in FleetUtilsAI.getEmpireFleetIDs():
if fleetID in knownFleets: #not a new fleet
continue
else:
splitableFleets.append(fleetID)
if splitableFleets:
universe=fo.getUniverse()
print ("splitting new fleets")
for fleetID in splitableFleets:
fleet = universe.getFleet(fleetID)
if not fleet:
print "Error splittting new fleets; resulting fleet ID %d appears to not exist"%fleetID
continue
fleetLen = len(list(fleet.shipIDs))
if fleetLen ==1:
continue
newFleets = FleetUtilsAI.splitFleet(fleetID) # try splitting fleet
print "\t from splitting fleet ID %4d with %d ships, got %d new fleets:"%(fleetID, fleetLen, len(newFleets))
示例2: generateOrders
def generateOrders():
print ("Genearting Orders")
universe = fo.getUniverse()
empire = fo.getEmpire()
planetID = empire.capitalID
planet = universe.getPlanet(planetID)
print "EmpireID: " + str(empire.empireID) + " Name: " + empire.name + " Turn: " + str(fo.currentTurn())
print "CapitalID: " + str(planetID) + " Name: " + planet.name + " Species: " + planet.speciesName
# turn cleanup
splitFleet()
identifyShipDesigns()
identifyFleetsRoles()
foAIstate.clean(ExplorationAI.getHomeSystemID(), FleetUtilsAI.getEmpireFleetIDs())
# ...missions
# ...demands/priorities
print("Calling AI Modules")
# call AI modules
PriorityAI.calculatePriorities()
ExplorationAI.assignScoutsToExploreSystems()
ColonisationAI.assignColonyFleetsToColonise()
InvasionAI.assignInvasionFleetsToInvade()
MilitaryAI.assignMilitaryFleetsToSystems()
FleetUtilsAI.generateAIFleetOrdersForAIFleetMissions()
FleetUtilsAI.issueAIFleetOrdersForAIFleetMissions()
ResearchAI.generateResearchOrders()
ProductionAI.generateProductionOrders()
ResourcesAI.generateResourcesOrders()
foAIstate.afterTurnCleanup()
fo.doneTurn()
示例3: calculateColonisationPriority
def calculateColonisationPriority():
"calculates the demand for colony ships by colonisable planets"
global allottedColonyTargets
totalPP=fo.getEmpire().productionPoints
colonyCost=120*(1+ 0.06*len( list(AIstate.popCtrIDs) ))
turnsToBuild=8#TODO: check for susp anim pods, build time 10
allottedPortion = [0.4, 0.5][ random.choice([0, 1]) ] #fo.empireID() % 2
if ( foAI.foAIstate.getPriority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_COLONISATION)
> 2 * foAI.foAIstate.getPriority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_MILITARY)):
allottedPortion *= 1.5
#allottedColonyTargets = 1+ int(fo.currentTurn()/50)
allottedColonyTargets = 1 + int( totalPP*turnsToBuild*allottedPortion/colonyCost)
numColonisablePlanetIDs = len( [ pid for (pid, (score, specName) ) in foAI.foAIstate.colonisablePlanetIDs if score > 60 ][:allottedColonyTargets+2] )
if (numColonisablePlanetIDs == 0): return 1
colonyshipIDs = FleetUtilsAI.getEmpireFleetIDsByRole(EnumsAI.AIFleetMissionType.FLEET_MISSION_COLONISATION)
numColonyships = len(FleetUtilsAI.extractFleetIDsWithoutMissionTypes(colonyshipIDs))
colonisationPriority = 121 * (1+numColonisablePlanetIDs - numColonyships) / (numColonisablePlanetIDs+1)
# print ""
# print "Number of Colony Ships : " + str(numColonyships)
# print "Number of Colonisable planets : " + str(numColonisablePlanetIDs)
# print "Priority for colony ships : " + str(colonisationPriority)
if colonisationPriority < 1: return 1
return colonisationPriority
示例4: getInvasionFleets
def getInvasionFleets():
"get invasion fleets"
allInvasionFleetIDs = FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_INVASION)
AIstate.invasionFleetIDs = FleetUtilsAI.extractFleetIDsWithoutMissionTypes(allInvasionFleetIDs)
# get supplyable planets
universe = fo.getUniverse()
empire = fo.getEmpire()
empireID = empire.empireID
fleetSupplyableSystemIDs = empire.fleetSupplyableSystemIDs
fleetSupplyablePlanetIDs = PlanetUtilsAI.getPlanetsInSystemsIDs(fleetSupplyableSystemIDs)
# get competitor planets
exploredSystemIDs = empire.exploredSystemIDs
exploredPlanetIDs = PlanetUtilsAI.getPlanetsInSystemsIDs(exploredSystemIDs)
allOwnedPlanetIDs = PlanetUtilsAI.getAllOwnedPlanetIDs(exploredPlanetIDs)
# print "All Owned and Populated PlanetIDs: " + str(allOwnedPlanetIDs)
empireOwnedPlanetIDs = PlanetUtilsAI.getOwnedPlanetsByEmpire(universe.planetIDs, empireID)
# print "Empire Owned PlanetIDs: " + str(empireOwnedPlanetIDs)
competitorPlanetIDs = list(set(allOwnedPlanetIDs) - set(empireOwnedPlanetIDs))
print "Competitor PlanetIDs: " + str(competitorPlanetIDs)
print ""
print "Invasion Targeted SystemIDs: " + str(AIstate.invasionTargetedSystemIDs)
invasionTargetedPlanetIDs = getInvasionTargetedPlanetIDs(universe.planetIDs, AIFleetMissionType.FLEET_MISSION_INVASION, empireID)
allInvasionTargetedSystemIDs = PlanetUtilsAI.getSystems(invasionTargetedPlanetIDs)
# export invasion targeted systems for other AI modules
AIstate.invasionTargetedSystemIDs = allInvasionTargetedSystemIDs
print "Invasion Targeted PlanetIDs: " + str(invasionTargetedPlanetIDs)
invasionFleetIDs = FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_INVASION)
if not invasionFleetIDs:
print "Available Invasion Fleets: 0"
else:
print "Invasion FleetIDs: " + str(FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_INVASION))
numInvasionFleets = len(FleetUtilsAI.extractFleetIDsWithoutMissionTypes(invasionFleetIDs))
print "Invasion Fleets Without Missions: " + str(numInvasionFleets)
evaluatedPlanetIDs = list(set(competitorPlanetIDs) - set(invasionTargetedPlanetIDs))
# print "Evaluated PlanetIDs: " + str(evaluatedPlanetIDs)
evaluatedPlanets = assignInvasionValues(evaluatedPlanetIDs, AIFleetMissionType.FLEET_MISSION_INVASION, fleetSupplyablePlanetIDs, empire)
sortedPlanets = evaluatedPlanets.items()
sortedPlanets.sort(lambda x, y: cmp(x[1], y[1]), reverse=True)
print ""
print "Invadable planetIDs:"
for evaluationPair in sortedPlanets:
print " ID|Score: " + str(evaluationPair)
# export opponent planets for other AI modules
AIstate.opponentPlanetIDs = sortedPlanets
示例5: __split_new_fleets
def __split_new_fleets(self):
"""Split any new fleets.
This function is supposed to be called once at the beginning of the turn.
Splitting the auto generated fleets at game start or those created by
recently built ships allows the AI to assign correct roles to all ships.
"""
# TODO: check length of fleets for losses or do in AIstate.__cleanRoles
universe = fo.getUniverse()
known_fleets = self.get_fleet_roles_map()
self.newlySplitFleets.clear()
fleets_to_split = [fleet_id for fleet_id in FleetUtilsAI.get_empire_fleet_ids() if fleet_id not in known_fleets]
if fleets_to_split:
print "Trying to split %d new fleets" % len(fleets_to_split)
for fleet_id in fleets_to_split:
fleet = universe.getFleet(fleet_id)
if not fleet:
warn("Trying to split fleet %d but seemingly does not exist" % fleet_id)
continue
fleet_len = len(fleet.shipIDs)
if fleet_len == 1:
continue
new_fleets = FleetUtilsAI.split_fleet(fleet_id)
print "Split fleet %d with %d ships into %d new fleets:" % (fleet_id, fleet_len, len(new_fleets))
示例6: generateOrders
def generateOrders():
empire = fo.getEmpire()
print "Empire: " + empire.name + " TURN: " + str(fo.currentTurn())
print "Capital: " + str(empire.capitalID)
# turn cleanup
splitFleet()
identifyShipDesigns()
identifyFleetsRoles()
foAIstate.clean(ExplorationAI.getHomeSystemID(), FleetUtilsAI.getEmpireFleetIDs())
# ...missions
# ...demands/priorities
# call AI modules
PriorityAI.calculatePriorities()
ExplorationAI.assignScoutsToExploreSystems()
ColonisationAI.assignColonyFleetsToColonise()
InvasionAI.assignInvasionFleetsToInvade()
FleetUtilsAI.generateAIFleetOrdersForAIFleetMissions()
FleetUtilsAI.issueAIFleetOrdersForAIFleetMissions()
ResearchAI.generateResearchOrders()
ProductionAI.generateProductionOrders()
ResourcesAI.generateResourcesOrders()
foAIstate.afterTurnCleanup()
fo.doneTurn()
示例7: send_invasion_fleets
def send_invasion_fleets(fleet_ids, evaluated_planets, mission_type):
"""sends a list of invasion fleets to a list of planet_value_pairs"""
universe = fo.getUniverse()
invasion_fleet_pool = set(fleet_ids)
if not invasion_fleet_pool:
return
for planet_id, pscore, ptroops in evaluated_planets:
planet = universe.getPlanet(planet_id)
if not planet:
continue
sys_id = planet.systemID
found_fleets = []
found_stats = {}
min_stats = {'rating': 0, 'troopCapacity': ptroops}
target_stats = {'rating': 10, 'troopCapacity': ptroops+1}
these_fleets = FleetUtilsAI.get_fleets_for_mission(1, target_stats, min_stats, found_stats, "",
systems_to_check=[sys_id], systems_checked=[],
fleet_pool_set=invasion_fleet_pool, fleet_list=found_fleets,
verbose=False)
if not these_fleets:
if not FleetUtilsAI.stats_meet_reqs(found_stats, min_stats):
print "Insufficient invasion troop allocation for system %d ( %s ) -- requested %s , found %s" % (
sys_id, universe.getSystem(sys_id).name, min_stats, found_stats)
invasion_fleet_pool.update(found_fleets)
continue
else:
these_fleets = found_fleets
target = AITarget.AITarget(EnumsAI.TargetType.TARGET_PLANET, planet_id)
print "assigning invasion fleets %s to target %s" % (these_fleets, target)
for fleetID in these_fleets:
fleet_mission = foAI.foAIstate.get_fleet_mission(fleetID)
fleet_mission.clear_fleet_orders()
fleet_mission.clear_targets((fleet_mission.get_mission_types() + [-1])[0])
fleet_mission.add_target(mission_type, target)
示例8: can_travel_to_system_and_return_to_resupply
def can_travel_to_system_and_return_to_resupply(fleet_id, from_system_target, to_system_target):
"""
Filter systems where fleet can travel from starting system. # TODO rename function
:param fleet_id:
:type fleet_id: int
:param from_system_target:
:type from_system_target: universe_object.System
:param to_system_target:
:type to_system_target: universe_object.System
:return:
:rtype: list
"""
system_targets = []
if not from_system_target.id == to_system_target.id:
fleet_supplyable_system_ids = fo.getEmpire().fleetSupplyableSystemIDs
fuel = int(FleetUtilsAI.get_fuel(fleet_id)) # int to get actual number of jumps
max_fuel = int(FleetUtilsAI.get_max_fuel(fleet_id))
# try to find path without going resupply first
supply_system_target = get_nearest_supplied_system(to_system_target.id)
system_targets = __find_path_with_fuel_to_system_with_possible_return(from_system_target, to_system_target, system_targets, fleet_supplyable_system_ids, max_fuel, fuel, supply_system_target)
# resupply in system first is required to find path
if from_system_target.id not in fleet_supplyable_system_ids and not system_targets:
# add supply system to visit
from_system_target = get_nearest_supplied_system(from_system_target.id)
system_targets.append(from_system_target)
# find path from supplied system to wanted system
system_targets = __find_path_with_fuel_to_system_with_possible_return(from_system_target, to_system_target, system_targets, fleet_supplyable_system_ids, max_fuel, max_fuel, supply_system_target)
return system_targets
示例9: send_invasion_fleets
def send_invasion_fleets(fleet_ids, evaluated_planets, mission_type):
"""sends a list of invasion fleets to a list of planet_value_pairs"""
universe = fo.getUniverse()
invasion_fleet_pool = set(fleet_ids)
if not invasion_fleet_pool:
return
for planet_id, pscore, ptroops in evaluated_planets:
planet = universe.getPlanet(planet_id)
if not planet:
continue
sys_id = planet.systemID
found_fleets = []
found_stats = {}
min_stats = {'rating': 0, 'troopCapacity': ptroops}
target_stats = {'rating': 10, 'troopCapacity': ptroops+1}
these_fleets = FleetUtilsAI.get_fleets_for_mission(target_stats, min_stats, found_stats,
starting_system=sys_id, fleet_pool_set=invasion_fleet_pool,
fleet_list=found_fleets)
if not these_fleets:
if not FleetUtilsAI.stats_meet_reqs(found_stats, min_stats):
print "Insufficient invasion troop allocation for system %d ( %s ) -- requested %s , found %s" % (
sys_id, universe.getSystem(sys_id).name, min_stats, found_stats)
invasion_fleet_pool.update(found_fleets)
continue
else:
these_fleets = found_fleets
target = universe_object.Planet(planet_id)
print "assigning invasion fleets %s to target %s" % (these_fleets, target)
for fleetID in these_fleets:
fleet_mission = foAI.foAIstate.get_fleet_mission(fleetID)
fleet_mission.clear_fleet_orders()
fleet_mission.clear_target()
fleet_mission.set_target(mission_type, target)
示例10: splitFleet
def splitFleet():
"split all fleets"
# TODO: only after analyzing situation in map can fleet can be split
universe = fo.getUniverse()
for fleetID in universe.fleetIDs:
FleetUtilsAI.splitFleet(fleetID)
# old fleet may have different role after split, later will be again identified
foAIstate.removeFleetRole(fleetID)
示例11: assignInvasionFleetsToInvade
def assignInvasionFleetsToInvade():
# assign fleet targets to invadable planets
invasionFleetIDs = AIstate.invasionFleetIDs
sendInvasionFleets(invasionFleetIDs, AIstate.invasionTargets, AIFleetMissionType.FLEET_MISSION_INVASION)
allInvasionFleetIDs = FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_INVASION)
for fid in FleetUtilsAI.extractFleetIDsWithoutMissionTypes(allInvasionFleetIDs):
thisMission = foAI.foAIstate.getAIFleetMission(fid)
thisMission.checkMergers(context="Post-send consolidation of unassigned troops")
示例12: can_issue_order
def can_issue_order(self, verbose=False):
# TODO: check for separate fleet holding outpost ships
if not super(OrderOutpost, self).can_issue_order(verbose=verbose):
return False
universe = fo.getUniverse()
ship_id = FleetUtilsAI.get_ship_id_with_role(self.fleet.id, ShipRoleType.CIVILIAN_OUTPOST)
if ship_id is None:
ship_id = FleetUtilsAI.get_ship_id_with_role(self.fleet.id, ShipRoleType.BASE_OUTPOST)
ship = universe.getShip(ship_id)
return ship is not None and self.fleet.get_object().systemID == self.target.get_system().id and ship.canColonize
示例13: getColonyFleets
def getColonyFleets():
# get colony fleets
allColonyFleetIDs = FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_COLONISATION)
AIstate.colonyFleetIDs = FleetUtilsAI.extractFleetIDsWithoutMissionTypes(allColonyFleetIDs)
# get supplyable systems
empire = fo.getEmpire()
universe = fo.getUniverse()
capitalID = empire.capitalID
homeworld = universe.getPlanet(capitalID)
speciesName = homeworld.speciesName
species = fo.getSpecies(speciesName)
fleetSupplyableSystemIDs = empire.fleetSupplyableSystemIDs
fleetSupplyablePlanetIDs = PlanetUtilsAI.getPlanetsInSystemsIDs(fleetSupplyableSystemIDs)
print " fleetSupplyablePlanetIDs:" + str(fleetSupplyablePlanetIDs)
# get planets
systemIDs = foAI.foAIstate.getExplorableSystems(AIExplorableSystemType.EXPLORABLE_SYSTEM_EXPLORED)
planetIDs = PlanetUtilsAI.getPlanetsInSystemsIDs(systemIDs)
removeAlreadyOwnedPlanetIDs(planetIDs, AIFleetMissionType.FLEET_MISSION_COLONISATION)
removeAlreadyOwnedPlanetIDs(planetIDs, AIFleetMissionType.FLEET_MISSION_OUTPOST)
evaluatedPlanets = assignColonisationValues(planetIDs, AIFleetMissionType.FLEET_MISSION_COLONISATION, fleetSupplyablePlanetIDs, species, empire)
removeLowValuePlanets(evaluatedPlanets)
sortedPlanets = evaluatedPlanets.items()
sortedPlanets.sort(lambda x, y: cmp(x[1], y[1]), reverse=True)
print "Colonisable planets:"
for evaluationPair in sortedPlanets:
print " ID|Score: " + str(evaluationPair)
print ""
# export planets for other AI modules
AIstate.colonisablePlanetIDs = sortedPlanets
# get outpost fleets
allOutpostFleetIDs = FleetUtilsAI.getEmpireFleetIDsByRole(AIFleetMissionType.FLEET_MISSION_OUTPOST)
AIstate.outpostFleetIDs = FleetUtilsAI.extractFleetIDsWithoutMissionTypes(allOutpostFleetIDs)
evaluatedOutposts = assignColonisationValues(planetIDs, AIFleetMissionType.FLEET_MISSION_OUTPOST, fleetSupplyablePlanetIDs, species, empire)
removeLowValuePlanets(evaluatedOutposts)
sortedOutposts = evaluatedOutposts.items()
sortedOutposts.sort(lambda x, y: cmp(x[1], y[1]), reverse=True)
print "Colonisable outposts:"
for evaluationPair in sortedOutposts:
print " ID|Score: " + str(evaluationPair)
print ""
# export outposts for other AI modules
AIstate.colonisableOutpostIDs = sortedOutposts
示例14: assign_invasion_fleets_to_invade
def assign_invasion_fleets_to_invade():
"""Assign fleet targets to invadable planets."""
assign_invasion_bases()
invasion_fleet_ids = AIstate.invasionFleetIDs
send_invasion_fleets(invasion_fleet_ids, AIstate.invasionTargets, MissionType.INVASION)
all_invasion_fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(MissionType.INVASION)
for fid in FleetUtilsAI.extract_fleet_ids_without_mission_types(all_invasion_fleet_ids):
this_mission = foAI.foAIstate.get_fleet_mission(fid)
this_mission.check_mergers(context="Post-send consolidation of unassigned troops")
示例15: issueOrder
def issueOrder(self):
if not self.canIssueOrder():
print "can't issue " + self
else:
self.__setExecuted()
# outpost
if AIFleetOrderType.ORDER_OUTPOST == self.getAIFleetOrderType():
shipID = None
if AITargetType.TARGET_SHIP == self.getSourceAITarget().getAITargetType():
shipID = self.getSourceAITarget().getTargetID()
elif AITargetType.TARGET_FLEET == self.getSourceAITarget().getAITargetType():
fleetID = self.getSourceAITarget().getTargetID()
shipID = FleetUtilsAI.getShipIDWithRole(fleetID, AIShipRoleType.SHIP_ROLE_CIVILIAN_OUTPOST)
fo.issueColonizeOrder(shipID, self.getTargetAITarget().getTargetID())
# colonise
elif AIFleetOrderType.ORDER_COLONISE == self.getAIFleetOrderType():
shipID = None
if AITargetType.TARGET_SHIP == self.getSourceAITarget().getAITargetType():
shipID = self.getSourceAITarget().getTargetID()
elif AITargetType.TARGET_FLEET == self.getSourceAITarget().getAITargetType():
fleetID = self.getSourceAITarget().getTargetID()
shipID = FleetUtilsAI.getShipIDWithRole(fleetID, AIShipRoleType.SHIP_ROLE_CIVILIAN_COLONISATION)
fo.issueColonizeOrder(shipID, self.getTargetAITarget().getTargetID())
# invade
elif AIFleetOrderType.ORDER_INVADE == self.getAIFleetOrderType():
shipID = None
if AITargetType.TARGET_SHIP == self.getSourceAITarget().getAITargetType():
shipID = self.getSourceAITarget().getTargetID()
elif AITargetType.TARGET_FLEET == self.getSourceAITarget().getAITargetType():
fleetID = self.getSourceAITarget().getTargetID()
shipID = FleetUtilsAI.getShipIDWithRole(fleetID, AIShipRoleType.SHIP_ROLE_MILITARY_INVASION)
fo.issueInvadeOrder(shipID, self.getTargetAITarget().getTargetID())
# move or resupply
elif (AIFleetOrderType.ORDER_MOVE == self.getAIFleetOrderType()) or (AIFleetOrderType.ORDER_RESUPPLY == self.getAIFleetOrderType()):
fleetID = self.getSourceAITarget().getTargetID()
systemID = self.getTargetAITarget().getTargetID()
fo.issueFleetMoveOrder(fleetID, systemID)
# split fleet
elif AIFleetOrderType.ORDER_SPLIT_FLEET == self.getAIFleetOrderType():
fleetID = self.getSourceAITarget().getTargetID()
shipID = self.getTargetAITarget().getTargetID()
fo.issueNewFleetOrder(str(shipID), shipID)
self.__setExecutionCompleted()
elif (AIFleetOrderType.ORDER_ATACK == self.getAIFleetOrderType()):
fleetID = self.getSourceAITarget().getTargetID()
systemID = self.getTargetAITarget().getRequiredSystemAITargets()[0].getTargetID()
fo.issueFleetMoveOrder(fleetID, systemID)