U e5dqã@säddlZddlZddlZdZdZdZdZedZeeddedd Zd Z d Z d Z d d„Z dd„Z dd„ZGdd„deƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZdd„Zedkràeƒe ¡dS) éNi€iàééé éé é)é?rr)éÿéÌr )r r r cCs t tt¡S©N)ÚrandomÚrandintÚ MINSTICKSÚ MAXSTICKS©rrú&/usr/lib64/python3.8/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|jjtjtjfkrdStƒ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|jdddgkSr")r&r,rrrr.PszNimModel.game_overcCs"|j||krdS| ||¡dSr )r&r©r r0r1rrrr-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!r0r1rÚcoordsÚshapeZ shapesizeÚHUNITÚWUNITÚspeedÚpuÚgotoÚcolorZ showturtle)r r0r1rÚxÚyrrrr!Zs    zStick.__init__cCs^t|dƒ\}}dd|d|t}dd|t}|tdtdtd|tdfS)Nrrrr)Údivmodr?r>Ú SCREENWIDTHÚ SCREENHEIGHT)r r0r1ZpacketZ remainderrDrErrrr<hsz Stick.coordscCs*|jjtjkrdS|jj |j|j¡dSr )rrr#r+Ú controllerr-r0r1)r rDrErrrÚmakemovenszStick.makemoveN)r4r5r6r!r<rJrrrrr7Ysr7c@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 r8rrz... a moment please ...T)rÚscreenÚmodelZ colormodeÚtracerZbgcolorr:r;ÚwriterrAr@r&rrr7Údisplay)r rr0r1rrrr!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)rTérVT)rMrOrPÚclearrBrHZpencolorÚ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)NFrr9ú*Your turn! Click leftmost stick to remove.T) rMrOrrNr&rCÚSCOLORrrQr3rrrr*’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&rCrQÚtimeÚsleepÚCOLOR)r r0r1r2r'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) r4r5r6r!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)NFZspaceZEscapezPress space bar to start game)rr)r&ÚBUSYÚvaluesZonclickrJrMZonkeyrNr*rYrQZlisten)r rZstickrrrr!ºs zNimController.__init__cCs*|jr dSd|_|jj ||¡d|_dS)NTF)rdrrNr-r3rrrr-Ås zNimController.notify_moveN)r4r5r6r!r-rrrrrc¸s rcc@s eZdZdZdZdZdd„ZdS)r#rrrcCs0tj|_||_t|ƒ|_t|ƒ|_t|ƒ|_ dSr ) r#r$rrMrrNrKr)rcrI)r rMrrrr!Ñs   z Nim.__init__N)r4r5r6r$r+r%r!rrrrr#Ísr#cCs*t ¡}| d¡| tt¡t|ƒ}dS)NZstandardZ EVENTLOOP)r:ZScreenÚmoder*rGrHr#)Z mainscreenZnimrrrÚmainÙs   rgÚ__main__)r:r r`rGrHrrr>r?r]r_rbrrrÚobjectrr;r7rKrcr#rgr4ZmainlooprrrrÚ s.  $D