class TurtleWorld(object): def __init__(self, width, height, borders=wrap, title="TurtlePower"): self.width = width self.half_width = width // 2 self.height = height self.half_height = height // 2 self.borders = borders self.window_title = title self.init_screen() self.fps = 0 self.done = True self.turtles = [] def init_screen(self): # intialise screen and turn off auto-render root = Tk() root.wm_title(self.window_title) window = TK.Canvas(master=root, width=self.width, height=self.height) window.pack() self.screen = TurtleScreen(window) self.screen.tracer(0, 0) def position_turtle(self, t, pos=None, angle=None): # move to location t.hideturtle() t.penup() if pos is None: pos = (randint(-self.half_width, self.half_width), randint(-self.half_height, self.half_height)) x, y = pos t.goto(x, y) if angle is None: angle = random() * 360 t.setheading(angle) # ready to go t.showturtle() t.pendown() return t def random_position(self, turtle): return self.position_turtle(turtle) def _print_fps(self): # pragma: no cover if not self.done: print(self.fps) self.screen.ontimer(self._print_fps, 1000) self.fps = 0 def create_turtle(self, callback, pos=None, angle=None): t = PowerTurtle(self) t.set_callback(callback) self.position_turtle(t, pos, angle) self.turtles.append(t) return t def add_turtle(self, turtle): turtle.clear() self.turtles.append(turtle) def remove_turtle(self, turtle): turtle.hideturtle() turtle.clear() self.turtles.remove(turtle) def run(self, ticks=1000): # run for 1000 ticks self.done = False if DEBUG: self.screen.ontimer(self._print_fps, 1000) self.ticks = ticks self.screen.ontimer(self.tick, 33) if mainloop: mainloop() else: self.screen.mainloop() def tick(self): shuffle(self.turtles) for t in self.turtles: t.callback(self) self.borders(t, self.width, self.height) self.screen.update() self.fps += 1 self.ticks -= 1 if self.ticks == 0: self.done = True else: self.screen.ontimer(self.tick, 33)
class TurtleWorld(object): def __init__(self, width, height, borders=wrap, title="TurtlePower"): self.width = width self.half_width = width // 2 self.height = height self.half_height = height // 2 self.borders = borders self.window_title = title self.init_screen() self.fps = 0 self.done = True self.turtles = [] def init_screen(self): # intialise screen and turn off auto-render root = Tk() root.wm_title(self.window_title) window = TK.Canvas(master=root, width=self.width, height=self.height) window.pack() self.screen = TurtleScreen(window) self.screen.tracer(0, 0) def position_turtle(self, t, pos=None, angle=None): # move to location t.hideturtle() t.penup() if pos is None: pos = (randint(-self.half_width, self.half_width), randint(-self.half_height, self.half_height)) x, y = pos t.goto(x, y) if angle is None: angle = random() * 360 t.setheading(angle) # ready to go t.showturtle() t.pendown() return t def random_position(self, turtle): return self.position_turtle(turtle) def _print_fps(self): # pragma: no cover if not self.done: print(self.fps) self.screen.ontimer(self._print_fps, 1000) self.fps = 0 def create_turtle(self, callback, pos=None, angle=None): t = PowerTurtle(self) t.set_callback(callback) self.position_turtle(t, pos, angle) self.add_turtle(t) return t def add_turtle(self, turtle): turtle.clear() self.turtles.append(turtle) def remove_turtle(self, turtle): turtle.hideturtle() turtle.clear() self.turtles.remove(turtle) def run(self, ticks=1000): # run for 1000 ticks self.done = False if DEBUG: self.screen.ontimer(self._print_fps, 1000) self.ticks = ticks self.screen.ontimer(self.tick, 33) self.screen.update() if mainloop: mainloop() else: self.screen.mainloop() def tick(self): shuffle(self.turtles) for t in self.turtles: t._do_callback() self.borders(t, self.half_width, self.half_height) self.screen.update() self.fps += 1 self.ticks -= 1 if self.ticks == 0: self.done = True else: self.screen.ontimer(self.tick, 33)
class TurtleWorld(object): def __init__(self, width, height, borders=wrap): self.width = width self.half_width = width // 2 self.height = height self.half_height = height // 2 self.borders = borders # intialise screen and turn off auto-render window = TK.Canvas(width=width, height=height) window.pack() self.screen = TurtleScreen(window) self.screen.tracer(0, 0) self.fps = 0 self.done = True self.turtles = [] self.obstacles = [] self.update_freq = 1000 #int(1 / 30.0 * 1000) def position_turtle(self, t, pos, angle): # move to location t.hideturtle() t.penup() if pos is None: x = randint(-self.half_width, self.half_width) y = randint(-self.half_height, self.half_height) else: x, y = pos t.goto(x, y) if angle is None: angle = random() * 360 t.setheading(angle) # ready to go t.showturtle() t.pendown() return t def print_fps(self): if not self.done: print(self.fps) self.screen.ontimer(self.print_fps, 1000) self.fps = 0 def create_turtle(self, callback, pos=None, angle=None): t = PowerTurtle(self) t.set_callback(callback) self.position_turtle(t, pos, angle) self.turtles.append(t) return t def add_turtle(self, turtle): turtle.clear() self.turtles.append(turtle) def remove_turtle(self, turtle): turtle.hideturtle() turtle.clear() self.turtles.remove(turtle) def add_obstacle(self, obstacle): self.obstacles.append(obstacle) self.add_turtle(obstacle) def something_at(self, pos): for obstacle in self.obstacles: if obstacle.contains(pos[0], pos[1]): return True return False def run(self, ticks=1000): # run for 1000 ticks self.done = False #self.screen.ontimer(self.print_fps, 1000) self.ticks = ticks self.screen.ontimer(self.tick, 33) mainloop() def tick(self): shuffle(self.turtles) for t in self.turtles: t.callback(self) self.borders(t, self.width, self.height) self.screen.update() self.fps += 1 self.ticks -= 1 if self.ticks == 0: self.done = True else: self.screen.ontimer(self.tick, 33)
class TurtleWorld(object): def __init__(self, width, height, borders=wrap): self.width = width self.half_width = width // 2 self.height = height self.half_height = height // 2 self.borders = borders # intialise screen and turn off auto-render window = TK.Canvas(width=width, height=height) window.pack() self.screen = TurtleScreen(window) self.screen.tracer(0, 0) self.fps = 0 self.done = True self.turtles = [] self.update_freq = 1000 #int(1 / 30.0 * 1000) def position_turtle(self, t, pos, angle): # move to location t.hideturtle() t.penup() if pos is None: x = randint(-self.half_width, self.half_width) y = randint(-self.half_height, self.half_height) else: x, y = pos t.goto(x, y) if angle is None: angle = random() * 360 t.setheading(angle) # ready to go t.showturtle() t.pendown() return t def print_fps(self): if not self.done: print(self.fps) self.screen.ontimer(self.print_fps, 1000) self.fps = 0 def create_turtle(self, callback, pos=None, angle=None): t = PowerTurtle(self) t.set_callback(callback) self.position_turtle(t, pos, angle) self.turtles.append(t) return t def add_turtle(self, turtle): turtle.clear() self.turtles.append(turtle) def remove_turtle(self, turtle): turtle.hideturtle() turtle.clear() self.turtles.remove(turtle) def run(self, ticks=1000): # run for 1000 ticks self.done = False #self.screen.ontimer(self.print_fps, 1000) self.ticks = ticks self.screen.ontimer(self.tick, 33) mainloop() def tick(self): shuffle(self.turtles) for t in self.turtles: t.callback(self) self.borders(t, self.width, self.height) self.screen.update() self.fps += 1 self.ticks -= 1 if self.ticks == 0: self.done = True else: self.screen.ontimer(self.tick, 33)
t.right(angle) t.forward(max_speed) # fps tracking frames = 0 def print_frames(): global frames print(frames) frames = 0 s.ontimer(print_frames, 1000) s.ontimer(print_frames, 1000) # run for 1000 ticks mt = mc = 0 rt = rc = 0 for i in range(200): start = time() for t in turtles: random_walk(t) wrap(t) mt += time() - start mc += 1 start = time() s.update() rt += time() - start rc += 1
"""Simple random walk""" angle = random() * max_turn * 2 - max_turn t.right(angle) t.forward(max_speed) # fps tracking frames = 0 def print_frames(): global frames print(frames) frames = 0 s.ontimer(print_frames, 1000) s.ontimer(print_frames, 1000) # run for 1000 ticks mt = mc = 0 rt = rc = 0 for i in range(200): start = time() for t in turtles: random_walk(t) wrap(t) mt += time() - start mc += 1 start = time() s.update() rt += time() - start rc += 1