Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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())))
Exemplo n.º 5
0
    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())))
Exemplo n.º 6
0
 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]))
Exemplo n.º 7
0
 def __init__(self, view_size, player_radius, model):
     self.view_center = vector.divide(view_size, 2)
     self.player_radius = player_radius
     self.model = model
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
#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