ó
    •JÕiq  ã                   óF  • S r SSKrSSKrSSKrSrSrSrSr\S-  r\\S-  S	-  \S-  S
-  -   -  r	Sr
SrSrS rS rS r " S S\5      r " S S\R$                  5      r " S S\5      r " S S\5      r " S S\5      rS r\S:X  a  \" 5         \R2                  " 5         gg)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.
é    Ni€  ià  é   é   é   é   é   é   )é?   r	   r   )éÿ   éÌ   r   )r   r   r
   c                  ó@   • [         R                  " [        [        5      $ ©N)ÚrandomÚrandintÚ	MINSTICKSÚ	MAXSTICKS© ó    ÚLib\turtledemo\nim.pyÚ	randomrowr      s   € Ü�>Š>œ)¤YÓ/Ð/r   c                 ó˜   • U S   U S   -  U S   -  nUS:X  a  [        U 5      $ [        S5       H  nX   U-  nX0U   ::  d  M  X#4nUs  $    g )Nr   é   r   é   )Ú
randommoveÚrange)ÚstateÚxoredÚzÚsÚmoves        r   Úcomputerzugr    !   s^   € Ø�!‰H�u˜Q‘xÑ %¨¡(Ñ*€EØ�ƒzÜ˜%Ó Ð Ü�1ŽXˆØ‰H�uÑˆØ�a‘�=Ø�6ˆDØŠKò	 r   c                 ó¨   • [        U 5      n [        R                  " SS5      nX   US:„  :”  a  OM%  [        R                  " US:„  X   S-
  5      nX#4$ )Nr   r   r   )Úmaxr   r   )r   Úmr   Úrands       r   r   r   +   sW   € ÜˆE‹
€AØ
Ü�NŠN˜1˜QÓˆØ‰8�q˜1‘uÓØñ ô �>Š>˜!˜a™% ¡¨!¡Ó,€DØˆ7€Nr   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	ÚNimModelé5   c                 ó   • Xl         g r   )Úgame)Úselfr)   s     r   Ú__init__ÚNimModel.__init__6   s   € Ø�	r   c                 ó\  • U R                   R                  [        R                  [        R                  4;  a  g [        5       [        5       [        5       /U l        SU l        S U l        U R                   R                  R                  5         [        R                  U R                   l        g )Nr   )r)   r   ÚNimÚCREATEDÚOVERr   ÚsticksÚplayerÚwinnerÚviewÚsetupÚRUNNING©r*   s    r   r5   ÚNimModel.setup9   sg   € Ø�9‰9�?‰?¤3§;¡;´·±Ð"9Ó9ØÜ “{¤I£K´³Ð=ˆŒØˆŒØˆŒØ�	‰	�‰×ÑÔÜŸ+™+ˆ�	‰	�r   c                 ó   • U R                   U   nX R                   U'   U R                  R                  R                  XX0R                  5        U R                  5       (       aU  [        R                  U R                  l        U R                  U l	        U R                  R                  R                  5         g U R                  S:X  a7  SU l        [        U R                   5      u  pU R                  X5        SU l        g g )Nr   r   )r1   r)   r4   Únotify_mover2   Ú	game_overr.   r0   r   r3   Únotify_overr    r   )r*   ÚrowÚcolÚ	maxspaltes       r   r   ÚNimModel.moveB   s®   € Ø—K‘K Ñ$ˆ	Ø�‰�CÑØ�	‰	�‰×"Ñ" 3¨Y¿¹ÔDØ�>‰>×ÑÜ!Ÿh™hˆD�I‰IŒOØŸ+™+ˆDŒKØ�I‰I�N‰N×&Ñ&Õ(Ø�[‰[˜AÓØˆDŒKÜ" 4§;¡;Ó/‰HˆCØ�I‰I�cÔØˆD�Kð	 r   c                 ó$   • U R                   / SQ:H  $ )N)r   r   r   )r1   r7   s    r   r;   ÚNimModel.game_overP   s   € Ø�{‰{šiÑ'Ð'r   c                 óN   • U R                   U   U::  a  g U R                  X5        g r   )r1   r   ©r*   r=   r>   s      r   r:   ÚNimModel.notify_moveS   s"   € Ø�;‰;�sÑ˜sÓ"ØØ�	‰	�#Õr   )r)   r2   r1   r3   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   r5   r   r;   r:   Ú__static_attributes__r   r   r   r&   r&   5   s   † òò&òò(õr   r&   c                   ó&   • \ rS rSrS rS rS rSrg)ÚStickéY   c                 ó’  • [         R                  R                  U SS9  Xl        X l        X0l        U R                  X5      u  pEU R                  S5        U R                  [        S-  [        S-  5        U R                  S5        U R                  5         U R                  XE5        U R                  S5        U R                  5         g )NF©ÚvisibleÚsquareg      $@g      4@r   Úwhite)ÚturtleÚTurtler+   r=   r>   r)   ÚcoordsÚshapeÚ	shapesizeÚHUNITÚWUNITÚspeedÚpuÚgotoÚcolorÚ
showturtle)r*   r=   r>   r)   ÚxÚys         r   r+   ÚStick.__init__Z   s�   € Ü�‰×Ñ˜t¨UÐÑ3ØŒØŒØŒ	Ø�{‰{˜3Ó$‰ˆØ�
‰
�8ÔØ�‰”u˜T‘z¤5¨¡:Ô.Ø�
‰
�1ŒØ�‰Œ	Ø�	‰	�!ŒØ�
‰
�7ÔØ�‰Õr   c                 ó¾   • [        US5      u  p4SSU-  -   SU-  -   [        -  nSSU-  -   [        -  nU[        S-  -
  [        S-  -   [        S-  U-
  [        S-  -
  4$ )Nr   r   r   r   )ÚdivmodrY   rX   ÚSCREENWIDTHÚSCREENHEIGHT)r*   r=   r>   ÚpacketÚ	remainderr_   r`   s          r   rU   ÚStick.coordsh   so   € Ü" 3¨›NÑˆØ��f‘‰_˜q 9™}Ñ,´Ñ5ˆØ��S‘‰[œEÑ!ˆØ”; !Ñ#Ñ#¤e¨q¡jÑ0´,À!Ñ2CÀaÑ2GÌ%ÐSTÉ*Ñ2TÐTÐTr   c                 óÊ   • U R                   R                  [        R                  :w  a  g U R                   R                  R                  U R                  U R                  5        g r   )r)   r   r.   r6   Ú
controllerr:   r=   r>   )r*   r_   r`   s      r   ÚmakemoveÚStick.makemoven   s;   € Ø�9‰9�?‰?œcŸk™kÓ)ØØ�	‰	×Ñ×(Ñ(¨¯©°4·8±8Õ<r   )r>   r)   r=   N)rF   rG   rH   rI   r+   rU   rk   rJ   r   r   r   rL   rL   Y   s   † òòUõ=r   rL   c                   ó<   • \ rS rSrS rS
S jrS rS rS rS r	S	r
g)ÚNimViewét   c                 ó|  • Xl         UR                  U l        UR                  U l        U R                  R                  S5        U R                  R	                  S5        U R                  R                  S5        [        R                  " SS9U l        U R                  R                  5         U R                  R                  S5        0 U l        [        S5       H3  n[        [        5       H  n[        X#U5      U R                  X#4'   M     M5     U R                  S5        U R                  R	                  S5        g )	Nr
   F)éð   rq   r
   rO   r   r   z... a moment please ...T)r)   ÚscreenÚmodelÚ	colormodeÚtracerÚbgcolorrS   rT   Úwriterr[   rZ   r1   r   r   rL   Údisplay)r*   r)   r=   r>   s       r   r+   ÚNimView.__init__u   sß   € ØŒ	Ø—k‘kˆŒØ—Z‘ZˆŒ
Ø�‰×Ñ˜cÔ"Ø�‰×Ñ˜5Ô!Ø�‰×Ñ˜OÔ,Ü—m’m¨EÑ2ˆŒØ�‰�‰ÔØ�‰×Ñ˜!ÔØˆŒÜ˜–8ˆCÜœYÖ'�Ü*/°¸$Ó*?�—‘˜S˜JÓ'ó (ñ ð 	�‰Ð.Ô/Ø�‰×Ñ˜4Õ r   Nc                 ó  • U R                   R                  S5        U R                  R                  5         Ub]  U R                  R	                  S[
        * S-  S-   5        U R                  R                  S5        U R                  R                  USSS9  U R                  R	                  S[
        * S-  S	-   5        U R                  R                  S
5        U R                  R                  USSS9  U R                   R                  S5        g )NFr   r   é0   ÚredÚcenter)ÚCourieré   Úbold)ÚalignÚfonté   Úblack)r~   é   r€   T)rr   ru   rw   Úclearr\   re   ÚpencolorÚwrite)r*   Úmsg1Úmsg2s      r   rx   ÚNimView.display†   sÔ   € Ø�‰×Ñ˜5Ô!Ø�‰×ÑÔØÑØ�K‰K×Ñ˜Q¤, °!Ñ 3°bÑ 8Ô9Ø�K‰K× Ñ  Ô'Ø�K‰K×Ñ˜d¨(Ð9NÐÑOØ�‰×Ñ˜œl˜N¨aÑ/°"Ñ4Ô5Ø�‰×Ñ˜WÔ%Ø�‰×Ñ˜$ hÐ5JÐÑKØ�‰×Ñ˜4Õ r   c                 ó  • U R                   R                  S5        [        S5       HO  n[        U R                  R                  U   5       H&  nU R                  X4   R                  [        5        M(     MQ     [        S5       HP  n[        U R                  R                  U   [        5       H"  nU R                  X4   R                  S5        M$     MR     U R                  S5        U R                   R                  S5        g )NFr   rR   ú*Your turn! Click leftmost stick to remove.T)	rr   ru   r   rs   r1   r]   ÚSCOLORr   rx   rD   s      r   r5   ÚNimView.setup’   sÄ   € Ø�‰×Ñ˜5Ô!Ü˜–8ˆCÜ˜TŸZ™Z×.Ñ.¨sÑ3Ö4�Ø—‘˜S˜JÑ'×-Ñ-¬fÖ5ó 5ñ ô ˜–8ˆCÜ˜TŸZ™Z×.Ñ.¨sÑ3´YÖ?�Ø—‘˜S˜JÑ'×-Ñ-¨gÖ6ó @ñ ð 	�‰ÐAÔBØ�‰×Ñ˜4Õ r   c                 ó¼  • US:X  a8  [         n[        X#5       H"  nU R                  X4   R                  U5        M$     g U R	                  S5        [
        R                  " S5        U R	                  S5        [        n[        US-
  US-
  S5       H8  n[
        R                  " S5        U R                  X4   R                  U5        M:     U R	                  S5        g )	Nr   z ... thinking ...         g      à?z ... thinking ... aaah ...r   éÿÿÿÿgš™™™™™É?r�   )ÚHCOLORr   r1   r]   rx   ÚtimeÚsleepÚCOLOR)r*   r=   r>   r?   r2   Úfarber   s          r   r:   ÚNimView.notify_move�   s°   € Ø�Q‹;ÜˆEÜ˜3Ö*�Ø—‘˜S˜HÑ%×+Ñ+¨EÖ2ò +ð �L‰LÐ5Ô6Ü�JŠJ�sŒOØ�L‰LÐ5Ô6ÜˆEÜ˜9 Q™;¨¨A©¨rÖ2�Ü—
’
˜3”Ø—‘˜S˜HÑ%×+Ñ+¨EÖ2ñ 3ð �L‰LÐEÕFr   c                 óz   • U R                   R                  R                  S:X  a  SnOSnU R                  SU5        g )Nr   zCongrats. You're the winner!!!z"Sorry, the computer is the winner.z2To play again press space bar. To leave press ESC.)r)   rs   r3   rx   )r*   rŠ   s     r   r<   ÚNimView.notify_over¬   s1   € Ø�9‰9�?‰?×!Ñ! QÓ&Ø3‰Dà7ˆDØ�‰ÐIÈ4ÕPr   c                 óŠ   • U R                   R                  [        R                  :X  a  U R                  R                  5         g g r   )r)   r   r.   r0   rr   r†   r7   s    r   r†   ÚNimView.clear³   s+   € Ø�9‰9�?‰?œcŸh™hÓ&Ø�K‰K×ÑÕð 'r   )r)   rs   rr   r1   rw   r   )rF   rG   rH   rI   r+   rx   r5   r:   r<   r†   rJ   r   r   r   rn   rn   t   s"   † ò!ô"
!ò	!òGòQõ r   rn   c                   ó    • \ rS rSrS rS rSrg)ÚNimControlleré¸   c                 ón  • Xl         UR                  R                  U l        SU l        U R                  R	                  5        H  nUR                  UR                  5        M      U R                   R                  R                  U R                   R                  R                  S5        U R                   R                  R                  U R                   R                  R                  S5        U R                   R                  R                  S5        U R                   R                  R                  5         g )NFÚspaceÚEscapezPress space bar to start game)r)   r4   r1   ÚBUSYÚvaluesÚonclickrk   rr   Úonkeyrs   r5   r†   rx   Úlisten)r*   r)   Ústicks      r   r+   ÚNimController.__init__º   sÃ   € ØŒ	Ø—i‘i×&Ñ&ˆŒØˆŒ	Ø—[‘[×'Ñ'Ö)ˆEØ�M‰M˜%Ÿ.™.Ö)ñ *à�	‰	×Ñ×Ñ˜tŸy™yŸ™×4Ñ4°gÔ>Ø�	‰	×Ñ×Ñ˜tŸy™yŸ~™~×3Ñ3°XÔ>Ø�	‰	�‰×ÑÐ>Ô?Ø�	‰	×Ñ×ÑÕ!r   c                 óŽ   • U R                   (       a  g SU l         U R                  R                  R                  X5        SU l         g )NTF)r¢   r)   rs   r:   rD   s      r   r:   ÚNimController.notify_moveÅ   s0   € Ø�9�9ØØˆŒ	Ø�	‰	�‰×#Ñ# CÔ-Øˆ�	r   )r¢   r)   r1   N)rF   rG   rH   rI   r+   r:   rJ   r   r   r   r�   r�   ¸   s   † ò	"õr   r�   c                   ó&   • \ rS rSrSrSrSrS rSrg)r.   éÍ   r   r   r   c                 óš   • [         R                  U l        Xl        [	        U 5      U l        [        U 5      U l        [        U 5      U l	        g r   )
r.   r/   r   rr   r&   rs   rn   r4   r�   rj   )r*   rr   s     r   r+   ÚNim.__init__Ñ   s4   € Ü—[‘[ˆŒ
ØŒÜ˜d“^ˆŒ
Ü˜D“MˆŒ	Ü'¨Ó-ˆ�r   )rj   rs   rr   r   r4   N)	rF   rG   rH   rI   r/   r6   r0   r+   rJ   r   r   r   r.   r.   Í   s   † Ø€GØ€GØ€Dõ.r   r.   c                  óš   • [         R                  " 5       n U R                  S5        U R                  [        [
        5        [        U 5      ng)NÚstandardÚ	EVENTLOOP)rS   ÚScreenÚmoder5   rd   re   r.   )Ú
mainscreenÚnims     r   Úmainr¶   Ù   s5   € Ü—’“€JØ‡O�O�JÔØ×Ñ”[¤,Ô/Ü
ˆj‹/€CØr   Ú__main__)Ú__doc__rS   r   r“   rd   re   r   r   rX   rY   rŽ   r’   r•   r   r    r   Úobjectr&   rT   rL   rn   r�   r.   r¶   rF   Úmainloopr   r   r   Ú<module>r»      sÙ   ðñ	ó Û Û à€Ø€à€	Ø€	à˜Ñ€Ø˜ a™¨2Ñ-°¸Q±À!Ñ0CÑCÑD€à	€Ø	€Ø€ò0òòô!ˆvô !ôH=ˆF�M‰Mô =ô6A ˆfô A ôH�Fô ô*	.ˆ&ô 	.òð ˆzÓÙ„FØ
‡O‚OÕð r   