| 
									
										
										
										
											2010-03-19 20:58:52 +00:00
										 |  |  | """      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() |