class Controller: def __init__(self): #self.flock = Flock() self.flockb = Flock() def draw(self): background(230, 230, 230) #self.flock.draw() self.flockb.draw()
from flock import Flock f = Flock(100,100,100) f.draw() f.draw() f.draw() f.draw()
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))
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()