a ÕDOgqã@sèdZddlZddlZddlZdZdZdZdZedZeedd edd Z d Z d Z d Z dd„Z dd„Zdd„ZGdd„deƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZdd„Zed kräeƒe ¡dS)!z¿ turtle-example-suite: tdemo_nim.py Play nim against the computer. The player who takes the last stick is the winner. Implements the model-view-controller design pattern. éNi€iàééé éé é)é?rr)éÿéÌr )r r r cCs t tt¡S©N)ÚrandomÚrandintÚ MINSTICKSÚ MAXSTICKS©rrú&/usr/lib64/python3.9/turtledemo/nim.pyÚ randomrowsrcCsb|d|dA|dA}|dkr(t|ƒStdƒD],}|||A}|||kr0||f}|Sq0dS)Nréré)Ú randommoveÚrange)ÚstateZxoredÚzÚsÚmoverrrÚ computerzug!s   rcCsHt|ƒ}t dd¡}|||dkkrq(qt |dk||d¡}||fS)Nrrr)Úmaxr r )rÚmrZrandrrrr+s  rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚNimModelcCs ||_dSr )Úgame)ÚselfrrrrÚ__init__6szNimModel.__init__cCsP|jjtjtjfvrdStƒtƒtƒg|_d|_d|_|jj   ¡tj |j_dS)Nr) rrÚNimÚCREATEDÚOVERrÚsticksÚplayerÚwinnerÚviewÚsetupÚRUNNING©r rrrr)9s zNimModel.setupcCs†|j|}||j|<|jj ||||j¡| ¡rRtj|j_|j|_ |jj  ¡n0|jdkr‚d|_t |jƒ\}}|  ||¡d|_dS)Nrr) r%rr(Ú notify_mover&Ú game_overr"r$rr'Ú notify_overrr)r ÚrowÚcolÚ maxspalterrrrBs     z NimModel.movecCs|jgd¢kS)N)rrr)r%r+rrrr-PszNimModel.game_overcCs"|j||krdS| ||¡dSr )r%r©r r/r0rrrr,SszNimModel.notify_moveN)Ú__name__Ú __module__Ú __qualname__r!r)rr-r,rrrrr5s  rc@s$eZdZdd„Zdd„Zdd„ZdS)ÚStickcCs„tjj|dd||_||_||_| ||¡\}}| d¡| t dt d¡|  d¡|  ¡|  ||¡| d¡| ¡dS)NF©ZvisibleZsquareg$@g4@rÚwhite)ÚturtleÚTurtler!r/r0rÚcoordsÚshapeZ shapesizeÚHUNITÚWUNITÚspeedÚpuÚgotoÚcolorZ showturtle)r r/r0rÚxÚyrrrr!Zs    zStick.__init__cCs^t|dƒ\}}dd|d|t}dd|t}|tdtdtd|tdfS)Nrrrr)Údivmodr>r=Ú SCREENWIDTHÚ SCREENHEIGHT)r r/r0ZpacketÚ remainderrCrDrrrr;hsz Stick.coordscCs*|jjtjkrdS|jj |j|j¡dSr )rrr"r*Ú controllerr,r/r0)r rCrDrrrÚmakemovenszStick.makemoveN)r3r4r5r!r;rJrrrrr6Ysr6c@s>eZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „ZdS)ÚNimViewcCs°||_|j|_|j|_|j d¡|j d¡|j d¡tjdd|_|j  ¡|j  d¡i|_ t dƒD](}t t ƒD]}t|||ƒ|j ||f<qxql| d¡|j d¡dS) Nr F)éðrLr r7rrz... a moment please ...T)rÚscreenÚmodelZ colormodeÚtracerZbgcolorr9r:Úwriterr@r?r%rrr6Údisplay)r rr/r0rrrr!us        zNimView.__init__NcCsš|j d¡|j ¡|durT|j dt dd¡|j d¡|jj|ddd|j dt dd ¡|j d ¡|jj|dd d|j d ¡dS) NFrré0ZredÚcenter)ÚCourieréÚbold)ZalignZfontéZblack)rTérVT)rMrOrPÚclearrArGZpencolorÚwrite)r Zmsg1Úmsg2rrrrQ†s    zNimView.displaycCs˜|j d¡tdƒD].}t|jj|ƒD]}|j||f t¡q(qtdƒD]0}t|jj|tƒD]}|j||f d¡qbqL| d¡|j d¡dS)NFrr8ú*Your turn! Click leftmost stick to remove.T) rMrOrrNr%rBÚSCOLORrrQr2rrrr)’s    z NimView.setupcCsš|dkr2t}t||ƒD]}|j||f |¡qnd| d¡t d¡| d¡t}t|d|ddƒD]"}t d¡|j||f |¡qh| d¡dS) Nrz ... thinking ... gà?z ... thinking ... aaah ...réÿÿÿÿgš™™™™™É?r\)ÚHCOLORrr%rBrQÚtimeÚsleepÚCOLOR)r r/r0r1r&Zfarberrrrr,s    zNimView.notify_movecCs(|jjjdkrd}nd}| d|¡dS)NrzCongrats. You're the winner!!!z"Sorry, the computer is the winner.z2To play again press space bar. To leave press ESC.)rrNr'rQ)r r[rrrr.¬szNimView.notify_overcCs|jjtjkr|j ¡dSr )rrr"r$rMrYr+rrrrY³sz NimView.clear)N) r3r4r5r!rQr)r,r.rYrrrrrKts   rKc@seZdZdd„Zdd„ZdS)Ú NimControllercCs|||_|jj|_d|_|j ¡D]}| |j¡q |jj |jj j d¡|jj |jjj d¡|jj  d¡|jj  ¡dS)NFÚspaceZEscapezPress space bar to start game)rr(r%ÚBUSYÚvaluesZonclickrJrMZonkeyrNr)rYrQÚlisten)r rZstickrrrr!ºs zNimController.__init__cCs*|jr dSd|_|jj ||¡d|_dS)NTF)rerrNr,r2rrrr,Ås zNimController.notify_moveN)r3r4r5r!r,rrrrrc¸s rcc@s eZdZdZdZdZdd„ZdS)r"rrrcCs0tj|_||_t|ƒ|_t|ƒ|_t|ƒ|_ dSr ) r"r#rrMrrNrKr(rcrI)r rMrrrr!Ñs   z Nim.__init__N)r3r4r5r#r*r$r!rrrrr"Ísr"cCs*t ¡}| d¡| tt¡t|ƒ}dS)NZstandardZ EVENTLOOP)r9ZScreenÚmoder)rFrGr")Z mainscreenZnimrrrÚmainÙs   riÚ__main__)Ú__doc__r9r r`rFrGrrr=r>r]r_rbrrrÚobjectrr:r6rKrcr"rir3ZmainlooprrrrÚs0   $D