• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""      turtle-example-suite:
2
3         tdemo_round_dance.py
4
5(Needs version 1.1 of the turtle module that
6comes with Python 3.1)
7
8Dancing turtles have a compound shape
9consisting of a series of triangles of
10decreasing size.
11
12Turtles march along a circle while rotating
13pairwise in opposite direction, with one
14exception. Does that breaking of symmetry
15enhance the attractiveness of the example?
16
17Press any key to stop the animation.
18
19Technically: demonstrates use of compound
20shapes, transformation of shapes as well as
21cloning turtles. The animation is
22controlled through update().
23"""
24
25from turtle import *
26
27def stop():
28    global running
29    running = False
30
31def main():
32    global running
33    clearscreen()
34    bgcolor("gray10")
35    tracer(False)
36    shape("triangle")
37    f =   0.793402
38    phi = 9.064678
39    s = 5
40    c = 1
41    # create compound shape
42    sh = Shape("compound")
43    for i in range(10):
44        shapesize(s)
45        p =get_shapepoly()
46        s *= f
47        c *= f
48        tilt(-phi)
49        sh.addcomponent(p, (c, 0.25, 1-c), "black")
50    register_shape("multitri", sh)
51    # create dancers
52    shapesize(1)
53    shape("multitri")
54    pu()
55    setpos(0, -200)
56    dancers = []
57    for i in range(180):
58        fd(7)
59        tilt(-4)
60        lt(2)
61        update()
62        if i % 12 == 0:
63            dancers.append(clone())
64    home()
65    # dance
66    running = True
67    onkeypress(stop)
68    listen()
69    cs = 1
70    while running:
71        ta = -4
72        for dancer in dancers:
73            dancer.fd(7)
74            dancer.lt(2)
75            dancer.tilt(ta)
76            ta = -4 if ta > 0 else 2
77        if cs < 180:
78            right(4)
79            shapesize(cs)
80            cs *= 1.005
81        update()
82    return "DONE!"
83
84if __name__=='__main__':
85    print(main())
86    mainloop()
87