Exemplo n.º 1
0
    def resolve(self):
        res = []
        enemies = self.c.get_enemies()
        allies = self.c.get_allies()
        if self.c.me.type == TrooperType.FIELD_MEDIC:
            # Medic shouldn't run too far
            max_dist = max([self.c.distance_to(a.x, a.y)] for a in allies)
            if max_dist > 4:
                return []

        for t in enemies:
            dangerous = False
            for a in allies:
                if t.get_distance_to_unit(a) <= t.shooting_range:
                    dangerous = True
            self.c.log('Enemy %s at (%d, %d) : %s' % (trooper_type_string(t.type), t.x, t.y, str(dangerous)))
            if dangerous:
                if not self.c.can_shoot(self.c.me, t):
                    res.append(MoveOrder(self.c, self.priority + 100 - 10*self.c.distance_to(t.x, t.y), t.x, t.y))

        return res
Exemplo n.º 2
0
    def make_move(self, c):
        self.c = c
        self.c.log('\n=== TURN %d === ' % self.c.world.move_index)
        self.c.log('Current player: %10s  (%d, %d)  AP: %d  HP: %d' %
            (trooper_type_string(self.c.me.type),
             self.c.me.x,
             self.c.me.y,
             self.c.me.action_points,
             self.c.me.hitpoints)
        )
        self.c.log('enemies: ', new_line=False)
        for e in self.c.get_enemies():
            self.c.log(str((e.x, e.y)), new_line=False)
        self.c.log('')
        orders = self.init_orders()

        while True:
            orders = filter(
                lambda o: o.min_cost <= self.c.me.action_points,
                orders
            )
            if not orders:
                break

            cur_order = max(orders, key=operator.attrgetter('priority'))
            orders = filter(lambda o: o != cur_order, orders)
            self.c.log('= Chosen: %s' % cur_order)
            if isinstance(cur_order, IntentOrder):
                new_orders = cur_order.resolve()
                for order in new_orders:
                    self.c.log('\t%d %s' % (order.priority, order))
                orders.extend(new_orders)
            else:
                if cur_order.make_move():
                    break
        self.c.log('RESULT MOVE: %s  direction: %s  x: %s  y: %s' %
                   (action_type_string(self.c.move.action),
                    direction_type_string(self.c.move.direction), self.c.move.x, self.c.move.y))