U e5dd1ãO@s2dZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z ddl m Z ddlmZdddd d d d d dg Zdddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-gZd.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZeeeedgZdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZd€d�d‚dƒddd„d…d†d‡dˆd‰d‰dŠd‹dŒd�dŽd�d�d‘œZd’d“„Zd”d•„Zz eeƒWnek �red–ƒYnXGd—d„deƒZd˜d™„Zdšd›„ZdœZdÓdždŸ„ZGd d„dej ƒZ!ee!ej"d¡ƒGd¢d£„d£ej#ƒZ$ej"Z"Gd¤d¥„d¥e%ƒZ&Gd¦d„deƒZ'Gd§d¨„d¨eƒZ(Gd©d „d e%ƒZ)Gdªd«„d«e%ƒZ*Gd¬d„de&ƒZ+Gd­d®„d®e%ƒZ,Gd¯d°„d°e%ƒZ-Gd±d²„d²e%ƒZ.Gd³d „d e-e,ƒZ/e/Z0d´d„Z1Gdµd¶„d¶e+ƒZ2Gd·d „d e/ƒZ3e3Z4dÔd¹d}„Z5dºd»„Z6ed¼Z7ze7dŒk�rne6e7ƒWn@e8k �r�ed½e7ƒYn"ek �r°ed¾e7ƒYnXd¿dÀ„Z9dÁd„Z:dÃdÄ„Z;dÅZZ?e@dÌk�r.dÍd΄ZAdÏdЄZBdÑdÒ„ZCeBƒeCƒeDƒdS)Õz-turtle 1.1b- - for Python 3.1 - 4. 5. 2009éN)ÚisfileÚsplitÚjoin)Údeepcopy)Ú simpledialogÚScrolledCanvasÚ TurtleScreenÚScreenÚ RawTurtleÚTurtleÚRawPenÚPenÚShapeÚVec2DÚaddshapeÚbgcolorÚbgpicÚbyeÚ clearscreenÚ colormodeÚdelayÚ exitonclickÚ getcanvasÚ getshapesÚlistenÚmainloopÚmodeÚnuminputÚonkeyÚ onkeypressÚ onkeyreleaseÚ onscreenclickÚontimerÚregister_shapeÚ resetscreenÚ screensizeÚsetupÚsetworldcoordinatesÚ textinputÚtitleÚtracerÚturtlesÚupdateÚ window_heightÚ window_widthÚbackÚbackwardÚ begin_fillÚ begin_polyÚbkÚcircleÚclearÚ clearstampÚ clearstampsÚcloneÚcolorÚdegreesÚdistanceÚdotÚdownÚend_fillÚend_polyÚfdÚ fillcolorÚfillingÚforwardÚget_polyÚgetpenÚ getscreenÚ get_shapepolyÚ getturtleÚgotoÚheadingÚ hideturtleÚhomeÚhtÚisdownÚ isvisibleÚleftÚltÚonclickÚondragÚ onreleaseÚpdÚpenÚpencolorÚpendownÚpensizeÚpenupÚposÚpositionÚpuÚradiansÚrightÚresetÚ resizemodeÚrtÚsethÚ setheadingÚsetposÚ setpositionÚ settiltangleÚ setundobufferÚsetxÚsetyÚshapeÚ shapesizeÚshapetransformÚ shearfactorÚ showturtleÚspeedÚstÚstampÚtiltÚ tiltangleÚtowardsÚ turtlesizeÚundoÚundobufferentriesÚupÚwidthÚwriteÚxcorÚycorÚwrite_docstringdictÚdoneÚ Terminatorçà?gè?i�i,Ústandardçð?é ièÚclassicÚblackÚnoresizeTZenglishÚturtleÚscreenzPython Turtle GraphicsF)rzÚheightÚ canvwidthÚ canvheightÚ leftrightÚ topbottomrrrÚundobuffersizerkrWrAraÚvisibleÚlanguageÚ exampleturtleÚ examplescreenr)Ú using_IDLEc Csât|dƒ�}| ¡}W5QRXi}|D]¶}| ¡}|r&| d¡rBq&z| d¡\}}Wn(tk r|td||fƒYq&YnX| ¡}| ¡}|dkr t|ƒ}n4zd|kr´t|ƒ}nt |ƒ}Wntk rÒYnX|||<q&|S)NÚrú#ú=zBad line in config-file %s: %s)ÚTrueÚFalseÚNonez''z""Ú.) ÚopenÚ readlinesÚstripÚ startswithrÚ ValueErrorÚprintÚevalÚfloatÚint)ÚfilenameÚfZcfglinesÚcfgdictÚlineÚkeyÚvalue©r«ú/usr/lib64/python3.8/turtle.pyÚ config_dict«s0      r­cCsŒd}i}i}t|ƒrt|ƒ}d|kr0d|d}zttƒ\}}t||ƒ}Wntk rbd}YnXt|ƒrtt|ƒ}t |¡t |¡dS)Nz turtle.cfgZ importconfigz turtle_%s.cfgÚ)rr­rÚ__file__rÚ ExceptionÚ_CFGr,)r§Z default_cfgZcfgdict1Zcfgdict2ÚheadÚtailZ cfg_file2r«r«r¬Ú readconfigÈs     r´z"No configfile read, reason unknownc@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)rcCst |||f¡S©N)ÚtupleÚ__new__)ÚclsÚxÚyr«r«r¬r·úsz Vec2D.__new__cCs"t|d|d|d|dƒS©Nré©r©ÚselfÚotherr«r«r¬Ú__add__üsz Vec2D.__add__cCsDt|tƒr*|d|d|d|dSt|d||d|ƒSr»)Ú isinstancerr¾r«r«r¬Ú__mul__þs  z Vec2D.__mul__cCs2t|tƒst|tƒr.t|d||d|ƒStSr»)rÂr¤r£rÚNotImplementedr¾r«r«r¬Ú__rmul__szVec2D.__rmul__cCs"t|d|d|d|dƒSr»r½r¾r«r«r¬Ú__sub__sz Vec2D.__sub__cCst|d |d ƒSr»r½©r¿r«r«r¬Ú__neg__sz Vec2D.__neg__cCs|dd|dddS)Nrér¼r�r«rÇr«r«r¬Ú__abs__ sz Vec2D.__abs__cCsjt|d |dƒ}|tjd}t |¡t |¡}}t|d||d||d||d|ƒS)Nr¼rç€f@)rÚmathÚpiÚcosÚsin)r¿ÚangleZperpÚcÚsr«r«r¬Úrotate sz Vec2D.rotatecCs|d|dfSr»r«rÇr«r«r¬Ú__getnewargs__szVec2D.__getnewargs__cCsd|S)Nz (%.2f,%.2f)r«rÇr«r«r¬Ú__repr__szVec2D.__repr__N) Ú__name__Ú __module__Ú __qualname__r·rÁrÃrÅrÆrÈrÊrÓrÔrÕr«r«r«r¬rìscCsTt|jƒ}| ¡|D]}t||ƒq|j ¡D]\}}t|ƒtjkr0|||<q0dSrµ) ÚlistÚ __bases__ÚreverseÚ __methodDictÚ__dict__ÚitemsÚtypeÚtypesÚ FunctionType)r¸Ú_dictZbaseListZ_superr©rªr«r«r¬rÜ!s  rÜcCsi}t||ƒ| ¡Srµ)rÜÚkeys)r¸râr«r«r¬Ú __methods+s räzTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)r«c Cs¸i}t||ƒi}t|ƒ}| ¡D]B}|dd…dksd|dd…dksd||ksd||krXq"||||<q"| ¡D]D\}} || dœ} t|tƒr˜t||dœ} t| | ƒt||| |ƒqndS)Nr¼Ú_éÿÿÿÿ)ÚmethodÚfunc)rçZ attribute) rÜrärãrÞrÂÚstrÚ __stringBodyÚexecÚsetattr) Z fromClassZtoClassZtoPartZexcludeZ_dict_1râZmfcZexrçrèÚdZ execStringr«r«r¬Ú__forwardmethods5s  0   ÿ rîc@s`eZdZddd„Zddd„Zd d „Zd d „Zd d„Zdd„Zdd„Z dd„Z dd„Z dd„Z dS)réôé^éXc Cs0tjj||||d�| ¡|_|||_|_|||_|_d|_ tj ||||j tj dd�|_ tj ||j jtjd�|_tj ||j jd�|_|j j|jj|jjd�|jdd dd �|jdd dd �|j jd |d ddd d d d �|jjd |d dd d d d d �|jjd |d d dd d d d �| ¡|j d |j¡dS)N)rzrŠÚwhiterÉ)rzrŠÚbgZreliefZ borderwidth)ÚcommandZorient)rô)ZxscrollcommandZyscrollcommandrr¼)ZweightZminsizeÚnews©ZpadxZin_ZpadyÚrowÚcolumnZrowspanZ columnspanZstickyz )ÚTKÚFrameÚ__init__Úwinfo_toplevelZ _rootwindowrzrŠr‹rŒróÚCanvasZSUNKENÚ_canvasZ ScrollbarZxviewZ HORIZONTALÚhscrollZyviewÚvscrollZ configureÚsetZ rowconfigureZcolumnconfigureÚgridr`ÚbindÚonResize)r¿ÚmasterrzrŠr‹rŒr«r«r¬rûPsN  ÿ ÿ ÿÿÿÿzScrolledCanvas.__init__NcCs¢|r ||_|r||_|r||_|jj||j d|j d|jd|jdfd�|j d|j|jd|j¡|j d|j|jd|j¡|  ¡dS)NrÉ)róÚ scrollregionr�é) r‹rŒrórþÚconfigÚ xview_movetorzÚ yview_movetorŠÚ adjustScrolls©r¿r‹rŒrór«r«r¬r`is&ÿÿÿÿzScrolledCanvas.resetc Cs²|j ¡}|j ¡}|j d|j||j¡|j d|j||j¡||jks`||jkrš|jjd|ddddddd�|j jd|ddddddd�n|j  ¡|j   ¡dS)Nr�r¼rrõrö) rþÚ winfo_widthÚ winfo_heightr r‹r rŒrÿrrZ grid_forget)r¿ÚcwidthÚcheightr«r«r¬r {s&  ÿÿ zScrolledCanvas.adjustScrollscCs | ¡dSrµ)r )r¿Úeventr«r«r¬r‹szScrolledCanvas.onResizecGs |jj|ŽSrµ)rþÚbbox©r¿Úargsr«r«r¬r�szScrolledCanvas.bboxcOs|jj||ŽSrµ)rþÚcget©r¿rÚkwargsr«r«r¬r”szScrolledCanvas.cgetcOs|jj||ŽdSrµ)rþrrr«r«r¬r™szScrolledCanvas.configcOs|jj||ŽdSrµ)rþrrr«r«r¬ržszScrolledCanvas.bindcOs|jj||ŽdSrµ)rþÚunbindrr«r«r¬r£szScrolledCanvas.unbindcCs|j ¡dSrµ)rþÚ focus_forcerÇr«r«r¬r¨szScrolledCanvas.focus_force)rïrðrñrï)NNN) rÖr×rØrûr`r rrrrrrrr«r«r«r¬rJsÿ  rþc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú_RootcCstj |¡dSrµ)rùÚTkrûrÇr«r«r¬rû²sz_Root.__init__cCs&t|||||ƒ|_|jjddd�dS)Nr¼Zboth)ÚexpandÚfill)rrþZpack)r¿rzrŠrrr«r«r¬Ú setupcanvasµsz_Root.setupcanvascCs|jSrµ)rþrÇr«r«r¬Ú _getcanvas¹sz_Root._getcanvascCs| d||||f¡dS)Nz %dx%d%+d%+d)Zgeometry)r¿rzrŠÚstartxÚstartyr«r«r¬Ú set_geometry¼sz_Root.set_geometrycCs| d|¡dS)NZWM_DELETE_WINDOW)Z wm_protocol)r¿Údestroyr«r«r¬Ú ondestroy¿sz_Root.ondestroycCs| ¡Srµ)Zwinfo_screenwidthrÇr«r«r¬Ú win_widthÂsz_Root.win_widthcCs| ¡Srµ)Zwinfo_screenheightrÇr«r«r¬Ú win_heightÅsz_Root.win_heightN) rÖr×rØrûrrr"r$r%r&r«r«r«r¬r°src@s(eZdZdd„Zdd„Zdd„Zdd„ZdFd d „Zd d„ZdGdd„Z dd„Z dd„Z dd„Z dd„Z dHdd„Zdd„ZdIdd„ZdJd d!„ZdKd"d#„ZdLd$d%„Zd&d'„ZdMd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„ZdNdd?„Z d@dA„Z!dBdC„Z"dOdDdE„Z#d S)PÚTurtleScreenBasecCstjdd|jd�}| ¡|S)Nr¼)rzrŠr)rùÚ PhotoImageÚcvÚblank)r¿Zimgr«r«r¬Ú _blankimageÓszTurtleScreenBase._blankimagecCstj||jd�S)N)Úfiler)rùr(r))r¿r¥r«r«r¬Ú_imageÚszTurtleScreenBase._imagecCsˆ||_t|tƒr"|jj}|jj}nJt|j d¡ƒ}t|j d¡ƒ}|jj| d| d|d|dfd�||_||_d|_|_ dS)NrzrŠrÉ©rrƒ) r)rÂrr‹rŒr¤rrÚxscaleÚyscale)r¿r)ÚwÚhr«r«r¬rûàs  *zTurtleScreenBase.__init__cCs|jjdddd�S)N)rrrrrrr®©rÚoutline)r)Zcreate_polygonrÇr«r«r¬Ú _createpolyíszTurtleScreenBase._createpolyNFc Cs¢g}|D]*\}} | ||j¡| | |j¡q|jj|f|žŽ|dk r^|jj||d�|dk rv|jj||d�|dk rŽ|jj||d�|rž|j |¡dS)N©r)r4©rz©Úappendr/r0r)ÚcoordsZ itemconfigureZ tag_raise) r¿ZpolyitemÚ coordlistrr4rzÚtopÚclr¹rºr«r«r¬Ú _drawpolyòs  zTurtleScreenBase._drawpolyc Cs|jjddddddtjd�S)Nrr®rÉ)rrzZcapstyle)r)Z create_linerùZROUNDrÇr«r«r¬Ú _createline sÿzTurtleScreenBase._createlinec Cs’|dk rNg}|D]*\}}| ||j¡| | |j¡q|jj|f|žŽ|dk rf|jj||d�|dk r~|jj||d�|rŽ|j |¡dS)Nr6r7r8) r¿Zlineitemr;rrzr<r=r¹rºr«r«r¬Ú _drawlines  zTurtleScreenBase._drawlinecCs|j |¡dSrµ)r)Údelete©r¿Úitemr«r«r¬Ú_delete(szTurtleScreenBase._deletecCs|j ¡dSrµ)r)r,rÇr«r«r¬Ú_update.szTurtleScreenBase._updatecCs|j |¡dSrµ)r)Úafter©r¿rr«r«r¬Ú_delay3szTurtleScreenBase._delaycCs4z|j |¡}d}Wntjk r.d}YnX|S)NTF)r)Z winfo_rgbrùZTclError)r¿r9ZrgbÚokr«r«r¬Ú_iscolorstring7s   zTurtleScreenBase._iscolorstringcCs0|dk r |jj|d�| ¡n |j d¡SdS)N)róró)r)rrEr)r¿r9r«r«r¬Ú_bgcolorAs zTurtleScreenBase._bgcolorcCst|\}}||j}||j}ddddœ}|jj|d| |||||d�} |j | ¡\} } } } |j ¡| | dfS)NÚswrÒZse)rPÚcenterr_r¼)ÚtextÚanchorrÚfont)r/r0r)Z create_textrr,)r¿r[ÚtxtÚalignrPrWr¹rºrOrCZx0Zy0Zx1Zy1r«r«r¬Ú_writeJs   ÿ zTurtleScreenBase._writer¼csDˆdkrˆj |d|¡n$‡‡fdd„}ˆj |d|||¡dS)Nú cs:ˆj |j¡ˆjˆj |j¡ ˆj}}ˆ||ƒdSrµ©r)Úcanvasxr¹r/Úcanvasyrºr0©rr¹rº©Úfunr¿r«r¬Úeventfunesÿz+TurtleScreenBase._onclick..eventfun©r)Z tag_unbindZtag_bind©r¿rCrZÚnumÚaddr[r«rYr¬Ú_onclick\szTurtleScreenBase._onclickcsDˆdkrˆj |d|¡n$‡‡fdd„}ˆj |d|||¡dS)Nzcs:ˆj |j¡ˆjˆj |j¡ ˆj}}ˆ||ƒdSrµrUrXrYr«r¬r[wsÿz-TurtleScreenBase._onrelease..eventfunr\r]r«rYr¬Ú _onreleaseks ÿzTurtleScreenBase._onreleasecsDˆdkrˆj |d|¡n$‡‡fdd„}ˆj |d|||¡dS)NzcsTz:ˆj |j¡ˆjˆj |j¡ ˆj}}ˆ||ƒWntk rNYnXdSrµ)r)rVr¹r/rWrºr0r°rXrYr«r¬r[Šsÿz*TurtleScreenBase._ondrag..eventfunr\r]r«rYr¬Ú_ondrag~s zTurtleScreenBase._ondragcs@ˆdkrˆj d|¡n"‡‡fdd„}ˆj d|||¡dS)NrTcs:ˆj |j¡ˆjˆj |j¡ ˆj}}ˆ||ƒdSrµrUrXrYr«r¬r[Ÿsÿz1TurtleScreenBase._onscreenclick..eventfun©r)rr)r¿rZr^r_r[r«rYr¬Ú_onscreenclick“s zTurtleScreenBase._onscreenclickcs>ˆdkr|j d|d¡n‡fdd„}|j d||¡dS)Nzcs ˆƒdSrµr«©r©rZr«r¬r[¬sz0TurtleScreenBase._onkeyrelease..eventfunrc©r¿rZr©r[r«rfr¬Ú _onkeyrelease¥s zTurtleScreenBase._onkeyreleasecsnˆdkr4|dkr |j dd¡qj|j d|d¡n6‡fdd„}|dkrX|j d|¡n|j d||¡dS)Nz z cs ˆƒdSrµr«rerfr«r¬r[»sz.TurtleScreenBase._onkeypress..eventfunrcrgr«rfr¬Ú _onkeypress°s zTurtleScreenBase._onkeypresscCs|j ¡dSrµ)r)rrÇr«r«r¬Ú_listenÂszTurtleScreenBase._listencCs(|dkr|j |¡n|j ||¡dS©Nr)r)Z after_idlerF©r¿rZÚtr«r«r¬Ú_ontimerÇszTurtleScreenBase._ontimercCs|jjdd|d�S)Nr©Úimage)r)Z create_image)r¿rpr«r«r¬Ú _createimageÏszTurtleScreenBase._createimagecCs<|\}}|j |||j| |jf¡|jj||d�dS©Nro)r)r:r/r0Ú itemconfig)r¿rCr[rpr¹rºr«r«r¬Ú _drawimageÔs zTurtleScreenBase._drawimagecCs |jj||d�|j |¡dSrr)r)rsZ tag_lower)r¿rCrpr«r«r¬Ú _setbgpicÜszTurtleScreenBase._setbgpiccCs |j |¡Srµ)r)rßrBr«r«r¬Ú_typeäszTurtleScreenBase._typecs.|j |¡‰‡fdd„tdtˆƒdƒDƒ}|S)Ncs"g|]}ˆ|ˆ|d f‘qS)r¼r«©Ú.0Úi©r=r«r¬Ú ósz/TurtleScreenBase._pointlist..rrÉ)r)r:ÚrangeÚlen)r¿rCÚplr«rzr¬Ú _pointlistês zTurtleScreenBase._pointlistcCs|jj||||fd�dS)Nr.)r)r)r¿Úsrx1Úsry1Úsrx2Úsry2r«r«r¬Ú_setscrollregionösz!TurtleScreenBase._setscrollregionc Cs||j ¡}|D]h}t|j |¡ƒ}g}|rd|dd…\}}| ||¡| ||¡|dd…}q&|jj|f|žŽqdS©NrÉ)r)Zfind_allrÙr:r9) r¿Z xscalefactorZ yscalefactorrÞrCZ coordinatesZ newcoordlistr¹rºr«r«r¬Ú_rescaleùs zTurtleScreenBase._rescalecCszt|jtƒs|j|jfS||kr6|kr6dkrJnn|jj|jjfS|dk rX||_|dk rf||_|j |||¡dSrµ)rÂr)rr‹rŒr`r r«r«r¬Ú_resizes  "zTurtleScreenBase._resizecCs@|j ¡}|dkr|jd}|j ¡}|dkr8|jd}||fS)Nr¼rzrŠ)r)r r)r¿rzrŠr«r«r¬Ú _window_sizes    zTurtleScreenBase._window_sizecCs|jj ¡dSrµ)r)ZtkrrÇr«r«r¬rs zTurtleScreenBase.mainloopcCstj|||jd�S)N)Úparent)rZ askstringr))r¿r)Úpromptr«r«r¬r(.s zTurtleScreenBase.textinputcCstj||||||jd�S)N)Z initialvalueZminvalueZmaxvaluer‰)rZaskfloatr))r¿r)rŠÚdefaultZminvalZmaxvalr«r«r¬r=s  þzTurtleScreenBase.numinput)NNNF)NNNF)N)r¼N)r¼N)r¼N)r¼N)N)NNN)NNN)$rÖr×rØr+r-rûr5r>r?r@rDrErHrJrKrSr`rarbrdrhrirjrnrqrtrurvrr„r†r‡rˆrr(rr«r«r«r¬r'ËsR ÿ ÿ          r'c@s eZdZdS)r€N©rÖr×rØr«r«r«r¬r€Ysc@s eZdZdS)ÚTurtleGraphicsErrorNrŒr«r«r«r¬r�bsr�c@s eZdZddd„Zddd„ZdS)rNcCsz||_|dkr"t|tƒrpt|ƒ}nN|dkrVt|tƒrp| ¡ d¡rpt|ƒrpt  |¡}n|dkrdg}n t d|ƒ‚||_ dS)NÚpolygonrpú.gifÚcompoundzThere is no shape type %s) rvrÂrÙr¶réÚlowerÚendswithrrr-r�Ú_data)r¿Ztype_Údatar«r«r¬rûns     zShape.__init__cCs:|jdkrtd|jƒ‚|dkr$|}|j |||g¡dS)Nr�z Cannot add component to %s Shape)rvr�r“r9)r¿Úpolyrr4r«r«r¬Ú addcomponent~s ÿzShape.addcomponent)N)N)rÖr×rØrûr–r«r«r«r¬rgs c@s@eZdZddd„Zddd„Zdd„Zd d „Zd d „Zd d„ZdS)ÚTbufferr„cCs$||_dgg||_d|_d|_dS)NræF)ÚbufsizeÚbufferÚptrÚcumulate)r¿r˜r«r«r¬rû˜szTbuffer.__init__NcCsD|dkr&t|jƒD]}dg|j|<qn||_dgg||_d|_dS)Nræ)r|r˜r™rš)r¿r˜ryr«r«r¬r`�s z Tbuffer.resetcCsF|jdkrB|js0|jd|j|_||j|j<n|j|j |¡dSr»)r˜r›ršr™r9rBr«r«r¬Úpush¥s  z Tbuffer.pushcCsJ|jdkrF|j|j}|dkr"dSdg|j|j<|jd|j|_|SdSr»)r˜r™ršrBr«r«r¬Úpop¬s  z Tbuffer.popcCs|j|j dg¡Srµ)r˜r™ÚcountrÇr«r«r¬Ú nr_of_itemsµszTbuffer.nr_of_itemscCst|jƒdt|jƒS)Nú )rér™ršrÇr«r«r¬rÕ·szTbuffer.__repr__)r„)N) rÖr×rØrûr`rœr�rŸrÕr«r«r«r¬r—–s    r—c@seZdZdZedededfdd„Zdd„Zddd„Z dd„Z dd„Zdd„Zd?dd„Zd@dd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„ZdAd-d.„Zd/d0„ZdBd1d2„ZdCd3d4„ZdDd6d7„ZdEd8d9„ZdFd:d;„ZeZe Z eZ!e Z"eZ#d S)GrTrrrc Cs¸t ||¡tddƒtddƒtddƒtddƒtddƒtddƒtd| ¡ƒd œ|_d d i|_||_||_td |_ g|_ |  ¡t j d kr´| ¡}| ddddd¡| ddddd¡dS)NrŽ)©éöÿÿÿr©r„r©rr„))ré)éþÿÿÿé)rær„)éüÿÿÿé)éùÿÿÿé )é÷ÿÿÿé)éúÿÿÿé)rªr¼)éûÿÿÿéýÿÿÿ)éøÿÿÿr®)r®r²)r¨r°©rrª)ér°)ér²)r­r®)r¯r±)r©r¼)rµr¯)r«r­)r©r«)r´r©)r¼r„)rÉr§)r£)ç…ëQ¸#@縅ëQ¸@)ç®Gáz. @ç…ëQ¸…@)r¹r¸)r·r¶r¤)縅ëQ¸Àr¶)ç…ëQ¸…Àr¸)ç®Gáz. Àr¹)ç…ëQ¸#Àr·r¡)r½rº)r¼r»)r»r¼)rºr½)g€g$À)r·r½)r¹r¼)r¸r»)r¶rº))r„r¢)r„r„)r¢r„)r¢r¢))r„ç®GázÀ)rgš™™™™'@)r¢r¾)©rr)r°r¬r³)r¯r¬rp)Zarrowrˆr4ZsquareZtriangler…r*Únopicr®rÚdarwinZwmZ attributesr›z-topmostÚ1Ú0)r'rûrr+Ú_shapesÚ_bgpicsÚ_modeÚ _delayvaluer±Ú _colormodeÚ_keysr5ÚsysÚplatformrüZcall)r¿r)rrrZ rootwindowr«r«r¬rûÅs&  î   zTurtleScreen.__init__cCs¢td|_td|_| d¡| d¡|_d|_d|_d|_g|_ |  d¡d D]}|  d|¡qP|  d¡|j dd…D]}| d|¡|  d|¡qzdt_dS) NrrÚallr®rÀr¼rrò)r¼rÉé)r±rÇrÈrDrqÚ_bgpicÚ _bgpicnameÚ_tracingÚ_updatecounterÚ_turtlesrrRrrÉrr Ú_pen)r¿Úbtnr©r«r«r¬r5ís       zTurtleScreen.clearNcCs||dkr|jS| ¡}|dkr*td|ƒ‚||_|dkrp| |j d|j d|jd|jd¡d|_|_| ¡dS)N©r‚ÚlogoÚworldzNo turtle-graphics-mode %s)r‚rÖrÉrƒ) rÆr‘r�r„r‹rŒr/r0r`©r¿rr«r«r¬r s ÿ zTurtleScreen.modecCsÒ| ¡dkr| d¡t||ƒ}t||ƒ}| ¡\}}| |d|d¡|j|j} } |j||_|j||_||j} | |j} |j| } |j| }| | | | |¡|  |j| |j| ¡|  ¡dS)Nr×é) rr£rˆr%r/r0r‹rŒr„r†r,)r¿ZllxZllyZurxZuryZxspanZyspanZwxZwyZ oldxscaleZ oldyscaler€r�r‚rƒr«r«r¬r'-s            z TurtleScreen.setworldcoordinatescCsT|dkr2| ¡ d¡r(td| |¡ƒ}qFtdƒ‚nt|tƒrFtd|ƒ}||j|<dS)Nr�rpz;Bad arguments for register_shape. Use help(register_shape)rŽ)r‘r’rr-r�rÂr¶rÄ)r¿Únamerkr«r«r¬r#Ts   zTurtleScreen.register_shapec Cst|ƒdkr|d}t|tƒrD| |¡s0|dkr4|Stdt|ƒƒ‚z|\}}}Wn(ttfk rztdt|ƒƒ‚YnX|jdkr dd„|||fDƒ\}}}d|kr´d krænn.d|krÌd krænnd|kräd ksöntd t|ƒƒ‚d |||fS) Nr¼rr®zbad color string: %súbad color arguments: %srƒcSsg|]}td|ƒ‘qS©gào@©Úround©rxr¹r«r«r¬r{�sz*TurtleScreen._colorstr..éÿúbad color sequence: %sú #%02x%02x%02x)r}rÂrérJr�Ú TypeErrorr rÈ)r¿r9r•ÚgÚbr«r«r¬Ú _colorstrws   FzTurtleScreen._colorstrcsxˆ d¡sˆStˆƒdkr.‡fdd„dDƒ}n4tˆƒdkrV‡fdd„ˆdd…Dƒ}n td ˆƒ‚t‡fd d „|DƒƒS) Nr–r©cs"g|]}tˆ||d…dƒ‘qS)rÉr¥©r¤rw©Úcstrr«r¬r{–sz'TurtleScreen._color..)r¼rÍr¯r´csg|]}dtˆ|dƒ‘qS)r¥rç)rxr2rèr«r¬r{˜sr¼zbad colorstring: %sc3s|]}|ˆjdVqdS)ràN)rÈ)rxrÑrÇr«r¬Ú ›sz&TurtleScreen._color..)rŸr}r�r¶)r¿rér=r«)rér¿r¬Ú_color’s    zTurtleScreen._colorcCs8|dkr|jS|dkr"t|ƒ|_n|dkr4t|ƒ|_dS)Nrƒrà)rÈr£r¤)r¿Zcmoder«r«r¬r�s  zTurtleScreen.colormodecCs$|jD]}| |j¡| ¡qdSrµ)rÒÚ_setmoderÆr`)r¿rˆr«r«r¬r`²s  zTurtleScreen.resetcCs|jSrµ)rÒrÇr«r«r¬r+¾szTurtleScreen.turtlescGs4|r| |¡}nd}| |¡}|dk r0| |¡}|Srµ)rærKrë©r¿rr9r«r«r¬rÇs   zTurtleScreen.bgcolorcCsB|dkr|jSt|ƒ|_d|_|dk r0t|ƒ|_|jr>| ¡dSrk)rÐr¤rÑrÇr,)r¿Únrr«r«r¬r*Þs  zTurtleScreen.tracercCs|dkr|jSt|ƒ|_dSrµ)rÇr¤rGr«r«r¬rús zTurtleScreen.delaycCs<tjsdt_t‚|jdkr8|jd7_|j|j;_dS)NTrr¼)rÚ_RUNNINGr€rÐrÑrÇr«r«r¬Ú _incrementudc s  zTurtleScreen._incrementudccCs<|j}d|_| ¡D]}| ¡| ¡q||_| ¡dS©NT)rÐr+Ú _update_dataÚ _drawturtlerE)r¿Útracingrmr«r«r¬r,s  zTurtleScreen.updatecCs | ¡dSrk©rˆrÇr«r«r¬r.szTurtleScreen.window_widthcCs | ¡dS©Nr¼rõrÇr«r«r¬r-&szTurtleScreen.window_heightcCs|jSrµ)r)rÇr«r«r¬r/s zTurtleScreen.getcanvascCst|j ¡ƒSrµ)ÚsortedrÄrãrÇr«r«r¬r;s zTurtleScreen.getshapesr¼cCs| |||¡dSrµ)rd©r¿rZrÔr_r«r«r¬rRFszTurtleScreen.onclickcCsF|dkr ||jkr6|j |¡n||jkr6|j |¡| ||¡dSrµ)rÉÚremover9rh©r¿rZr©r«r«r¬rWs    zTurtleScreen.onkeycCsN|dkr ||jkr>|j |¡n|dk r>||jkr>|j |¡| ||¡dSrµ)rÉrùr9rirúr«r«r¬rus   zTurtleScreen.onkeypresscCs | ¡dSrµ)rj)r¿ÚxdummyÚydummyr«r«r¬r•s zTurtleScreen.listenrcCs| ||¡dSrµ)rnrlr«r«r¬r"¡szTurtleScreen.ontimercCsF|dkr|jS||jkr(| |¡|j|<| |j|j|¡||_dSrµ)rÏrÅr-rurÎ)r¿Zpicnamer«r«r¬r¶s  zTurtleScreen.bgpiccCs| |||¡Srµ)r‡r r«r«r¬r%ÎszTurtleScreen.screensize)N)N)N)NN)N)r¼N)N)NN)r)N)NNN)$rÖr×rØrïr±rûr5rr'r#rærërr`r+rr*rrðr,r.r-rrrRrrrr"rr%r!r$rrr r«r«r«r¬r¼sFÿ ( "' #              c@sPeZdZeddƒeddƒeddƒdœZdZdZdZefdd„Zd d „Z dAd d „Z dd„Z dBdd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„ZdCd)d*„Zd+d,„Zd-d.„Zd/d0„ZdDd1d2„ZdEd3d4„Zd5d6„Zd7d8„ZdFd9d:„Z dGd;d<„Z!dHd=d>„Z"dId?d@„Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,d S)JÚ TNavigatorrƒç)r‚r×rÖr‚rr¼cCsB|j|_|j|_||_d|_| ¡d|_| |¡t  |¡dSrµ) ÚDEFAULT_ANGLEOFFSETÚ _angleOffsetÚDEFAULT_ANGLEORIENTÚ _angleOrientrÆÚ undobufferr:rìrýr`rØr«r«r¬rûós zTNavigator.__init__cCstddƒ|_tj|j|_dS)Nrþ)rÚ _positionrýÚSTART_ORIENTATIONrÆÚ_orientrÇr«r«r¬r`ýs zTNavigator.resetNcCsL|dkr|jS|dkrdS||_|dkr6d|_d|_n|jd|_d|_dS)NrÕ)r‚r×rr¼ç@ræ)rÆrrÚ _fullcirclerØr«r«r¬rìs zTNavigator._setmodecCs0||_d||_|jdkr"d|_n |d|_dS)Nihr‚rr)rÚ _degreesPerAUrÆr©r¿Z fullcircler«r«r¬Ú_setDegreesPerAUs   zTNavigator._setDegreesPerAUç€v@cCs| |¡dSrµ)r r r«r«r¬r:szTNavigator.degreescCs| dtj¡dSr…)r rÌrÍrÇr«r«r¬r^5s zTNavigator.radianscCs|j|j|}| |¡dSrµ)rrÚ_goto)r¿r;Zender«r«r¬Ú_goCszTNavigator._gocCs||j9}|j |¡|_dSrµ)r rrÓ©r¿rÐr«r«r¬Ú_rotateHs zTNavigator._rotatecCs ||_dSrµ©r)r¿Úendr«r«r¬r MszTNavigator._gotocCs| |¡dSrµ©r©r¿r;r«r«r¬rCQszTNavigator.forwardcCs| | ¡dSrµrrr«r«r¬r/hszTNavigator.backcCs| | ¡dSrµ©rrr«r«r¬r_|szTNavigator.rightcCs| |¡dSrµrrr«r«r¬rP‘szTNavigator.leftcCs|jSrµrrÇr«r«r¬r[¦s zTNavigator.poscCs |jdSrkrrÇr«r«r¬r|³s zTNavigator.xcorcCs |jdSrörrÇr«r«r¬r}Ás zTNavigator.ycorcCs,|dkr| t|Ž¡n| t||ƒ¡dSrµ)r r)r¿r¹rºr«r«r¬rIÐszTNavigator.gotocCs| dd¡| d¡dSrk)rIrdrÇr«r«r¬rLós zTNavigator.homecCs| t||jdƒ¡dSrö©r rr)r¿r¹r«r«r¬riszTNavigator.setxcCs| t|jd|ƒ¡dSrkr)r¿rºr«r«r¬rjszTNavigator.setycCsT|dk rt||ƒ}t|tƒr"|}n$t|tƒr6t|Ž}nt|tƒrF|j}t||jƒSrµ)rrÂr¶rýrÚabs)r¿r¹rºr[r«r«r¬r;%s     zTNavigator.distancecCs”|dk rt||ƒ}t|tƒr"|}n$t|tƒr6t|Ž}nt|tƒrF|j}||j\}}tt ||¡dtjdƒd}||j }|j |j ||j S©NrËr„r ) rrÂr¶rýrrÞrÌÚatan2rÍr rrr)r¿r¹rºr[Úresultr«r«r¬ruEs       zTNavigator.towardscCsJ|j\}}tt ||¡dtjdƒd}||j}|j|j||jSr) rrÞrÌrrÍr rrr)r¿r¹rºrr«r«r¬rJhs   zTNavigator.headingcCs>|| ¡|j}|j}||d||d}| |¡dS)Nç@)rJrrr)r¿Zto_anglerÐZfullr«r«r¬rdwszTNavigator.setheadingc Csp|jr|j dg¡d|j_| ¡}|dkr2|j}|dkrjt|ƒ|j}dttdt|ƒddƒ|ƒ}d||}d|}d |t  |tj d |j ¡}|d kr¾| | | }}}|  ¡} |  ¡} |d krä|  d d ¡n | d ¡| |¡t|ƒD].} | |¡| |¡| d ¡| |¡�q| | ¡|d k�rR|  | | ¡| |¡|j�rld |j_dS) NÚseqTr¼é g@g€M@rƒr�rrËrF)rrœr›rprrr¤ÚminrÌrÏrÍr Ú_tracerrHrr|r) r¿ÚradiusZextentÚstepsrpZfracr1Zw2ÚlZtrZdlryr«r«r¬r4“s>" "          zTNavigator.circlecCsdSrµr«)r¿rÒr«r«r¬rpÔszTNavigator.speedcCsdSrµr«)r¿Úarår«r«r¬rÖszTNavigator._tracercCsdSrµr«)r¿rîr«r«r¬rHØszTNavigator._delay)N)r )N)N)N)NN)r)NN)N)-rÖr×rØrrZ DEFAULT_MODErÿrrûr`rìr r:r^rrr rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rprrHr@r3r0rbrQr\rerfrcr«r«r«r¬rýçsXý     # # A   rýc@sâeZdZedfdd„Zededfdd„Zd-d d „Zd.d d „Zd d„Zdd„Z dd„Z d/dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd0d!d"„Zd1d$d%„Zd2d'd(„Zd)d*„Zd+d,„ZeZeZeZe Ze ZeZeZdS)3ÚTPenracCs||_d|_t |¡dSrµ)Ú _resizemoderr$Ú_reset)r¿rar«r«r¬rûêsz TPen.__init__rWrAcCsFd|_d|_||_||_d|_d|_d|_d|_d|_d|_ d|_ dS)Nr¼TrÍ)rƒrƒrþ)rƒrþrþrƒ) Ú_pensizeÚ_shownÚ _pencolorÚ _fillcolorÚ_drawingÚ_speedÚ_stretchfactorÚ _shearfactorÚ_tiltÚ _shapetrafoÚ _outlinewidth)r¿rWrAr«r«r¬r&ïsz TPen._resetNcCs.|dkr|jS| ¡}|dkr*|j|d�dS)N)ÚautoÚuserr‡©ra)r%r‘rV)r¿Zrmoder«r«r¬raýs zTPen.resizemodecCs|dkr|jS|j|d�dS)N)rY)r'rV)r¿rzr«r«r¬rYsz TPen.pensizecCs|js dS|jdd�dS)NF©rX©r+rVrÇr«r«r¬rZ0s z TPen.penupcCs|jr dS|jdd�dS)NTr5r6rÇr«r«r¬rX>s z TPen.pendowncCs|jSrµ)r+rÇr«r«r¬rNLs z TPen.isdowncCsjddddddœ}|dkr|jS||kr0||}n*d|krDdkrVnntt|ƒƒ}nd}|j|d �dS) Nrr„rµrÍr¼)ZfastestZfastÚnormalZslowZslowestr�g%@)rp)r,r¤rÞrV)r¿rpZspeedsr«r«r¬rp[s z TPen.speedcGs„|rht|ƒ}|dkr"|d}}n"|dkr4|\}}n|dkrD|}}| |¡}| |¡}|j||d�n| |j¡| |j¡fSdS)Nr¼rrÉrÍ)rWrA)r}rærVrër)r*)r¿rr"ZpcolorZfcolorr«r«r¬r9�s    z TPen.colorcGs:|r*| |¡}||jkrdS|j|d�n | |j¡SdS)N)rW)rær)rVrërír«r«r¬rW¯s   z TPen.pencolorcGs:|r*| |¡}||jkrdS|j|d�n | |j¡SdS)N)rA)rær*rVrërír«r«r¬rAÔs   zTPen.fillcolorcCs|jdd�dS)NT©Úshown©rVrÇr«r«r¬roøs zTPen.showturtlecCs|jdd�dS)NFr8r:rÇr«r«r¬rK szTPen.hideturtlecCs|jSrµ)r(rÇr«r«r¬rO s zTPen.isvisiblec Ks²|j|j|j|j|j|j|j|j|j|j |j dœ }|s>|s>|St |t ƒrN|}ni}|  |¡i}|D]}||||<qd|jrŒ|j d|f¡d}d|krª|j|dkrªd}d|kræt |dtƒrÔ| |df¡|d<|j|dkræd}d|k�r|j|dk�rd}|�r| ¡d|k�r&|d|_d|k�r:|d|_d|k�rN|d|_d|k�r†t |dtƒ�r|| |df¡|d<|d|_d |k�rš|d |_d |k�r®|d |_d |k�rÞ|d }t |ttfƒ�rØ||f}||_d |k�rò|d |_d |k�r|d |_ d|k�r|d|_d|k�r.|d|_ d |k�sLd|k�sLd |k�r¦|j\} } |j} t |j ¡t |j ¡} } | | | | | | | | | | | | f|_| ¡dS)N) r9rXrWrArYrpraÚ stretchfactorrnr4rsrVFrXTrWrYrArprar;rnr4r9rs)r(r+r)r*r'r,r%r-r.r1r/rÂÚdictr,rrœr¶ræÚ_newLiner¤r£rÌrÏrÎr0rE)r¿rVZpendictZ_pdÚpZ_p_bufr©ZnewLineZsfZscxZscyZshfÚsaÚcar«r«r¬rV! s’/ö                          ÿzTPen.penTcCsdSrµr«©r¿ZusePosr«r«r¬r=  sz TPen._newLineFcCsdSrµr«)r¿ržZforcedr«r«r¬rE¢ sz TPen._updatecCsdSrµr«rr«r«r¬rë¤ sz TPen._colorcCsdSrµr«rr«r«r¬ræ¦ szTPen._colorstr)N)N)N)N)T)TF)rÖr×rØr±rûr&rarYrZrXrNrpr9rWrArorKrOrVr=rErërærzryr]rUr=rqrMr«r«r«r¬r$æs8ÿ    &.%$    r$c@seZdZdd„Zdd„ZdS)Ú _TurtleImagecCs||_d|_| |¡dSrµ)r‰rvÚ _setshape)r¿r‰Ú shapeIndexr«r«r¬rû¶ sz_TurtleImage.__init__csþ|j‰||_|jdkr*ˆj|jkr2nndS|jdkrPˆj|jkrXnndS|jdkrpˆ |j¡n |jdkr�|jD]}ˆ |¡q€ˆj|j|_|jdkr´ˆ ¡|_nF|jdkrÔˆ ˆjdj¡|_n&|jdkrú‡fdd„ˆj|jDƒ|_dS)NrŽrp)rprŽr�r*csg|] }ˆ ¡‘qSr«©r5©rxrC©r‰r«r¬r{Í sz*_TurtleImage._setshape..) r‰rDrvrÄrDÚ_itemr5rqr“)r¿rDrCr«rGr¬rC» s(""          ÿz_TurtleImage._setshapeN)rÖr×rØrûrCr«r«r«r¬rB² srBc@sÔeZdZgZdedededfdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dldd„Z dd„Zdd„Zdd„Zdd„Zdmdd „Zdnd!d"„Zdod#d$„Zd%d&„Zdpd'd(„Zd)d*„Zdqd+d,„Zd-d.„Zd/d0„Zdrd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdsdd?„Z!d@dA„Z"dBdC„Z#dtdEdF„Z$dGdH„Z%dIdJ„Z&dKdL„Z'dudMdN„Z(dOdP„Z)dvdSdT„Z*dUdV„Z+dWdX„Z,dYdZ„Z-d[d\„Z.d]d^„Z/e/Z0dwd_d`„Z1dxdbdc„Z2dyddde„Z3dzdfdg„Z4dhdi„Z5djdk„Z6eZ7dS){r Nrkr�r�cCs4t|tƒr||_n|t|tƒr:|tjkr2tj |¡||_nTt|ttfƒr‚tjD]}|j |krN||_qŽqNt|ƒ|_tj |j¡n t d|ƒ‚|j}t   ||  ¡¡t  |¡|j |¡| ¡|_t||ƒ|_d|_d|_d|_|_||_d|_| ¡|_|jg|_|jg|_g|_||_t |ƒ|_!| "¡dS)Nzbad canvas argument %sF)#rÂÚ_Screenr‰rr Úscreensr9rrýr)r�rýrûrr$rÒr?ÚdrawingLineItemrBrˆÚ_polyÚ _creatingPolyÚ _fillitemÚ _fillpathr(Ú_hidden_from_screenÚcurrentLineItemrÚ currentLinerÞÚ stampItemsÚ_undobuffersizer—rrE)r¿Zcanvasrkr�r�r‰r«r«r¬rûØ s@                 zRawTurtle.__init__cCs0t |¡t |¡| ¡| ¡| ¡dSrµ)rýr`r$r&Ú_clearrórErÇr«r«r¬r` s   zRawTurtle.resetcCs&|dks|dkrd|_n t|ƒ|_dSrk)rr—)r¿Úsizer«r«r¬rh szRawTurtle.setundobuffercCs|jdkrdS|j ¡Srk)rrŸrÇr«r«r¬rx, s zRawTurtle.undobufferentriescCsld|_|_|jD]}|j |¡q|j ¡|_g|_|jrJ|j  |j ¡|jg|_|  ¡|  |j ¡dSrµ)rNrOrÞr‰rDr?rQrRr+r9rr7rhrTrBr«r«r¬rU9 s    zRawTurtle._clearcCs| ¡| ¡dSrµ)rUrErÇr«r«r¬r5G s zRawTurtle.clearcCsF|j ¡|jjdkrdSt|jƒdkrB|j |j|j|j|j¡dSr») r‰rðrÑr}rRr@rQr)r'rÇr«r«r¬ròV s  ÿzRawTurtle._update_datacCsx|j}|jdkrdS|jdkrD| ¡| ¡| ¡| |j¡n0| ¡|jdkrt| ¡D] }| ¡q^| ¡dSr») r‰rÐròrórErHrÇrÑr+)r¿r‰rmr«r«r¬rE^ s     zRawTurtle._updatecCs|j ||¡Srµ)r‰r*)r¿Úflagrr«r«r¬rp szRawTurtle._tracercCs |j |¡Srµ)r‰rërr«r«r¬rë… szRawTurtle._colorcCs |j |¡Srµ)r‰rærr«r«r¬ræˆ szRawTurtle._colorstrc CsÐt|tƒr|Sz|\}}}Wn(ttfk rDtdt|ƒƒ‚YnX|jjdkrldd„|||fDƒ\}}}d|kr€dkr²nn.d|kr˜dkr²nnd|kr°dksÂntdt|ƒƒ‚d|||fS) NrÛrƒcSsg|]}td|ƒ‘qSrÜrÝrßr«r«r¬r{• sz!RawTurtle._cc..rràrárâ)rÂrérãr r�r‰rÈ)r¿rr•rärår«r«r¬Ú_cc‹ s  Fz RawTurtle._cccsà|j‰| |j¡|j}d|_d|_t|ƒ}ˆ|_||_ˆ|_tˆ|jjƒ|_ˆj |¡ˆj |jjj }|dkr€ˆ  ¡|j_ nJ|dkr ˆ  ˆj dj¡|j_ n*|dkrʇfdd„ˆj |jjjDƒ|j_ ˆ ¡|_| ¡|S)NrŽrpr*r�csg|] }ˆ ¡‘qSr«rErFrGr«r¬r{¼ sz#RawTurtle.clone..)r‰r=r+rˆrrBrDrÒr9rÄrvr5rHrqr“r?rQrE)r¿rˆÚqÚttyper«rGr¬r8š s.    ÿ  zRawTurtle.clonecCsB|dkr|jjS||j ¡kr*td|ƒ‚|j |¡| ¡dS)NzThere is no shape named %s)rˆrDr‰rr�rCrE)r¿rÚr«r«r¬rk s   zRawTurtle.shapecCs´||kr|krdkr8nn|j\}}|||jfS|dksH|dkrPtdƒ‚|dk rt|dkrj||f}q’||f}n|dk rŒ|jd|f}n|j}|dkr |j}|jd||d�dS)Nrz(stretch_wid/stretch_len must not be zeror3)rar;r4)r-r1r�rV)r¿Z stretch_widZ stretch_lenr4r;r«r«r¬rlÝ s$"    ÿzRawTurtle.shapesizecCs |dkr|jS|jd|d�dS)Nr3)rarn)r.rV)r¿Zshearr«r«r¬rn szRawTurtle.shearfactorcCs<| |j|j}|tjddtj}|jd|d�dS)NrËrÉr3)rars)r rrÌrÍrV©r¿rÐrsr«r«r¬rg szRawTurtle.settiltanglecCs>|dkr0|j dtj|j}||j|jS| |¡dS)NrË)r/rÌrÍrr rrgr[r«r«r¬rt4 szRawTurtle.tiltanglecCs| || ¡¡dSrµ)rgrtrr«r«r¬rsN szRawTurtle.tiltcCs6||kr(|kr(|kr(dkr2nn|jS|j\}}}}|dk rL|}|dk rX|}|dk rd|}|dk rp|}||||dkrŒtdƒ‚||||f|_t | |¡dtj} t | ¡t | ¡} } | || || || || || || || |f\} } }}| |f|_| ||_| |_ |j dd�dS)Nrz0Bad shape transform matrix: must not be singularrÉr3r4) r0r�rÌrrÍrÏrÎr-r.r/rV)r¿Út11Út12Út21Út22Zm11Zm12Zm21Zm22Zalfar?r@Za11Za12Za21Za22r«r«r¬rma s0,ÿ   zRawTurtle.shapetransformcs^|j‰|j\‰‰|j\‰‰tˆˆˆjˆjƒ}dt|ƒ|\‰‰‡‡‡‡‡fdd„|DƒS)NrƒcsFg|]>\}}ˆˆ|ˆ|ˆjˆˆ |ˆ|ˆjf‘qSr«)r/r0©rxr¹rº©Ze0Ze1Zp0Zp1r‰r«r¬r{’ sÿz(RawTurtle._polytrafo..)r‰rrrr0r/r)r¿r•Úer«rar¬Ú _polytrafo‰ s  ÿzRawTurtle._polytrafocCs2|jj|jj}|jdkr.| |j|jdk¡SdS)NrŽr�)r‰rÄrˆrDrvÚ _getshapepolyr“)r¿rkr«r«r¬rG• s  zRawTurtle.get_shapepolyFcsx|jdks|r|j\‰‰‰‰n>|jdkrNtd|jdƒ}|dd|f\‰‰‰‰n|jdkr\|St‡‡‡‡fdd„|DƒƒS) Nr3r2r¼g@rr‡c3s2|]*\}}ˆ|ˆ|ˆ|ˆ|fVqdSrµr«r`©r\r]r^r_r«r¬rê± sz*RawTurtle._getshapepoly..)r%r0Úmaxr'r¶)r¿rŽr�r"r«rer¬rd¦ s  zRawTurtle._getshapepolyc Cs¦|j}|j|jj}|j}|jj}|j�r*|jdk�r*|jdk�r*d|_ |j }|dkr´|j dkrfd}n|j dkrx|j }n|j }| | |¡¡}|j|j}}|j|||||dd�nt|d krÎ| ||j|¡nZ|d k�r¢t||ƒD]D\} \} }}| | | d¡¡} |j| | | |¡| |¡|j dd�qânx|j �r6dS|dk�rR| |d d d ¡nJ|d k�rv| ||j|jd j ¡n&|d k�rœ|D]} | | d d d ¡�q„d|_ dS)NrFrŽr‡r¼r2T©rr4rzr<rpr�©r¿r¿r¿r®r*)r‰rÄrˆrDrvrHr(rÑrÐrPr“r%r'r1rcrdr*r)r>rtrÚziprX) r¿r‰rkrZZtitemÚtshaper1ÚfcÚocrCr•r«r«r¬ró³ sR    ÿ ÿ     ÿ zRawTurtle._drawturtlec CsT|j}|j|jj}|j}|j}|dkrŽ| ¡}|jdkr@d}n|jdkrR|j}n|j }|  |  |¡¡}|j |j }}|j|||||dd�n¦|dkr²| d¡}| ||j|¡n‚|d k�r4g}|D]} | ¡} | | ¡qÄt|ƒ}t||ƒD]D\} \} }}|  |  | d¡¡} |j| | | |¡| |¡|j dd�qî|j |¡|j d |f¡|S) NrŽr‡r¼r2Trgrpr®r�rr)r‰rÄrˆrDrvr“r5r%r'r1rcrdr*r)r>rqrtrr9r¶rirXrSrrœ) r¿r‰rkrZrjÚstitemr1rkrlZelementrCr•r«r«r¬rrÛ sH   ÿ   ÿ zRawTurtle.stampcCs´||jkrDt|tƒr,|D]}|j |¡qn |j |¡|j |¡d|f}|j}||jkr`dS|j |¡}|j |¡||j kr”|j d|j |_ |j  |j d|j dg¡dS)Nrrr¼) rSrÂr¶r‰rDrùrr™Úindexršr˜Úinsert)r¿ÚstampidZsubitemrCZbufrnr«r«r¬Ú _clearstamp s        zRawTurtle._clearstampcCs| |¡| ¡dSrµ)rqrE)r¿rpr«r«r¬r6 s zRawTurtle.clearstampcCs^|dkr|jdd…}n&|dkr0|jd|…}n|j|d…}|D]}| |¡qB| ¡dSrk)rSrqrE)r¿rîZtoDeleterCr«r«r¬r7- s zRawTurtle.clearstampsc CsÆ|j|j|jt|jtƒf}|j}d|j|||j|j dd…|  |j¡|j dd…ff}|j rh|j   |¡|j}|j�rZ|jdk�rZ||}|d|jd|d|jd}dt|ddd|j|jƒ}|d|} td|ƒD]R} | dkrúd } nd } || | |_|j�r2| |j||jf|j|j| ¡| ¡qè|j�rZ|j|jd d |jd �|j�rn|j  |¡t|jtƒ�rˆ|j |¡||_|j�r¢|j |¡t|j ƒdk�rº| ¡| ¡dS)NÚgor¼rrÉr�rÍçš™™™™™ñ?rƒTF©r¿r¿r®©rrzé*)r+r)r'rÂrOrÙr‰rrQrRrrÞrrœr,rÐr/r0r¤r|r@rKrEr9rMrLr}r=) r¿rÚgo_modesr‰Z undo_entryÚstartÚdiffÚdiffsqÚnhopsÚdeltarîr<r«r«r¬r I sb ý    ýÿ $$ þ  ÿ   zRawTurtle._gotocs|\}}}}|\}}}} |\} } } ‰|j‰t|j|ƒdkrDtdƒ| |_| |_| ddgkrbd} n|} ˆj| | | |d�‡‡fdd„|jDƒ}|D]}ˆ |¡|j  |¡q’|}|j �r˜ˆj dk�r˜||}|d ˆj d |dˆj d }dt|dd d |j |j ƒ}|d |}td|ƒD]P}|dk�r@d}nd}||||_|�rrˆ |j||jf|||¡| ¡�q,|�r˜ˆj|jdd|d�||_|j�rØt|jƒd k�rÀ|j ¡|jgk�rØd|_d|_| �r|jgk�rúd|_tdƒn|jdk �r|j ¡| ¡dS)Nr�z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r¿r®rucs&g|]}|ˆkrˆ |¡dkr|‘qS)r¨)rvrw©rÞr‰r«r¬r{‘ sÿz'RawTurtle._undogoto..r¼rrÉrÍrsrƒTFrtzUnwahrscheinlich in _undogoto!)r‰rrr¡rQrRr@rÞrDrùr,rÐr/r0r¤r|rKrErMr}rLr�rO)r¿ÚentryÚoldÚnewrwZcoodataZdrawingZpcZpsrBZcLIZcLr~ZusepcZtodeleteryrxryrzr{r|rîr<r«r}r¬Ú _undogoto~ sl     $$  þ  ÿ      zRawTurtle._undogotocCsª|jr|j d||jf¡||j9}|j |¡}|jj}|dkr˜|jdkr˜d|j}dtt |ƒ|ƒ}d||}t |ƒD]}|j |¡|_|  ¡q|||_|  ¡dS)NÚrotr¼rg@rƒ) rrœr rrÓr‰rÐr,r¤rr|rE)r¿rÐZ neworientrôZanglevelr!r|rår«r«r¬r¿ s      zRawTurtle._rotateTcCsnt|jƒdkrD|j |j|j|j|j¡|j ¡|_|j  |j¡n|jj|jdd�g|_|rj|j g|_dS)Nr¼T)r<) r}rRr‰r@rQr)r'r?rÞr9rrAr«r«r¬r=Ñ sÿ zRawTurtle._newLinecCs t|jtƒSrµ)rÂrOrÙrÇr«r«r¬rBá s zRawTurtle.fillingcCsX| ¡s"|j ¡|_|j |j¡|jg|_| ¡|j rL|j   d|jf¡|  ¡dS)NÚ beginfill) rBr‰r5rNrÞr9rrOr=rrœrErÇr«r«r¬r1ï s   zRawTurtle.begin_fillcCs^| ¡rZt|jƒdkrF|jj|j|j|jd�|jrF|j d|jf¡d|_|_|  ¡dS)NrÉr6Údofill) rBr}rOr‰r>rNr*rrœrErÇr«r«r¬r> s ÿ zRawTurtle.end_fillc Gs8|sNt|ttfƒr0| |¡}|jt|jdƒ}qr|j}|sr|jt|jdƒ}n$|dkrh|jt|jdƒ}| |¡}t|jdƒr´|j  |j ||¡}|j   |¡|j r²|j  d|f¡n€| ¡}|j rØ|j  dg¡d|j _z>| ¡dkrî| ¡| ¡| |¡| |¡| d¡W5| |¡X|j �r4d|j _dS) Nr´Ú_dotr<rTr2rF)rÂrér¶rær'rfr)Úhasattrr‰r…rrÞr9rrœrVr›rarMrXrYrWrC)r¿rVr9rCrVr«r«r¬r< s:        z RawTurtle.dotcCsB|j |j||||j¡\}}|j |¡|jr>|j d|f¡|S)NÚwri)r‰rSrr)rÞr9rrœ)r¿rQrRrPrCrr«r«r¬rSH sÿ zRawTurtle._writerP©ÚArialr­r7cCs`|jr|j dg¡d|j_| t|ƒ| ¡|¡}|rN| ¡\}}| ||¡|jr\d|j_dS)NrTF)rrœr›rSrér‘r[re)r¿ÚargZmoverRrPrr¹rºr«r«r¬r{R s  zRawTurtle.writecCs|jg|_d|_dSrñ)rrLrMrÇr«r«r¬r2o s zRawTurtle.begin_polycCs d|_dS©NF)rMrÇr«r«r¬r?} s zRawTurtle.end_polycCs|jdk rt|jƒSdSrµ)rLr¶rÇr«r«r¬rDŠ s zRawTurtle.get_polycCs|jSrµrGrÇr«r«r¬rF— szRawTurtle.getscreencCs|Srµr«rÇr«r«r¬rH§ szRawTurtle.getturtlecCs |j |¡Srµ)r‰rrGr«r«r¬rH¿ szRawTurtle._delayr¼cCs"|j |jj|||¡| ¡dSrµ)r‰r`rˆrHrErør«r«r¬rRÄ szRawTurtle.onclickcCs"|j |jj|||¡| ¡dSrµ)r‰rarˆrHrErør«r«r¬rTÙ szRawTurtle.onreleasecCs|j |jj|||¡dSrµ)r‰rbrˆrHrør«r«r¬rSò szRawTurtle.ondragcCs,|jdkrdS|dkr@|\}}| | ||j¡|j ¡}nè|dkr\|d}| |¡nÌ|dkrp| |¡n¸|dkrš|d}|j |¡|j  |¡nŽ|dkrÀ|d}|jj |dddd �nh|d k�r|d}d|_ |_ ||jk�r(|j |¡|j  |¡n$|d k�r(t  ||d¡|j ¡dS) Nr‚rrrrr)r‡r<r„rhr®r3rƒrV)rrr r�r6r�r‰rDrÞrùr>rNrOr$rV)r¿Úactionr”rÐZdegPAUZdummyrmrCr«r«r¬Ú_undos<      ÿ     zRawTurtle._undocCsl|jdkrdS|j ¡}|d}|dd…}|dkr\|rh| ¡}| |d|dd…¡q4n | ||¡dS)Nrr¼r)rr�r�)r¿rCrŒr”r«r«r¬rw's   zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrPrˆ)N)r¼N)r¼N)r¼N)8rÖr×rØrJr±rûr`rhrxrUr5ròrErrërærXr8rkrlrnrgrtrsrmrcrGrdrórrrqr6r7r r�rr=rBr1r>r<rSr{r2r?rDrFrHrErHrRrTrSr�rwrvr«r«r«r¬r Ñ spý (  (  (   (  (- 5A  0        cCstjdkrtƒt_tjSrµ)r Ú_screenrIr«r«r«r¬r Js c@sfeZdZdZdZedZdd„Zededededfd d „Zd d „Z d d„Z dd„Z dd„Z dS)rINr)cCs®tjdkr4tƒt_|_|j tj¡|j |j¡tjdkrªtd}td}td}td}td}td}|j  ||||¡|j  ¡t_t   |tj¡|  ||||¡dS)NrzrŠr‹rŒr�rŽ)rIÚ_rootrr)Ú_titler$Ú_destroyrþr±rrrrûr&)r¿rzrŠr‹rŒr�rŽr«r«r¬rûXs   z_Screen.__init__rzrŠr�rŽcCs¾t|jdƒsdS|j ¡}|j ¡}t|tƒrNd|krBdkrNnn||}|dkrb||d}t|tƒrŒd|kr€dkrŒnn||}|dkr ||d}|j ||||¡| ¡dS)Nr"rr¼rÉ)r†r�r%r&rÂr£r"r,)r¿rzrŠr r!rLZshr«r«r¬r&ns   " " z _Screen.setupcCs tjdk rtj |¡|t_dSrµ)rIr�r)r�)r¿Z titlestringr«r«r¬r)–s  z _Screen.titlecCs:|j}|tjkr(dt_dt_dt_dt_dt_| ¡dSr‹) r�rIr rÓrŽrþrrïr#)r¿Úrootr«r«r¬r‘§s z_Screen._destroycCs | ¡dSrµ)r‘rÇr«r«r¬r±sz _Screen.byecsN‡fdd„}ˆ |¡tdr"dSz tƒWntk rHtdƒYnXdS)Ncs ˆ ¡dSrµ)r)r¹rºrÇr«r¬ÚexitGracefullyÌsz+_Screen.exitonclick..exitGracefullyr”r)rRr±rÚAttributeErrorÚexit)r¿r“r«rÇr¬r¹s   z_Screen.exitonclick) rÖr×rØr�rþr±r�rûr&r)r‘rrr«r«r«r¬rIRs ÿ ( rIc@s0eZdZdZdZedededfdd„ZdS)r Nrkr�r�cCs,tjdkrtƒt_tj|tj|||d�dS)N)rkr�r�)r rŽr r rû)r¿rkr�r�r«r«r¬rûàs  ýzTurtle.__init__)rÖr×rØrÓrŽr±rûr«r«r«r¬r ×s ýÚturtle_docstringdictc Csòi}tD]}d|}t|ƒj||<qtD]}d|}t|ƒj||<q(td|dƒ�–}tdd„|Dƒƒ}| d¡|dd…D](}| d t|ƒ¡| d ||¡q||d}| d t|ƒ¡| d ||¡| d ¡| ¡W5QRXdS) Nz_Screen.zTurtle.z%s.pyr1css$|]}| d¡dtkr|VqdS)r›r¼N)rÚ _alias_listrßr«r«r¬rêsÿz&write_docstringdict..zdocsdict = { ræz%s : z """%s """, z """%s """ z} ) Ú_tg_screen_functionsr¢Ú__doc__Ú_tg_turtle_functionsrœr÷r{ÚreprÚclose)r¥ÚdocsdictÚ methodnamer©r¦rãr«r«r¬r~ís$   c Cs`dd| ¡i}t|ƒ}|j}|D]8}z||t|ƒ_Wq"tk rXtd|ƒYq"Xq"dS)Nz!turtle_docstringdict_%(language)sr‘zBad docstring-entry: %s)r‘Ú __import__r�r¢r™r°r¡)ZlangÚmodnameÚmoduler�r©r«r«r¬Úread_docstringssr¢r‘zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc Csìd}}t |j¡\}}}|dd…}|dd…}|jp:g}dd„|Dƒ}dgt|ƒt|ƒ|}dd„t||ƒDƒ} |dk rœ|  d|¡| d|¡|dk rÀ|  d|¡| d|¡d | ¡}d |}d |¡}d |}||fS) Nr®r¼cSsg|]}d|f‘qS)z=%rr«)rxrªr«r«r¬r{<sz"getmethparlist..cSsg|]\}}||‘qSr«r«)rxrŠZdfltr«r«r¬r{>sÚ*z**z, z(%s))ÚinspectZgetargsÚ__code__Ú __defaults__r}rir9r) ZobZdefTextZcallTextrZvarargsZvarkwZitems2ZrealArgsÚdefaultsZitems1r«r«r¬Úgetmethparlist,s&     r¨cCsJddl}|dkrdStd}| d|d¡}| d|¡}| d|¡}|S)Nrr’ú%s.r®ú \(.+ %s\):ú:©Úrer±ÚreplaceÚcompileÚsub)Údocstrr­Z turtlenameÚ newdocstrÚparexpr«r«r¬Ú_turtle_docreviseKs r´cCsJddl}|dkrdStd}| d|d¡}| d|¡}| d|¡}|S)Nrr“r©r®rªr«r¬)r±r­Z screennamer²r³r«r«r¬Ú_screen_docreviseWs rµardef {name}{paramslist}: if {obj} is None: if not TurtleScreen._RUNNING: TurtleScreen._RUNNING = True raise Terminator {obj} = {init} try: return {obj}.{name}{argslist} except TK.TclError: if not TurtleScreen._RUNNING: TurtleScreen._RUNNING = True raise Terminator raise c Csl|D]b}t||ƒ}t|ƒ\}}|dkr4td||ƒqtj|||||d�} t| tƒƒ||jƒtƒ|_qdS)Nr®z>>>>>>)ÚobjÚinitrÚZ paramslistZargslist)Úgetattrr¨r¡Ú __func_bodyÚformatrëÚglobalsr™) Z functionsr¸r¶r·Z docreviseržrçZpl1Zpl2Zdefstrr«r«r¬Ú_make_global_funcsws    ÿ r¼zTurtle._screenzScreen()z Turtle._penzTurtle()Ú__main__cCstƒrtƒntƒdSrµ)rNr]rUr«r«r«r¬Ú switchpenŒsr¾cCsltƒtdƒtƒtdƒtƒtdƒtdƒD]Z}|dkrDtƒtdƒD]}tdƒt dƒqL|dkrxt dƒt ƒtƒtd ƒtƒq2td ƒt d ƒtd ƒtƒt dƒtdƒt dƒtdƒt d ƒtƒt dd ƒt dd ƒt dƒtdƒD]$}tdƒt dƒtdƒt dƒqþtdƒtƒtdƒD]&}tdƒt dƒtdƒt dƒ�q:t ƒdS)NTédrÍrÉr´rÙéZZmaroonrr¼r†Fé´Z startstartrxÚredr¯)r`r*ryr0r=rzr|r1rCrPr9r>r_r{)ryrår«r«r¬Údemo1’sX         rÃcCsBtdƒtƒtdƒttddƒƒtddƒd}tdƒtdƒD]}tƒt |dƒqBt dƒt ƒrnt ƒq`t ƒtdƒtd ƒd}td ƒtdƒtd ƒtd d ƒD]p}|dkrÔtƒtd d|dd|ƒtdƒD]}t|ƒtdƒqÜtƒ|d7}tdƒttƒddƒqªtdƒtƒtdƒtdƒtƒtddƒtdƒtƒtdƒD](}t ddƒtdƒtdƒtdƒ�q`tƒtdƒtƒtdƒtƒtdƒtƒ}| d¡tƒ}| d¡| d¡|  ¡| d¡| d¡| ¡| dd¡| d¡| ¡| d¡| dd¡| d¡| d¡tt|ƒƒd}| |¡dk�rÈ| d¡| d ¡| | |¡¡| d¡|d!dk�r¼|  ¡|  ¡tƒ|d7}�qZ|j d"d#d$d%�| d&¡| d¡d'd(„}t! "d¡t ƒ�r|  ¡|  ¡�qþ| d¡|j d)d*d+�| #|d¡dS),Nr¼rÍrrrÀér„zwait a moment...ràZgreenrÁr¦r¥ééxé éFrrÂZyellowr´é2rˆr2ié(rµZblueZorangerÉg @g333333ã?rÙzCAUGHT! )r‰r¥Úboldr_)rPrRr†cSstƒtƒdSrµ)rr)rûrür«r«r¬Úbabaszdemo2..babaz Click me!)ZCourierrÇrË)rP)$rprqrYrdrur;rbr|r¾r4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrar rPryrIr=rrÚtimeÚsleeprR)r råZlaengeryZtrirˆržrÌr«r«r¬Údemo2Çs°                             rÏ)r«)r–)EZ_verZtkinterrùràrÌrÍr¤rÊZos.pathrrrÚcopyrrZ _tg_classesr˜ršZ _tg_utilitiesÚ__all__r—r±r­r´r°r¡r¶rrÜrärêrîrúrrýrrÚobjectr'r€r�rr—rrýr$rBr r r rIr r r~r¢Z _LANGUAGEÚ ImportErrorr¨r´rµr¹r¼rrrÖr¾rÃrÏrr«r«r«r¬Úgsò  ÿú ô  ÿÿþí 5 ÿ c /&/O} "  ÿ   ÿÿ 5c