def update(self): if not self.manipulator.is_alive(): return position = self.manipulator.get_largest_blob().get_position() middle = vector.divide(self.manipulator.get_board_size(), 2) self.manipulator.set_velocity(vector.substract(middle, position))
def _draw_centered_text(self, text, pos, col): textsurface = self.font.render(text, ANTIALIASING, col) size = vector.divide(self.font.size(text), 2) mapped_pos = vector.substract(self._map_coord_to_screen(pos), size) x = int(mapped_pos[0] + 1 + 0.5) y = int(mapped_pos[1] + 1 + 0.5) self.screen.blit(textsurface, (x,y))
def update(self): if not self.manipulator.is_alive(): return mouse_position = pygame.mouse.get_pos() direction = vector.substract(mouse_position, self.view_center) direction = vector.divide(direction, self.player_radius) self.manipulator.set_velocity(direction) for event in self.model.events: if event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: self.manipulator.divide() elif event.button == 3: self.manipulator.shoot()
def update(self): if not self.manipulator.is_alive(): return blob = self.manipulator.get_largest_blob() others = self.manipulator.get_other_items() best_target = None for item in others: distance = vector.squared_distance(blob.get_position(), item.get_position()) if isinstance(item, PelletProxy) or isinstance( item, LargePelletProxy): value = item.get_bonus_weight()**2 / distance run_away = False elif isinstance(item, BlobProxy) or isinstance( item, BulletBlobProxy): if item.get_weight() * (BLOB_WEIGHT_RATIO_TO_EAT * 1.1) > blob.get_weight(): value = item.get_weight()**2 / distance run_away = True elif blob.get_weight( ) * BLOB_WEIGHT_RATIO_TO_EAT > item.get_weight(): value = item.get_weight()**2 / distance run_away = False else: continue else: continue if best_target is None or value > best_target[1]: best_target = (item, value, run_away) if best_target is None: position = self.manipulator.get_blob_family_positions_and_weights( )[0][0] middle = vector.divide(self.manipulator.get_board_size(), 2) self.manipulator.set_velocity(vector.substract(middle, position)) elif best_target[2]: self.manipulator.set_velocity( vector.normalize( vector.substract(blob.get_position(), best_target[0].get_position()))) else: self.manipulator.set_velocity( vector.normalize( vector.substract(best_target[0].get_position(), blob.get_position())))
def update(self): if not self.manipulator.is_alive(): return main_blob = self.manipulator.get_largest_blob() others = self.manipulator.get_other_items() closest = None for item in others: if isinstance(item, PelletProxy) or isinstance(item, LargePelletProxy): distance = vector.squared_distance(main_blob.get_position(), item.get_position()) if closest is None or distance < closest[1]: closest = (item.get_position(), distance) if closest is None: position = self.manipulator.get_largest_blob().get_position() middle = vector.divide(self.manipulator.get_board_size(), 2) self.manipulator.set_velocity(vector.substract(middle, position)) else: self.manipulator.set_velocity(vector.normalize(vector.substract(closest[0], main_blob.get_position())))
def get_average_position(self): position_sum = reduce(lambda x, y: vector.add(x, y), [vector.multiply(blob.get_position(), blob.get_weight()) for blob in self.blobs]) return vector.divide(position_sum, sum([blob.get_weight() for blob in self.blobs]))
def __init__(self, view_size, player_radius, model): self.view_center = vector.divide(view_size, 2) self.player_radius = player_radius self.model = model
def __set_resize_offset(self): screen_center = vector.divide(self.screen.get_size(), 2) scale_position = vector.multiply( self.center_blob_family.get_largest_blob().get_position(), self._get_resize_ratio()) self.resize_offset = vector.substract(screen_center, scale_position)
#Constants GHOST_BASE = (14, 13) UP = (0, -1) DOWN = (0, 1) RIGHT = (1, 0) LEFT = (-1, 0) X = 0 Y = 1 WIDTH = 28 HEIGHT = 31 SIZES = (WIDTH, HEIGHT) WINDOW = vector.multiply_scalar(SIZES, 20) FPS = 60 LPS = 5 DELAY = FPS / LPS UNIT = vector.divide(WINDOW, SIZES) ANIMATION = 1 / DELAY if UNIT[X] < UNIT[Y]: MIN = UNIT[X] else: MIN = UNIT[Y] DOT_RADIUS = MIN / 4 PADDING = MIN / 8 BLACK = (0, 0, 0) YELLOW = (255, 255, 0) PURPLE = (52, 0, 118) PINK = (255, 0, 255) RED = (255, 0, 0) BLUE = (0, 0, 255) GREEN = (0, 255, 0) DOT_COLOR = YELLOW