JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrU e5dq@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/lib64/python3.8/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|jjtjtjfkrdStttg|_d|_d|_|jj tj |j_dSNr) 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|jdddgkSr")r&r,rrrr.PszNimModel.game_overcCs"|j||krdS|||dSr )r&rr r0r1rrrr-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!r0r1rcoordsshapeZ shapesizeHUNITWUNITspeedpugotocolorZ showturtle)r r0r1rxyrrrr!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|jdSr )rrr#r+ controllerr-r0r1)r rDrErrrmakemovenszStick.makemoveN)r4r5r6r!r<rJrrrrr7Ysr7c@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 r8rrz... a moment please ...T)rscreenmodelZ colormodetracerZbgcolorr:r;writerrAr@r&rrr7display)r rr0r1rrrr!us        zNimView.__init__NcCs|jd|j|dk rT|jdt dd|jd|jj|ddd|jdt dd |jd |jj|dd d|jd dS) NFrr0Zredcenter)Courierbold)ZalignZfontZblack)rTrVT)rMrOrPclearrBrHZpencolorwrite)r Zmsg1msg2rrrrQs    zNimView.displaycCs|jdtdD].}t|jj|D]}|j||ftq(qtdD]0}t|jj|tD]}|j||fdqbqL|d|jddS)NFrr9*Your turn! Click leftmost stick to remove.T) rMrOrrNr&rCSCOLORrrQr3rrrr*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&rCrQtimesleepCOLOR)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|jdSr )rrr#r%rMrYr,rrrrYsz NimView.clear)N) r4r5r6r!rQr*r-r/rYrrrrrKts   rKc@seZdZddZddZdS) NimControllercCs|||_|jj|_d|_|jD]}||jq |jj|jj j d|jj|jjj d|jj d|jj dS)NFZspaceZEscapezPress space bar to start game)rr)r&BUSYvaluesZonclickrJrMZonkeyrNr*rYrQZlisten)r rZstickrrrr!s zNimController.__init__cCs*|jr dSd|_|jj||d|_dS)NTF)rdrrNr-r3rrrr-s zNimController.notify_moveN)r4r5r6r!r-rrrrrcs rcc@s eZdZdZdZdZddZdS)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|ttt|}dS)NZstandardZ EVENTLOOP)r:ZScreenmoder*rGrHr#)Z mainscreenZnimrrrmains   rg__main__)__doc__r:r r`rGrHrrr>r?r]r_rbrrrobjectrr;r7rKrcr#rgr4Zmainlooprrrrs0   $D