asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T a bYhq@sdZddlZddlZddlZdZdZdZdZedZeedd edd Z d Z d Z d Z ddZ ddZddZGdddeZGdddejZGdddeZGdddeZGdddeZddZed kreedS)!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. Nii  )?rr)r )r r r cCs tttSN)randomrandint MINSTICKS MAXSTICKSrr*/usr/local/lib/python3.9/turtledemo/nim.py randomrowsrcCsb|d|dA|dA}|dkr(t|StdD],}|||A}|||kr0||f}|Sq0dS)Nrr) randommoverange)stateZxoredzsmoverrr computerzug!s   rcCsHt|}tdd}|||dkkrq(qt|dk||d}||fS)Nrrr)maxr r )rmrZrandrrrr+s  rc@s4eZdZddZddZddZddZd d Zd S) NimModelcCs ||_dSr )game)selfrrrr__init__6szNimModel.__init__cCsP|jjtjtjfvrdStttg|_d|_d|_|jj tj |j_dS)Nr) rrNimCREATEDOVERrsticksplayerwinnerviewsetupRUNNINGr rrrr)9s zNimModel.setupcCs|j|}||j|<|jj||||j|rRtj|j_|j|_ |jj n0|jdkrd|_t |j\}}| ||d|_dS)Nrr) r%rr( notify_mover& game_overr"r$rr' notify_overrr)r rowcol maxspalterrrrBs     z NimModel.movecCs|jgdkS)N)rrr)r%r+rrrr-PszNimModel.game_overcCs"|j||krdS|||dSr )r%rr r/r0rrrr,SszNimModel.notify_moveN)__name__ __module__ __qualname__r!r)rr-r,rrrrr5s  rc@s$eZdZddZddZddZdS)StickcCstjj|dd||_||_||_|||\}}|d|t dt d| d| | |||d|dS)NFZvisibleZsquareg$@g4@rwhite)turtleTurtler!r/r0rcoordsshapeZ shapesizeHUNITWUNITspeedpugotocolorZ showturtle)r r/r0rxyrrrr!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|jdSr )rrr"r* controllerr,r/r0)r rCrDrrrmakemovenszStick.makemoveN)r3r4r5r!r;rJrrrrr6Ysr6c@s>eZdZddZdddZddZdd Zd d Zd d ZdS)NimViewcCs||_|j|_|j|_|jd|jd|jdtjdd|_|j |j di|_ t dD](}t t D]}t||||j ||f<qxql|d|jddS) Nr F)rLr r7rrz... a moment please ...T)rscreenmodelZ colormodetracerZbgcolorr9r:writerr@r?r%rrr6display)r rr/r0rrrr!us        zNimView.__init__NcCs|jd|j|durT|jdt dd|jd|jj|ddd|jdt dd |jd |jj|dd d|jd dS) NFrr0Zredcenter)Courierbold)ZalignZfontZblack)rTrVT)rMrOrPclearrArGZpencolorwrite)r Zmsg1msg2rrrrQs    zNimView.displaycCs|jdtdD].}t|jj|D]}|j||ftq(qtdD]0}t|jj|tD]}|j||fdqbqL|d|jddS)NFrr8*Your turn! Click leftmost stick to remove.T) rMrOrrNr%rBSCOLORrrQr2rrrr)s    z NimView.setupcCs|dkr2t}t||D]}|j||f|qnd|dtd|dt}t|d|ddD]"}td|j||f|qh|ddS) Nrz ... thinking ... g?z ... thinking ... aaah ...rg?r\)HCOLORrr%rBrQtimesleepCOLOR)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|jdSr )rrr"r$rMrYr+rrrrYsz NimView.clear)N) r3r4r5r!rQr)r,r.rYrrrrrKts   rKc@seZdZddZddZdS) NimControllercCs|||_|jj|_d|_|jD]}||jq |jj|jj j d|jj|jjj d|jj d|jj dS)NFspaceZEscapezPress space bar to start game)rr(r%BUSYvaluesZonclickrJrMZonkeyrNr)rYrQlisten)r rZstickrrrr!s zNimController.__init__cCs*|jr dSd|_|jj||d|_dS)NTF)rerrNr,r2rrrr,s zNimController.notify_moveN)r3r4r5r!r,rrrrrcs rcc@s eZdZdZdZdZddZdS)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|ttt|}dS)NZstandardZ EVENTLOOP)r9ZScreenmoder)rFrGr")Z mainscreenZnimrrrmains   ri__main__)__doc__r9r r`rFrGrrr=r>r]r_rbrrrobjectrr:r6rKrcr"rir3Zmainlooprrrrs0   $D