The basics of a turtle artist are being able to make creations that are more complicated than a single function.
The goals you should have are:
- Create a class which wraps around a turtle
- This means that it has an internal variable that is a turtle (or multiple turtles)
- All of the class functions will then use that single turtle to do things
- Make it either interactive or periodic.
- Periodic means the Turtle Artist goes through phases and those phases repeat forever.
- This does not mean a single looping turtle that draws the same thing forever.
- You could think of a clock, for example, which constantly updates the time.
- Interactive means that you can use the keyboard to influence how the turtle does things.
- It should be a purposeful design. Randomly doing things is not an acceptable solution.
I recommend the interactive route. There are a lot of cool things you can do!
For instance: :: import turtle class SuperTurtle: def __init__(self): self.grow_bigger = True
- def run(self):
self.screen = turtle.Screen() self.inner_turtle = turtle.Turtle() self.screen.onkey(self.square, "s") self.screen.onkey(self.speed_up, "f") self.screen.onclick(self.hop) self.screen.ontimer(self.size_cycle, 50) self.screen.listen()
- def square(self):
- for i in range(4):
self.inner_turtle.forward(100) self.inner_turtle.left(90)
- def speed_up(self):
current_speed = self.inner_turtle.speed() if current_speed < 10: self.inner_turtle.speed(current_speed+1)
- def hop(self, x, y):
self.inner_turtle.penup() self.inner_turtle.goto(x,y) self.inner_turtle.pendown()
- def size_cycle(self):
s1, s2, s3 = self.inner_turtle.shapesize() if self.grow_bigger: self.inner_turtle.shapesize(s1+1, s2+1, s3) else: self.inner_turtle.shapesize(s1-1, s2-1, s3) if s1+1 > 20: self.grow_bigger = False elif s1-1 < 5: self.grow_bigger = True self.screen.ontimer(self.size_cycle, 50)
bob = SuperTurtle() bob.run() turtle.done()