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
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)