Blame Lib/turtledemo/bytedesign.py

rpm-build 2bd099
#!/usr/bin/env python3
rpm-build 2bd099
"""      turtle-example-suite:
rpm-build 2bd099
rpm-build 2bd099
        tdemo_bytedesign.py
rpm-build 2bd099
rpm-build 2bd099
An example adapted from the example-suite
rpm-build 2bd099
of PythonCard's turtle graphics.
rpm-build 2bd099
rpm-build 2bd099
It's based on an article in BYTE magazine
rpm-build 2bd099
Problem Solving with Logo: Using Turtle
rpm-build 2bd099
Graphics to Redraw a Design
rpm-build 2bd099
November 1982, p. 118 - 134
rpm-build 2bd099
rpm-build 2bd099
-------------------------------------------
rpm-build 2bd099
rpm-build 2bd099
Due to the statement
rpm-build 2bd099
rpm-build 2bd099
t.delay(0)
rpm-build 2bd099
rpm-build 2bd099
in line 152, which sets the animation delay
rpm-build 2bd099
to 0, this animation runs in "line per line"
rpm-build 2bd099
mode as fast as possible.
rpm-build 2bd099
"""
rpm-build 2bd099
rpm-build 2bd099
from turtle import Turtle, mainloop
rpm-build 2bd099
from time import clock
rpm-build 2bd099
rpm-build 2bd099
# wrapper for any additional drawing routines
rpm-build 2bd099
# that need to know about each other
rpm-build 2bd099
class Designer(Turtle):
rpm-build 2bd099
rpm-build 2bd099
    def design(self, homePos, scale):
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        for i in range(5):
rpm-build 2bd099
            self.forward(64.65 * scale)
rpm-build 2bd099
            self.down()
rpm-build 2bd099
            self.wheel(self.position(), scale)
rpm-build 2bd099
            self.up()
rpm-build 2bd099
            self.backward(64.65 * scale)
rpm-build 2bd099
            self.right(72)
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.goto(homePos)
rpm-build 2bd099
        self.right(36)
rpm-build 2bd099
        self.forward(24.5 * scale)
rpm-build 2bd099
        self.right(198)
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        self.centerpiece(46 * scale, 143.4, scale)
rpm-build 2bd099
        self.getscreen().tracer(True)
rpm-build 2bd099
rpm-build 2bd099
    def wheel(self, initpos, scale):
rpm-build 2bd099
        self.right(54)
rpm-build 2bd099
        for i in range(4):
rpm-build 2bd099
            self.pentpiece(initpos, scale)
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        self.left(36)
rpm-build 2bd099
        for i in range(5):
rpm-build 2bd099
            self.tripiece(initpos, scale)
rpm-build 2bd099
        self.left(36)
rpm-build 2bd099
        for i in range(5):
rpm-build 2bd099
            self.down()
rpm-build 2bd099
            self.right(72)
rpm-build 2bd099
            self.forward(28 * scale)
rpm-build 2bd099
            self.up()
rpm-build 2bd099
            self.backward(28 * scale)
rpm-build 2bd099
        self.left(54)
rpm-build 2bd099
        self.getscreen().update()
rpm-build 2bd099
rpm-build 2bd099
    def tripiece(self, initpos, scale):
rpm-build 2bd099
        oldh = self.heading()
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        self.backward(2.5 * scale)
rpm-build 2bd099
        self.tripolyr(31.5 * scale, scale)
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.goto(initpos)
rpm-build 2bd099
        self.setheading(oldh)
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        self.backward(2.5 * scale)
rpm-build 2bd099
        self.tripolyl(31.5 * scale, scale)
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.goto(initpos)
rpm-build 2bd099
        self.setheading(oldh)
rpm-build 2bd099
        self.left(72)
rpm-build 2bd099
        self.getscreen().update()
rpm-build 2bd099
rpm-build 2bd099
    def pentpiece(self, initpos, scale):
rpm-build 2bd099
        oldh = self.heading()
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.forward(29 * scale)
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        for i in range(5):
rpm-build 2bd099
            self.forward(18 * scale)
rpm-build 2bd099
            self.right(72)
rpm-build 2bd099
        self.pentr(18 * scale, 75, scale)
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.goto(initpos)
rpm-build 2bd099
        self.setheading(oldh)
rpm-build 2bd099
        self.forward(29 * scale)
rpm-build 2bd099
        self.down()
rpm-build 2bd099
        for i in range(5):
rpm-build 2bd099
            self.forward(18 * scale)
rpm-build 2bd099
            self.right(72)
rpm-build 2bd099
        self.pentl(18 * scale, 75, scale)
rpm-build 2bd099
        self.up()
rpm-build 2bd099
        self.goto(initpos)
rpm-build 2bd099
        self.setheading(oldh)
rpm-build 2bd099
        self.left(72)
rpm-build 2bd099
        self.getscreen().update()
rpm-build 2bd099
rpm-build 2bd099
    def pentl(self, side, ang, scale):
rpm-build 2bd099
        if side < (2 * scale): return
rpm-build 2bd099
        self.forward(side)
rpm-build 2bd099
        self.left(ang)
rpm-build 2bd099
        self.pentl(side - (.38 * scale), ang, scale)
rpm-build 2bd099
rpm-build 2bd099
    def pentr(self, side, ang, scale):
rpm-build 2bd099
        if side < (2 * scale): return
rpm-build 2bd099
        self.forward(side)
rpm-build 2bd099
        self.right(ang)
rpm-build 2bd099
        self.pentr(side - (.38 * scale), ang, scale)
rpm-build 2bd099
rpm-build 2bd099
    def tripolyr(self, side, scale):
rpm-build 2bd099
        if side < (4 * scale): return
rpm-build 2bd099
        self.forward(side)
rpm-build 2bd099
        self.right(111)
rpm-build 2bd099
        self.forward(side / 1.78)
rpm-build 2bd099
        self.right(111)
rpm-build 2bd099
        self.forward(side / 1.3)
rpm-build 2bd099
        self.right(146)
rpm-build 2bd099
        self.tripolyr(side * .75, scale)
rpm-build 2bd099
rpm-build 2bd099
    def tripolyl(self, side, scale):
rpm-build 2bd099
        if side < (4 * scale): return
rpm-build 2bd099
        self.forward(side)
rpm-build 2bd099
        self.left(111)
rpm-build 2bd099
        self.forward(side / 1.78)
rpm-build 2bd099
        self.left(111)
rpm-build 2bd099
        self.forward(side / 1.3)
rpm-build 2bd099
        self.left(146)
rpm-build 2bd099
        self.tripolyl(side * .75, scale)
rpm-build 2bd099
rpm-build 2bd099
    def centerpiece(self, s, a, scale):
rpm-build 2bd099
        self.forward(s); self.left(a)
rpm-build 2bd099
        if s < (7.5 * scale):
rpm-build 2bd099
            return
rpm-build 2bd099
        self.centerpiece(s - (1.2 * scale), a, scale)
rpm-build 2bd099
rpm-build 2bd099
def main():
rpm-build 2bd099
    t = Designer()
rpm-build 2bd099
    t.speed(0)
rpm-build 2bd099
    t.hideturtle()
rpm-build 2bd099
    t.getscreen().delay(0)
rpm-build 2bd099
    t.getscreen().tracer(0)
rpm-build 2bd099
    at = clock()
rpm-build 2bd099
    t.design(t.position(), 2)
rpm-build 2bd099
    et = clock()
rpm-build 2bd099
    return "runtime: %.2f sec." % (et-at)
rpm-build 2bd099
rpm-build 2bd099
if __name__ == '__main__':
rpm-build 2bd099
    msg = main()
rpm-build 2bd099
    print(msg)
rpm-build 2bd099
    mainloop()