示例#1
0
class BotActions:
    mover: Mover
    turner: Turner
    turretTurner: TurretTurner
    shooter: Shooter
    state: BotState

    edge1 = (70, 75)
    edge2 = (55, 90)
    edgePoints = [(62, 0), (0, 103), (-62, 0), (0, -103)]
    nextPoint = -1

    def __init__(self, state: BotState):
        self.state = state
        self.turner = Turner(state)
        self.turretTurner = TurretTurner(state)
        self.mover = Mover(state, self.turner)
        self.shooter = Shooter(state, self.turretTurner)

    def update(self):
        self.mover.update()
        self.turner.update()
        self.turretTurner.update()
        self.shooter.update()

    def wander(self):
        if not self.mover.finished:
            return False
        if self.nextPoint == -1:
            self.nextPoint = self.edgePoints.index(
                min(self.edgePoints, key=lambda k: get_distance(self.state.me['X'], self.state.me['Y'], k[0], k[1])))
        self.mover.move(self.edgePoints[self.nextPoint][0], self.edgePoints[self.nextPoint][1], self.next_loop)
        return True

    def next_loop(self):
        self.nextPoint = self.nextPoint + 1 if self.nextPoint < len(self.edgePoints) - 1 else 0
        self.wander()

    def go_ammo(self):
        asd = list(filter(lambda x: x['Type'] == 'AmmoPickup' and is_uptodate(x['time']),
                          self.state.game_objects.values()))
        #print(len(asd))
        #for x in asd:
            #print(x['X'], x['Y'])
        ammo_objs = list(map(lambda x: (x, get_distance(self.state.me['X'], self.state.me['Y'], x['X'], x['Y'])), asd))
        if len(ammo_objs) < 1:
            return False

        target = min(ammo_objs, key=lambda x: x[1])[0]
        self.mover.move(target['X'], target['Y'], self.empty)
        self.turretTurner.turn(target['X'], target['Y'])
        return True

    def empty(self):
        pass
示例#2
0
                elif e.type == pygame.KEYDOWN:
                    if e.key == pygame.K_LEFT:
                        s.rect = s.rect.move((-s.dx, 0))
                    elif e.key == pygame.K_RIGHT:
                        s.rect = s.rect.move((s.dx, 0))
                    elif e.key == pygame.K_UP:
                        s.rect = s.rect.move((0, -s.dx))
                    elif e.key == pygame.K_DOWN:
                        s.rect = s.rect.move((0, +s.dx))
                    s.checkBoundaries()

        screen.blit(bg, (0, 0))
        if pygame.sprite.spritecollideany(s, game_map.mushrooms, False):
            print("OLD   :", oldpos)
            curpos = pygame.math.Vector2(s.rect.x, s.rect.y)
            print("CUR   :", curpos)
            s.move(curpos - oldpos)
        for mushroom in game_map.mushrooms:
            m_hit = pygame.sprite.spritecollideany(mushroom, s.bullets, False)
            if m_hit:
                m_hit.kill()
                mushroom.inc_state()

        for mushroom in game_map.mushrooms:
            mushroom.update()
            mushroom.draw()

        s.update()
        s.draw()
        pygame.display.flip()
        clock.tick(30)