| """ 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() |