B ¾f ÿkcgõã@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ú3/opt/alt/python37/lib64/python3.7/turtledemo/nim.pyÚ randomrowsrcCsb|d|dA|dA}|dkr(t|ƒSx4tdƒD](}|||A}|||kr2||f}|Sq2WdS)Nréré)Ú randommoveÚrange)ÚstateZxoredÚzÚsÚmoverrrÚ computerzug!s  rcCsLt|ƒ}x"t dd¡}|||dkkr Pq Wt |dk||d¡}||fS)Nrrr)Úmaxr r )rÚmrZrandrrrr+s rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚNimModelcCs ||_dS)N)Úgame)ÚselfrrrrÚ__init__6szNimModel.__init__cCsP|jjtjtjgkrdStƒtƒtƒg|_d|_d|_|jj   ¡tj |j_dS)Nr) rrÚNimÚCREATEDÚOVERrÚsticksÚplayerÚwinnerÚviewÚsetupÚRUNNING)rrrrr(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|jdddgkS)Nr)r$)rrrrr+PszNimModel.game_overcCs"|j||krdS| ||¡dS)N)r$r)rr-r.rrrr*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)ÚvisibleZsquareg$@g4@rÚwhite)ÚturtleÚTurtler r-r.rÚcoordsÚshapeZ shapesizeÚHUNITÚWUNITÚspeedÚpuÚgotoÚcolorZ showturtle)rr-r.rÚxÚyrrrr Zs    zStick.__init__cCs^t|dƒ\}}dd|d|t}dd|t}|tdtdtd|tdfS)Nrrrr)Údivmodr;r:Ú SCREENWIDTHÚ SCREENHEIGHT)rr-r.ZpacketZ remainderr@rArrrr8hsz Stick.coordscCs*|jjtjkrdS|jj |j|j¡dS)N)rrr!r)Ú controllerr*r-r.)rr@rArrrÚmakemovenszStick.makemoveN)r0r1r2r r8rFrrrrr3Ysr3c@s>eZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „ZdS)ÚNimViewcCs¸||_|j|_|j|_|j d¡|j d¡|j d¡tjdd|_|j  ¡|j  d¡i|_ x8t dƒD],}x&t t ƒD]}t|||ƒ|j ||f<q|WqnW| d¡|j d¡dS) Nr F)éðrHr )r4rrz... a moment please ...T)rÚscreenÚmodelZ colormodeÚtracerZbgcolorr6r7Úwriterr=r<r$rrr3Údisplay)rrr-r.rrrr us      zNimView.__init__NcCsš|j d¡|j ¡|dk rT|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)rPérRT)rIrKrLÚclearr>rDZpencolorÚwrite)rZmsg1Úmsg2rrrrM†s    zNimView.displaycCs¨|j d¡x>tdƒD]2}x,t|jj|ƒD]}|j||f t¡q,WqWx@tdƒD]4}x.t|jj|tƒD]}|j||f d¡qnWqVW| d¡|j d¡dS)NFrr5z*Your turn! Click leftmost stick to remove.T) rIrKrrJr$r?ÚSCOLORrrM)rr-r.rrrr(’s  z NimView.setupcCs¢|dkr6t}xt||ƒD]}|j||f |¡qWnh| d¡t d¡| d¡t}x:t|d|ddƒD]"}t d¡|j||f |¡qnW| d¡dS) Nrz ... thinking ... gà?z ... thinking ... aaah ...réÿÿÿÿgš™™™™™É?z*Your turn! Click leftmost stick to remove.)ÚHCOLORrr$r?rMÚtimeZsleepÚCOLOR)rr-r.r/r%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.)rrJr&rM)rrWrrrr,¬szNimView.notify_overcCs|jjtjkr|j ¡dS)N)rrr!r#rIrU)rrrrrU³sz NimView.clear)N) r0r1r2r rMr(r*r,rUrrrrrGts   rGc@seZdZdd„Zdd„ZdS)Ú NimControllercCs€||_|jj|_d|_x|j ¡D]}| |j¡q"W|jj |jj j d¡|jj |jjj d¡|jj  d¡|jj  ¡dS)NFZspaceZEscapezPress space bar to start game)rr'r$ÚBUSYÚvaluesZonclickrFrIZonkeyrJr(rUrMZlisten)rrZstickrrrr ºs zNimController.__init__cCs*|jr dSd|_|jj ||¡d|_dS)NTF)r^rrJr*)rr-r.rrrr*Ås zNimController.notify_moveN)r0r1r2r r*rrrrr]¸s r]c@s eZdZdZdZdZdd„ZdS)r!rrrcCs0tj|_||_t|ƒ|_t|ƒ|_t|ƒ|_ dS)N) r!r"rrIrrJrGr'r]rE)rrIrrrr Ñs   z Nim.__init__N)r0r1r2r"r)r#r rrrrr!Ísr!cCs*t ¡}| d¡| tt¡t|ƒ}dS)NZstandardZ EVENTLOOP)r6ZScreenÚmoder(rCrDr!)Z mainscreenZnimrrrÚmainÙs   raÚ__main__)Ú__doc__r6r r[rCrDr rr:r;rXrZr\rrrÚobjectrr7r3rGr]r!rar0ZmainlooprrrrÚ s0  $D