17db96d56Sopenharmony_ci"""      turtle-example-suite:
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci          tdemo_wikipedia3.py
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciThis example is
67db96d56Sopenharmony_ciinspired by the Wikipedia article on turtle
77db96d56Sopenharmony_cigraphics. (See example wikipedia1 for URLs)
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciFirst we create (ne-1) (i.e. 35 in this
107db96d56Sopenharmony_ciexample) copies of our first turtle p.
117db96d56Sopenharmony_ciThen we let them perform their steps in
127db96d56Sopenharmony_ciparallel.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciFollowed by a complete undo().
157db96d56Sopenharmony_ci"""
167db96d56Sopenharmony_cifrom turtle import Screen, Turtle, mainloop
177db96d56Sopenharmony_cifrom time import perf_counter as clock, sleep
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_cidef mn_eck(p, ne,sz):
207db96d56Sopenharmony_ci    turtlelist = [p]
217db96d56Sopenharmony_ci    #create ne-1 additional turtles
227db96d56Sopenharmony_ci    for i in range(1,ne):
237db96d56Sopenharmony_ci        q = p.clone()
247db96d56Sopenharmony_ci        q.rt(360.0/ne)
257db96d56Sopenharmony_ci        turtlelist.append(q)
267db96d56Sopenharmony_ci        p = q
277db96d56Sopenharmony_ci    for i in range(ne):
287db96d56Sopenharmony_ci        c = abs(ne/2.0-i)/(ne*.7)
297db96d56Sopenharmony_ci        # let those ne turtles make a step
307db96d56Sopenharmony_ci        # in parallel:
317db96d56Sopenharmony_ci        for t in turtlelist:
327db96d56Sopenharmony_ci            t.rt(360./ne)
337db96d56Sopenharmony_ci            t.pencolor(1-c,0,c)
347db96d56Sopenharmony_ci            t.fd(sz)
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_cidef main():
377db96d56Sopenharmony_ci    s = Screen()
387db96d56Sopenharmony_ci    s.bgcolor("black")
397db96d56Sopenharmony_ci    p=Turtle()
407db96d56Sopenharmony_ci    p.speed(0)
417db96d56Sopenharmony_ci    p.hideturtle()
427db96d56Sopenharmony_ci    p.pencolor("red")
437db96d56Sopenharmony_ci    p.pensize(3)
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci    s.tracer(36,0)
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci    at = clock()
487db96d56Sopenharmony_ci    mn_eck(p, 36, 19)
497db96d56Sopenharmony_ci    et = clock()
507db96d56Sopenharmony_ci    z1 = et-at
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci    sleep(1)
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci    at = clock()
557db96d56Sopenharmony_ci    while any(t.undobufferentries() for t in s.turtles()):
567db96d56Sopenharmony_ci        for t in s.turtles():
577db96d56Sopenharmony_ci            t.undo()
587db96d56Sopenharmony_ci    et = clock()
597db96d56Sopenharmony_ci    return "runtime: %.3f sec" % (z1+et-at)
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ciif __name__ == '__main__':
637db96d56Sopenharmony_ci    msg = main()
647db96d56Sopenharmony_ci    print(msg)
657db96d56Sopenharmony_ci    mainloop()
66