pFU`dZddlZddlZddlZdZdZdZdZedzZeedzd zedzd zzzZ d Z d Z d Z dZ dZdZGddeZGddejZGddeZGddeZGddeZdZedkreejdSdS)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  )?r r)r )r r r c@tjttSN)randomrandint MINSTICKS MAXSTICKS5/opt/alt/python311/lib64/python3.11/turtledemo/nim.py randomrowrs >)Y / //rc|d|dz |dz }|dkrt|StdD]!}|||z }|||kr||f}|cS"dS)Nrr) randommoverange)statexoredzsmoves r computerzugr !s !HuQx %( *E zz%   1XX !Hu  a==q6DKKK rct|} tjdd}|||dkkrn'tj|dk||dz }||fS)NTrrr)maxrr)rmrrands rrr+sf E A N1Q   8q1u    >!a%q! , ,D d7Nrc,eZdZdZdZdZdZdZdS)NimModelc||_dSr )game)selfr(s r__init__zNimModel.__init__6s  rc2|jjtjtjfvrdSt t t g|_d|_d|_|jj tj |j_dS)Nr) r(rNimCREATEDOVERrsticksplayerwinnerviewsetupRUNNINGr)s rr3zNimModel.setup9sl 9?3;"9 9 9 F {{IKK=    + rc|j|}||j|<|jj||||j|rBt j|j_|j|_ |jj dS|jdkr=d|_t|j\}}| ||d|_dSdS)Nrr) r/r(r2 notify_mover0 game_overr,r.rr1 notify_overr r)r)rowcol maxspaltes rrz NimModel.moveBsK$  C ""3Y DDD >>   !hDIO+DK IN & & ( ( ( ( ( [A  DK"4;//HC IIc3   DKKK  rc|jgdkS)N)rrr)r/r5s rr8zNimModel.game_overPs{iii''rcX|j||krdS|||dSr )r/rr)r:r;s rr7zNimModel.notify_moveSs3 ;s s " " F #srN)__name__ __module__ __qualname__r*r3rr8r7rrrr&r&5s_&&&   (((rr&c eZdZdZdZdZdS)Stickctj|d||_||_||_|||\}}|d|tdz tdz | d| | |||d|dS)NFvisiblesquareg$@g4@rwhite)turtleTurtler*r:r;r(coordsshape shapesizeHUNITWUNITspeedpugotocolor showturtle)r)r:r;r(xys rr*zStick.__init__Zs tU333 {{3$$1 8 uTz5:... 1    !A 7 rct|d\}}dd|zzd|zztz}dd|zztz}|tdzz tdzztdz|z tdzz fS)Nrrrr)divmodrPrO SCREENWIDTH SCREENHEIGHT)r)r:r;packet remainderrVrWs rrLz Stick.coordshss"3NN f_q9} , 5 S[E !;!##eqj0,!2Ca2G%ST*2TTTrc|jjtjkrdS|jj|j|jdSr )r(rr,r4 controllerr7r:r;)r)rVrWs rmakemovezStick.makemovens= 9?ck ) ) F ((48<<<<t}t||D]$}|j||f|%dS|dt jd|dt}t|dz |dz dD]8}t jd|j||f|9|ddS) Nrz ... thinking ... g?z ... thinking ... aaah ...rg?r~)HCOLORrr/rTrktimesleepCOLOR)r)r:r;r<r0farbers rr7zNimView.notify_moves Q;;E3 ** 3 3 S!H%++E2222 3 3 LL5 6 6 6 JsOOO LL5 6 6 6E9Q;Ar22 3 3 3 S!H%++E2222 LLE F F F F Frcf|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.)r(rfr1rk)r)r|s rr9zNimView.notify_overs; 9? !Q & &3DD7D I4PPPPPrcp|jjtjkr|jdSdSr )r(rr,r.rerxr5s rrxz NimView.clears5 9?ch & & K        ' &rr ) r@rArBr*rkr3r7r9rxrrrrbrbtsy!!!" ! ! ! ! ! ! ! G G GQQQ     rrbceZdZdZdZdS) NimControllerc||_|jj|_d|_|jD]}||j|jj|jj j d|jj|jjj d|jj d|jj dS)NFspaceEscapezPress space bar to start game)r(r2r/BUSYvaluesonclickr`reonkeyrfr3rxrklisten)r)r(sticks rr*zNimController.__init__s i&  ['')) * *E MM%. ) ) ) ) ty4g>>> ty~3X>>> >??? !!!!!rct|jrdSd|_|jj||d|_dS)NTF)rr(rfr7r?s rr7zNimController.notify_moves= 9  F  ##C--- rN)r@rArBr*r7rrrrrs2 " " "rrc eZdZdZdZdZdZdS)r,rrrctj|_||_t ||_t ||_t||_ dSr ) r,r-rrer&rfrbr2rr_)r)res rr*z Nim.__init__s?[  d^^ DMM '--rN)r@rArBr-r4r.r*rrrr,r,s2GG D.....rr,ctj}|d|tt t |}dS)Nstandard EVENTLOOP)rJScreenmoder3rZr[r,) mainscreennims rmainrsEJOOJ[,/// j//C ;r__main__)__doc__rJrrrZr[rrrOrPrrrrr robjectr&rKrDrbrr,rr@mainlooprrrrs      a2-Q!0CCD  000!!!!!v!!!H=====FM===6A A A A A fA A A HF* . . . . .& . . . zDFFFFOr