class Controller:
    def __init__(self):
        #self.flock = Flock()
        self.flockb = Flock()
        
    def draw(self):        
        background(230, 230, 230)

        #self.flock.draw()
        self.flockb.draw()
示例#2
0
文件: sim.py 项目: snoe/matrix
from flock import Flock

f = Flock(100,100,100)
f.draw()
f.draw()
f.draw()
f.draw()
示例#3
0
class Level(abc.ABC):
    entrance_gate_position = None
    exit_gate_position = None
    new_events = []
    landing_zone_top = 820
    maximum_plant_level = landing_zone_top
    minimum_plant_level = 600
    exit_gate_open = True
    name = None
    extra_help_lines = []

    def __init__(self, game):
        self.game = game
        self.canvas = game.canvas
        self.background = pygame.image.load(
            os.path.join('images', self.name.lower(), 'background.png'))

        self.console_image = pygame.image.load(
            os.path.join('images', self.name.lower(), 'console.png'))
        self.attractors = []
        self.flock = None
        self.flock = Flock(self)
        self.has_visited = False
        self._level_complete = False

        if self.exit_gate_position:
            self.attractors.append(
                Attractor(self.exit_gate_position, 500,
                          Settings.gate_radius * 2))
        # 'Attractors': AttractorsRule(self, 1, [Attractor((300, 300), 50)]),
        self.flowers = []

        self.init_level()

    @abc.abstractmethod
    def init_level(self):
        pass

    @abc.abstractmethod
    def level_complete_check(self):
        pass

    def on_first_entry(self):
        pass

    def leader_enters(self):
        if not self.has_visited:
            self.game.event_handler.activate(self.new_events)
            self.game.help_lines += self.extra_help_lines
            self.on_first_entry()
            self.game.state = GameState.READ_INTRO

    # def first_visitor(self):
    #     """First time any boid visits this level"""
    #
    # def visit(self):
    #     if not self.has_visited:
    #         self.first_visitor()
    #         self.has_visited = True

    @property
    def level_complete(self):
        if logger.getEffectiveLevel() <= logging.DEBUG:
            return True

        # Once passed, a level stays done, even if the test starts failing again
        if self._level_complete:
            return True
        if self.level_complete_check():
            self._level_complete = True
        return self._level_complete

    @property
    def contains_leader(self):
        return self.flock.leader is not None

    def update(self, duration):
        self.flock.update(duration)
        [flower.update(duration) for flower in self.flowers]

    def draw(self):
        self.canvas.blit(self.background, (0, 0))
        # [
        #     item.draw(self.canvas)
        #     for item in self.flowers
        # ]
        [flower.draw() for flower in self.flowers]
        self.flock.draw()
        if self.entrance_gate_position:
            pygame.draw.circle(self.canvas, pygame.Color('green'),
                               self.entrance_gate_position,
                               Settings.gate_radius, 2)

        if self.exit_gate_position:
            if not self.exit_gate_open:
                colour = pygame.Color('red')
            elif not self.level_complete:
                colour = pygame.Color('blue')
            else:
                colour = pygame.Color('green')
            pygame.draw.circle(self.canvas, colour, self.exit_gate_position,
                               Settings.gate_radius, 2)

        self.canvas.blit(self.console_image, (0, 0))
示例#4
0
def main():
    pygame.init()
    display = pygame.display.set_mode((600, 600))
    random.seed(time.time())

    flock = Flock(60)
    clock = pygame.time.Clock()

    useTree = True
    showTree = True
    useCohesion = True
    useSeperation = True
    useAlignment = True

    instructions = """
    Click Mouse to add Boid.
    Press 1 to toggle use Quad-tree.
    Press 2 to toggle show Quad-tree.
    Press 3 to toggle Cohesion between Boids.
    Press 4 to toggle Seperation between Boids.
    Press 5 to toggle Alignment between Boids.
    """
    print(instructions)

    while True:

        #limit to 30 fps
        clock.tick(30)
        fps = clock.get_fps()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                flock.insertBoid((pygame.mouse.get_pos()))
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_1:
                    #toggle using Quadtree
                    useTree = not useTree
                if event.key == pygame.K_2:
                    #toggle showing tree
                    showTree = not showTree
                if event.key == pygame.K_3:
                    #toggle Cohesion
                    useCohesion = not useCohesion
                if event.key == pygame.K_4:
                    #toggle Seperation
                    useSeperation = not useSeperation
                if event.key == pygame.K_5:
                    #toggle Alignment
                    useAlignment = not useAlignment
                if event.key == pygame.K_BACKSPACE:
                    flock.removeBoid()

        flockLen = len(flock.flock)
        pygame.display.set_caption(
            "Boids Simulation - Boids: {0} - FPS: {1}".format(
                flockLen, int(fps)))

        #very basic menu, will implement buttons later.
        states = '\r    # of Boids: {0},' \
                 ' Use Qtree: {1},' \
                 ' Show Qtree: {2},' \
                 ' Cohesion: {3},' \
                 ' Seperation: {4},' \
                 ' Alignment: {5}     '.\
            format(flockLen, useTree, showTree, useCohesion, useSeperation, useAlignment)

        print(states, end="")

        display.fill((10, 10, 60))
        flock.draw(useTree, showTree, useCohesion, useSeperation, useAlignment)
        pygame.display.flip()