def update_variables(): gc = variables.gc ## **************************************** GENERAL **************************************** ## ## Constants variables.curr_round = gc.round() variables.num_enemies = 0 variables.print_count = 0 variables.research = gc.research_info() ## Battle locations variables.last_turn_battle_locs = variables.next_turn_battle_locs.copy() variables.next_turn_battle_locs = {} if variables.curr_round % 3 == 0: variables.update_quadrant_healer_loc = True else: variables.update_quadrant_healer_loc = False # variables.quadrant_battle_locs = {} ## Units variables.my_units = gc.my_units() variables.my_unit_ids = set([unit.id for unit in variables.my_units]) variables.units = gc.units() num_workers= num_knights=num_rangers= num_mages= num_healers= num_factory= num_rocket = 0 if variables.ranged_enemies >= 5: variables.ranged_enemies = 5 else: variables.ranged_enemies = 0 if variables.switch_to_rangers: current = gc.research_info() if current.get_level(variables.unit_types["knight"]) < 2: gc.reset_research() if variables.curr_planet == bc.Planet.Earth and len(variables.dists) == 0: gc.queue_research(bc.UnitType.Rocket) if current.get_level(variables.unit_types["worker"]) != 1: gc.queue_research(bc.UnitType.Worker) if current.get_level(variables.unit_types["ranger"]) != 1: gc.queue_research(bc.UnitType.Ranger) # 25: 50 gc.queue_research(bc.UnitType.Healer) # 25: 75 if current.get_level(variables.unit_types["rocket"]) != 1: gc.queue_research(bc.UnitType.Rocket) # 50: 125 gc.queue_research(bc.UnitType.Healer) # 100: 225 gc.queue_research(bc.UnitType.Healer) # 100: 325 gc.queue_research(bc.UnitType.Ranger) # 100: 425 gc.queue_research(bc.UnitType.Ranger) # 200: 625 gc.queue_research(bc.UnitType.Worker) # 75: 700 variables.switch_to_rangers = False # Update which ally unit id's are still alive & deaths per quadrant # start_time = time.time() update_quadrants() # Updates enemies in quadrant & resets num dead allies # print('update quadrants time: ', time.time()-start_time) if variables.curr_planet == bc.Planet.Earth: quadrant_size = variables.earth_quadrant_size else: quadrant_size = variables.mars_quadrant_size remove = set() for unit_id in variables.unit_locations: if unit_id not in variables.my_unit_ids: remove.add(unit_id) for unit_id in remove: loc = variables.unit_locations[unit_id] del variables.unit_locations[unit_id] f_f_quad = (int(loc[0] / quadrant_size), int(loc[1] / quadrant_size)) variables.quadrant_battle_locs[f_f_quad].remove_ally(unit_id) # Update % health of fighting allies in quadrant for quadrant in variables.quadrant_battle_locs: q_info = variables.quadrant_battle_locs[quadrant] q_info.update_ally_health_coefficient(gc) # Something something enemies for poss_enemy in variables.units: if poss_enemy.team != variables.my_team and poss_enemy.unit_type in variables.attacker: variables.num_enemies += 1 # Update num of ally units of each type unit_types = variables.unit_types variables.producing = [0, 0, 0, 0, 0] variables.in_order_units = [] workers = [] rangers = [] knights = [] mages = [] healers = [] factories = [] rockets = [] for unit in variables.my_units: if unit.unit_type == unit_types["worker"]: num_workers+=1 workers.append(unit) elif unit.unit_type == unit_types["knight"]: num_knights+=1 rangers.append(unit) elif unit.unit_type == unit_types["ranger"]: num_rangers+=1 knights.append(unit) elif unit.unit_type == unit_types["mage"]: num_mages+=1 mages.append(unit) elif unit.unit_type == unit_types["healer"]: num_healers+=1 healers.append(unit) elif unit.unit_type == unit_types["factory"]: num_factory+=1 factories.append(unit) if unit.is_factory_producing(): type = unit.factory_unit_type() if type == variables.unit_types["worker"]: variables.producing[0]+=1 elif type == variables.unit_types["knight"]: variables.producing[1]+=1 elif type == variables.unit_types["ranger"]: variables.producing[2]+=1 elif type == variables.unit_types["mage"]: variables.producing[3]+=1 else: variables.producing[4]+=1 elif unit.unit_type == unit_types["rocket"]: num_rocket+=1 rockets.append(unit) variables.info = [num_workers, num_knights, num_rangers, num_mages, num_healers, num_factory, num_rocket] variables.in_order_units.extend(rangers) variables.in_order_units.extend(workers) variables.in_order_units.extend(knights) variables.in_order_units.extend(mages) variables.in_order_units.extend(healers) variables.in_order_units.extend(factories) variables.in_order_units.extend(rockets) ## **************************************** UNITS **************************************** ## ## Worker variables.my_karbonite = gc.karbonite() ## Income variables.worker_harvest_amount = 0 variables.past_karbonite_gain = variables.current_karbonite_gain + max(0,10 - int(variables.my_karbonite/40)) variables.current_karbonite_gain = 0 # reset counter if not worker.check_if_saviour_died(): variables.saviour_worker_id = None variables.saviour_worker = False variables.saviour_blueprinted = False variables.saviour_blueprinted_id = None variables.num_unsuccessful_savior = 0 variables.saviour_time_between = 0 # start_time = time.time() worker.designate_roles() # print("designating roles time: ",time.time() - start_time) ## Rangers variables.targeting_units = {} ranger.update_rangers() ## Knights knight.update_battles() ## Healers healer.update_healers() ## Rockets rocket.update_rockets() ## Factories factory.evaluate_stockpile()
knight.update_battles() #if time.time()-start_time > 0.02: # print('KNIGHT UPDATE BATTLES:', time.time()-start_time) start_time = time.time() healer.update_healers() #if time.time() - start_time > 0.02: # print('HEALER UPDATE TIME:', time.time()-start_time) start_time = time.time() ranger.update_rangers() #if time.time() - start_time > 0.02: # print('RANGER UPDATE TIME: ', time.time()-start_time) start_time = time.time() worker.designate_roles() #if time.time() - start_time > 0.02: # print('DESIGNATING ROLES TIME:', time.time()-start_time) factory.evaluate_stockpile() #time_workers = 0 #time_rangers = 0 #time_healers = 0 # time_factories = 0 # time_knights = 0 #print("current worker roles: ", variables.current_worker_roles) try: # walk through our units: #start_time = time.time()
def update_variables(): gc = variables.gc ## **************************************** GENERAL **************************************** ## ## Constants variables.curr_round = gc.round() variables.num_enemies = 0 variables.print_count = 0 variables.research = gc.research_info() ## Battle locations variables.last_turn_battle_locs = variables.next_turn_battle_locs.copy() variables.next_turn_battle_locs = {} # variables.quadrant_battle_locs = {} ## Units variables.my_units = gc.my_units() variables.my_unit_ids = set([unit.id for unit in variables.my_units]) variables.units = gc.units() num_workers= num_knights=num_rangers= num_mages= num_healers= num_factory= num_rocket = 0 # Update which ally unit id's are still alive & deaths per quadrant update_quadrants() # Updates enemies in quadrant & resets num dead allies if variables.curr_planet == bc.Planet.Earth: quadrant_size = variables.earth_quadrant_size else: quadrant_size = variables.mars_quadrant_size remove = set() for unit_id in variables.unit_locations: if unit_id not in variables.my_unit_ids: remove.add(unit_id) for unit_id in remove: loc = variables.unit_locations[unit_id] del variables.unit_locations[unit_id] f_f_quad = (int(loc[0] / quadrant_size), int(loc[1] / quadrant_size)) variables.quadrant_battle_locs[f_f_quad].remove_ally(unit_id) # Update % health of fighting allies in quadrant for quadrant in variables.quadrant_battle_locs: q_info = variables.quadrant_battle_locs[quadrant] q_info.update_ally_health_coefficient(gc) # Something something enemies for poss_enemy in variables.units: if poss_enemy.team != variables.my_team and poss_enemy.unit_type in variables.attacker: variables.num_enemies += 1 # Update num of ally units of each type unit_types = variables.unit_types for unit in variables.my_units: if unit.unit_type == unit_types["worker"]: num_workers+=1 elif unit.unit_type == unit_types["knight"]: num_knights+=1 elif unit.unit_type == unit_types["ranger"]: num_rangers+=1 elif unit.unit_type == unit_types["mage"]: num_mages+=1 elif unit.unit_type == unit_types["healer"]: num_healers+=1 elif unit.unit_type == unit_types["factory"]: num_factory+=1 elif unit.unit_type == unit_types["rocket"]: num_rocket+=1 variables.info = [num_workers, num_knights, num_rangers, num_mages, num_healers, num_factory, num_rocket] ## **************************************** UNITS **************************************** ## ## Worker variables.my_karbonite = gc.karbonite() variables.producing= [0, 0, 0, 0, 0] if not worker.check_if_saviour_died(): variables.saviour_worker_id = None variables.saviour_worker = False variables.saviour_blueprinted = False variables.saviour_blueprinted_id = None variables.num_unsuccessful_savior = 0 variables.saviour_time_between = 0 worker.designate_roles() ## Rangers variables.targeting_units = {} ranger.update_rangers() ## Knights knight.update_battles() ## Healers healer.update_healers() # Rockets rocket.update_rockets() ## Mages ## Factories factory.evaluate_stockpile()
#Update knight cluster min """ try: my_knights = list(filter(lambda x: x.unit_type == bc.UnitType.Knight, gc.my_units())) if len(my_knights) > 25: KNIGHT_CLUSTER_MIN =8 elif len(my_knights) > 15: KNIGHT_CLUSTER_MIN = 5 else: KNIGHT_CLUSTER_MIN = 2 except: pass """ worker.designate_roles(gc, blueprinting_queue, blueprinting_assignment, building_assignment, current_worker_roles, karbonite_locations) # print("current worker roles: ",current_worker_roles) try: # walk through our units: num_workers = num_knights = num_rangers = num_mages = num_healers = num_factory = num_rocket = 0 for unit in gc.my_units(): if unit.unit_type == bc.UnitType.Worker: num_workers += 1 elif unit.unit_type == bc.UnitType.Knight: num_knights += 1 elif unit.unit_type == bc.UnitType.Ranger: num_rangers += 1 elif unit.unit_type == bc.UnitType.Mage: num_mages += 1 elif unit.unit_type == bc.UnitType.Healer: