Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.72 KB | None | 0 0
  1. from turtle import Turtle, mainloop
  2. import random
  3.  
  4. class TurtlePlace:
  5.     def __init__(self, maxTurtles, hWall=200, vWall=200):
  6.         self.rturtle = Turtle()
  7.         self.rScreen = self.rturtle.getscreen()
  8.         self.rturtle.shape('turtle')
  9.         self.turtleList = []
  10.         self.rScreen.onclick(self.placeTurtle)
  11.         self.rturtle.hideturtle()
  12.         self.numTurtles = 0
  13.         self.maxTurtles = maxTurtles
  14.         self.hWall = hWall
  15.         self.vWall = vWall
  16.         self.drawField(hWall, vWall)
  17.         mainloop()
  18.  
  19.     def placeTurtle(self, x, y):
  20.         newTurtle = AnimatedTurtle(self.hWall, self.vWall)
  21.         newScreen = newTurtle.getscreen()
  22.         newScreen.tracer(0)
  23.         newTurtle.up()
  24.         newTurtle.goto(x, y)
  25.         newTurtle.shape('turtle')
  26.         newTurtle.setheading(random.randint(1, 359))
  27.         newScreen.tracer(1)
  28.         self.numTurtles = self.numTurtles + 1
  29.         self.turtleList.append(newTurtle)
  30.         if self.turtleList >= self.maxTurtles:
  31.             self.rScreen.onclick(None)
  32.  
  33.     def drawField(self, hWall, vWall):
  34.         self.rScreen.tracer(0)
  35.         self.rturtle.up()
  36.         self.rturtle.goto(-hWall, -vWall)
  37.         self.rturtle.down()
  38.         for i in range(4):
  39.             self.rturtle.forward(2 * hWall)
  40.             self.rturtle.left(90)
  41.         self.rScreen.tracer(1)
  42.  
  43.  
  44. class AnimatedTurtle(Turtle):
  45.  
  46.     allTurtles = []
  47.  
  48.     def __init__(self, hWall, vWall):
  49.         super().__init__()
  50.         self.scr = self.getscreen()
  51.         self.xmin = -vWall + 10
  52.         self.xmax = vWall - 10
  53.         self.ymin = -hWall + 10
  54.         self.ymax = hWall - 10
  55.         self.scr.ontimer(self._moveOneStep, 100)
  56.         AnimatedTurtle.allTurtles.append(self)
  57.  
  58.     def _moveOneStep(self):
  59.         self._computeNewHeading()
  60.         self.forward(5)
  61.         self.scr.ontimer(self._moveOneStep, 100)
  62.  
  63.     def _computeNewHeading(self):
  64.         xpos, ypos = self.position()
  65.         oldH = self.heading()
  66.         newH = oldH
  67.  
  68.         if xpos > self.xmax or xpos < self.xmin:
  69.             newH = 180 - oldH
  70.         if ypos > self.ymax or ypos < self.ymin:
  71.             newH = 360 - oldH
  72.         if newH != oldH:
  73.             self.setheading(newH)
  74.  
  75.     def _checkCollisions(self):
  76.         for otherTurtle in AnimatedTurtle.allTurtles:
  77.             if self != otherTurtle:
  78.                 if self.distance(otherTurtle) < 20:
  79.                     tempHeading = self.heading()
  80.                     self.setheading(otherTurtle.heading())
  81.                     otherTurtle.setheading(tempHeading)
  82.                     while self.distance(otherTurtle) < 20:
  83.                         self.forward(1)
  84.                         otherTurtle.forward(1)
  85.  
  86. TurtlePlace(5, 200, 200)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement