87 lines
1.8 KiB
Python
87 lines
1.8 KiB
Python
|
""" turtle-example-suite:
|
||
|
|
||
|
tdemo_round_dance.py
|
||
|
|
||
|
(Needs version 1.1 of the turtle module that
|
||
|
comes with Python 3.1)
|
||
|
|
||
|
Dancing turtles have a compound shape
|
||
|
consisting of a series of triangles of
|
||
|
decreasing size.
|
||
|
|
||
|
Turtles march along a circle while rotating
|
||
|
pairwise in opposite direction, with one
|
||
|
exception. Does that breaking of symmetry
|
||
|
enhance the attractiveness of the example?
|
||
|
|
||
|
Press any key to stop the animation.
|
||
|
|
||
|
Technically: demonstrates use of compound
|
||
|
shapes, transformation of shapes as well as
|
||
|
cloning turtles. The animation is
|
||
|
controlled through update().
|
||
|
"""
|
||
|
|
||
|
from turtle import *
|
||
|
|
||
|
def stop():
|
||
|
global running
|
||
|
running = False
|
||
|
|
||
|
def main():
|
||
|
global running
|
||
|
clearscreen()
|
||
|
bgcolor("gray10")
|
||
|
tracer(False)
|
||
|
shape("triangle")
|
||
|
f = 0.793402
|
||
|
phi = 9.064678
|
||
|
s = 5
|
||
|
c = 1
|
||
|
# create compound shape
|
||
|
sh = Shape("compound")
|
||
|
for i in range(10):
|
||
|
shapesize(s)
|
||
|
p =get_shapepoly()
|
||
|
s *= f
|
||
|
c *= f
|
||
|
tilt(-phi)
|
||
|
sh.addcomponent(p, (c, 0.25, 1-c), "black")
|
||
|
register_shape("multitri", sh)
|
||
|
# create dancers
|
||
|
shapesize(1)
|
||
|
shape("multitri")
|
||
|
pu()
|
||
|
setpos(0, -200)
|
||
|
dancers = []
|
||
|
for i in range(180):
|
||
|
fd(7)
|
||
|
tilt(-4)
|
||
|
lt(2)
|
||
|
update()
|
||
|
if i % 12 == 0:
|
||
|
dancers.append(clone())
|
||
|
home()
|
||
|
# dance
|
||
|
running = True
|
||
|
onkeypress(stop)
|
||
|
listen()
|
||
|
cs = 1
|
||
|
while running:
|
||
|
ta = -4
|
||
|
for dancer in dancers:
|
||
|
dancer.fd(7)
|
||
|
dancer.lt(2)
|
||
|
dancer.tilt(ta)
|
||
|
ta = -4 if ta > 0 else 2
|
||
|
if cs < 180:
|
||
|
right(4)
|
||
|
shapesize(cs)
|
||
|
cs *= 1.005
|
||
|
update()
|
||
|
return "DONE!"
|
||
|
|
||
|
if __name__=='__main__':
|
||
|
print(main())
|
||
|
mainloop()
|