Exemple #1
0
class World(object):
	""" 
	contains flock, perimeter and obstacles.
	doesn't have ros stuff other serialization to 
	messages.

	"""
	def __init__(self, perimeter_points, num_boids=30):
		self.perimeter = Perimeter(perimeter_points)
		self.minx, self.miny, self.maxx, self.maxy = self.perimeter.get_bounds()
		self.num_boids = num_boids
		self.flock = Flock(num_boids, self.perimeter)
		self.static_obstacles = []
		self.dynamic_obstacles = []
		self.goals = []
		self.agents = []
		self.set_static_obstacles()			

	def update(self):
		for agent in self.agents:
			agent.update()
		self.flock.update(self.static_obstacles + self.dynamic_obstacles, self.goals, self.agents)

	def set_dynamic_obstacles(self, polygon_perimeters):
		self.dynamic_obstacles = [Obstacle(p) for p in polygon_perimeters]

	def set_static_obstacles(self):
		corners = [[self.minx, self.miny], [self.minx, self.maxy], [self.maxx, self.maxy], [self.maxx, self.miny]]
		self.static_obstacles =  [obstacle_from_point(c) for c in corners]
	
		world_barrier_points = [[-65, 190], [55, 190], [55, 210], [-65, 230]]
		world_barrier = Obstacle(world_barrier_points)
		self.static_obstacles.append(world_barrier)

	def set_goals(self, xys):
		self.goals = [Goal(*xy) for xy in xys]
Exemple #2
0
'''Simple script for running the program'''
from flock import Flock

# Parameters
time_steps = 200
number_of_birds = 150
is_predator_present = True

# Initialize flock
myFlock = Flock(number_of_birds, predator=is_predator_present)

# Run simulation
for m in range(0, time_steps):
    myFlock.update()
    myFlock.drawPlot(m)
Exemple #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))