Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from turtle import Turtle, mainloop
- import random
- class TurtlePlace:
- def __init__(self, maxTurtles, hWall=200, vWall=200):
- self.rturtle = Turtle()
- self.rScreen = self.rturtle.getscreen()
- self.rturtle.shape('turtle')
- self.turtleList = []
- self.rScreen.onclick(self.placeTurtle)
- self.rturtle.hideturtle()
- self.numTurtles = 0
- self.maxTurtles = maxTurtles
- self.hWall = hWall
- self.vWall = vWall
- self.drawField(hWall, vWall)
- mainloop()
- def placeTurtle(self, x, y):
- newTurtle = AnimatedTurtle(self.hWall, self.vWall)
- newScreen = newTurtle.getscreen()
- newScreen.tracer(0)
- newTurtle.up()
- newTurtle.goto(x, y)
- newTurtle.shape('turtle')
- newTurtle.setheading(random.randint(1, 359))
- newScreen.tracer(1)
- self.numTurtles = self.numTurtles + 1
- self.turtleList.append(newTurtle)
- if self.turtleList >= self.maxTurtles:
- self.rScreen.onclick(None)
- def drawField(self, hWall, vWall):
- self.rScreen.tracer(0)
- self.rturtle.up()
- self.rturtle.goto(-hWall, -vWall)
- self.rturtle.down()
- for i in range(4):
- self.rturtle.forward(2 * hWall)
- self.rturtle.left(90)
- self.rScreen.tracer(1)
- class AnimatedTurtle(Turtle):
- allTurtles = []
- def __init__(self, hWall, vWall):
- super().__init__()
- self.scr = self.getscreen()
- self.xmin = -vWall + 10
- self.xmax = vWall - 10
- self.ymin = -hWall + 10
- self.ymax = hWall - 10
- self.scr.ontimer(self._moveOneStep, 100)
- AnimatedTurtle.allTurtles.append(self)
- def _moveOneStep(self):
- self._computeNewHeading()
- self.forward(5)
- self.scr.ontimer(self._moveOneStep, 100)
- def _computeNewHeading(self):
- xpos, ypos = self.position()
- oldH = self.heading()
- newH = oldH
- if xpos > self.xmax or xpos < self.xmin:
- newH = 180 - oldH
- if ypos > self.ymax or ypos < self.ymin:
- newH = 360 - oldH
- if newH != oldH:
- self.setheading(newH)
- def _checkCollisions(self):
- for otherTurtle in AnimatedTurtle.allTurtles:
- if self != otherTurtle:
- if self.distance(otherTurtle) < 20:
- tempHeading = self.heading()
- self.setheading(otherTurtle.heading())
- otherTurtle.setheading(tempHeading)
- while self.distance(otherTurtle) < 20:
- self.forward(1)
- otherTurtle.forward(1)
- TurtlePlace(5, 200, 200)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement