eqFSrSSKrSSKrSSKrSrSrSrSr\S-r\\S-S -\S-S ---r S r S r S r Sr SrSr"SS\5r"SS\R$5r"SS\5r"SS\5r"SS\5rSr\S:Xa\"5 \R2"5 gg)zturtle-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@[R"[[5$N)randomrandint MINSTICKS MAXSTICKS4/opt/imh/python3.13/lib/python3.13/turtledemo/nim.py randomrowrs >>)Y //rcUSUS- US- nUS:Xa [U5$[S5HnXU- nX0U::dMX#4nUs $ g)Nrr) randommoverange)statexoredzsmoves r computerzugr !s^ !HuQx %( *E z%  1X Hu  a=6DK rc[U5n[R"SS5nXUS::aOM%[R"US:XS- 5nX#4$)Nrrr)maxrr)rmrrands rrr+sW E A  NN1Q  8q1u    >>!a%! ,D 7Nrc2\rSrSrSrSrSrSrSrSr g) NimModel5cXlgr )game)selfr)s r__init__NimModel.__init__6s rc\URR[R[R4;ag[ 5[ 5[ 5/UlSUlSUlURRR5 [RURlg)Nr) r)rNimCREATEDOVERrsticksplayerwinnerviewsetupRUNNINGr*s rr5NimModel.setup9sg 99??3;;"9 9  {IK=    ++ rcURUnX RU'URRRXX0R5 UR 5(aU[ RURlURUl URRR5 gURS:Xa7SUl[UR5upURX5 SUlgg)Nrr) r1r)r4 notify_mover2 game_overr.r0rr3 notify_overr r)r*rowcol maxspaltes rr NimModel.moveBsKK$  C ""3Y D >>  !hhDIIO++DK IINN & & ( [[A DK"4;;/HC IIc DK rc$UR/SQ:H$)N)rrr)r1r7s rr;NimModel.game_overPs{{i''rcNURUU::agURX5 gr )r1rr*r=r>s rr:NimModel.notify_moveSs" ;;s s "  #r)r)r2r1r3N) __name__ __module__ __qualname____firstlineno__r+r5rr;r:__static_attributes__rrrr&r&5s& (rr&c&\rSrSrSrSrSrSrg)StickYc[RRUSS9 XlX lX0lUR X5upEURS5 UR[S- [S- 5 URS5 UR5 URXE5 URS5 UR5 g)NFvisiblesquareg$@g4@rwhite)turtleTurtler+r=r>r)coordsshape shapesizeHUNITWUNITspeedpugotocolor showturtle)r*r=r>r)xys rr+Stick.__init__Zs tU3 {{3$ 8 uTz5:. 1    ! 7 rc[US5up4SSU--SU--[-nSSU--[-nU[S-- [S--[S-U- [S-- 4$)Nrrrr)divmodrYrX SCREENWIDTH SCREENHEIGHT)r*r=r>packet remainderr_r`s rrU Stick.coordshso"3N f_q9} , 5 S[E !;!##eqj0,!2Ca2G%ST*2TTTrcURR[R:wagURRR UR UR5 gr )r)rr.r6 controllerr:r=r>)r*r_r`s rmakemoveStick.makemovens; 99??ckk )  ((488r)r=N)rFrGrHrIr+rUrkrJrrrrLrLYs U =rrLc<\rSrSrSrS SjrSrSrSrSr S r g) NimViewtc|XlURUlURUlURRS5 URR S5 URR S5 [ R"SS9UlURR5 URRS5 0Ul [S5H3n[[5Hn[X#U5URX#4'M M5 URS5 URR S5 g) Nr F)rqr rOrrz... a moment please ...T)r)screenmodel colormodetracerbgcolorrSrTwriterr[rZr1rrrLdisplay)r*r)r=r>s rr+NimView.__init__us kk ZZ  c" 5! O,mmE2   ! 8CY'*/$*? SJ'( ./ 4 rNcURRS5 URR5 Ub]URR S[ *S-S-5 URR S5 URRUSSS9 URR S[ *S-S -5 URR S 5 URRUSS S9 URRS 5 g) NFrr0redcenter)Courierbold)alignfontblack)r~rT)rrrurwclearr\repencolorwrite)r*msg1msg2s rrxNimView.displays 5!    KK  Q,! 3b 8 9 KK  ' KK  d(9N  O lNa/"45 W% $h5JK 4 rc URRS5 [S5HOn[URRU5H&nURX4R [ 5 M( MQ [S5HPn[URRU[5H"nURX4R S5 M$ MR URS5 URRS5 g)NFrrR*Your turn! Click leftmost stick to remove.T) rrrurrsr1r]SCOLORrrxrDs rr5 NimView.setups 5!8CTZZ..s34 SJ'--f558CTZZ..s3Y? SJ'--g6@ AB 4 rcUS:Xa8[n[X#5H"nURX4RU5 M$ gUR S5 [ R "S5 UR S5 [n[US- US- S5H8n[ R "S5 URX4RU5 M: UR S5 g) Nrz ... thinking ... g?z ... thinking ... aaah ...rg?r)HCOLORrr1r]rxtimesleepCOLOR)r*r=r>r?r2farbers rr:NimView.notify_moves Q;E3* SH%++E2+ LL5 6 JJsO LL5 6E9Q;Ar2 3 SH%++E23 LLE FrczURRRS:XaSnOSnURSU5 g)NrzCongrats. You're the winner!!!z"Sorry, the computer is the winner.z2To play again press space bar. To leave press ESC.)r)rsr3rx)r*rs rr<NimView.notify_overs1 99?? ! !Q &3D7D I4PrcURR[R:XaURR 5 ggr )r)rr.r0rrrr7s rr NimView.clears+ 99??chh & KK    'r)r)rsrrr1rwr ) rFrGrHrIr+rxr5r:r<rrJrrrrnrnts"!" ! ! GQ rrnc \rSrSrSrSrSrg) NimControllercnXlURRUlSUlURR 5HnUR UR 5 M URRRURRRS5 URRRURRRS5 URRRS5 URRR5 g)NFspaceEscapezPress space bar to start game)r)r4r1BUSYvaluesonclickrkrronkeyrsr5rrxlisten)r*r)sticks rr+NimController.__init__s ii&&  [['')E MM%.. )* tyy44g> tyy~~33X> >? !rcUR(agSUlURRRX5 SUlg)NTF)rr)rsr:rDs rr:NimController.notify_moves0 99   ##C- r)rr)r1N)rFrGrHrIr+r:rJrrrrrs  "rrc&\rSrSrSrSrSrSrSrg)r.rrrc[RUlXl[ U5Ul[ U5Ul[U5Ul gr ) r.r/rrrr&rsrnr4rrj)r*rrs rr+ Nim.__init__s4[[  d^ DM '-r)rjrsrrrr4N) rFrGrHrIr/r6r0r+rJrrrr.r.sGG D.rr.c[R"5nURS5 UR[[ 5 [ U5ng)Nstandard EVENTLOOP)rSScreenmoder5rdrer.) mainscreennims rmainrs5JOOJ[,/ j/C r__main__)__doc__rSrrrdrerrrXrYrrrrr robjectr&rTrLrnrr.rrFmainlooprrrrs     a2-Q!0CCD  0!v!H=FMM=6A fA HF* .& . zF OOr