
    dq                     `   d Z ddlZddlZddlZdZdZdZdZedz  Zeedz  d	z  edz  d
z  z   z  Z	dZ
dZdZd Zd Zd Z G d de          Z G d dej                  Z G d de          Z G d de          Z G d de          Zd Zedk    r e              ej                     dS dS )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                  @    t          j        t          t                    S N)randomrandint	MINSTICKS	MAXSTICKS        /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/turtledemo/nim.py	randomrowr      s    >)Y///r   c                     | d         | d         z  | d         z  }|dk    rt          |           S t          d          D ]!}| |         |z  }|| |         k    r||f}|c S "d S )Nr      r      )
randommoverange)statexoredzsmoves        r   computerzugr    !   s    !HuQx%(*Ezz%   1XX  !Hua==q6DKKK  r   c                     t          |           }	 t          j        dd          }| |         |dk    k    rn't          j        |dk    | |         dz
            }||fS )NTr   r   r   )maxr   r   )r   mr   rands       r   r   r   +   sf    E

AN1Q8q1u >!a%q!,,Dd7Nr   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )NimModelc                     || _         d S r   )game)selfr(   s     r   __init__zNimModel.__init__6   s    			r   c                 2   | j         j        t          j        t          j        fvrd S t                      t                      t                      g| _        d| _        d | _        | j         j	        
                                 t          j        | j         _        d S )Nr   )r(   r   NimCREATEDOVERr   sticksplayerwinnerviewsetupRUNNINGr)   s    r   r3   zNimModel.setup9   sl    9?3;"999F {{IKK=	+	r   c                    | j         |         }|| j         |<   | j        j                            |||| j                   |                                 rBt          j        | j        _        | j        | _	        | j        j        
                                 d S | j        dk    r=d| _        t          | j                   \  }}|                     ||           d| _        d S d S )Nr   r   )r/   r(   r2   notify_mover0   	game_overr,   r.   r   r1   notify_overr    r   )r)   rowcol	maxspaltes       r   r   zNimModel.moveB   s    K$	C	""3YDDD>> 	!hDIO+DKIN&&((((([ADK"4;//HCIIc3DKKK	 r   c                     | j         g dk    S )N)r   r   r   )r/   r5   s    r   r8   zNimModel.game_overP   s    {iii''r   c                 X    | j         |         |k    rd S |                     ||           d S r   )r/   r   r)   r:   r;   s      r   r7   zNimModel.notify_moveS   s3    ;ss""F		#sr   N)__name__
__module____qualname__r*   r3   r   r8   r7   r   r   r   r&   r&   5   s_          & & &  ( ( (    r   r&   c                        e Zd Zd Zd Zd ZdS )Stickc                    t           j                            | d           || _        || _        || _        |                     ||          \  }}|                     d           |                     t          dz  t          dz             |                     d           |                                  |                     ||           |                     d           |                                  d S )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*   zStick.__init__Z   s    tU333	{{3$$1

8uTz5:...

1					!A

7r   c                     t          |d          \  }}dd|z  z   d|z  z   t          z  }dd|z  z   t          z  }|t          dz  z
  t          dz  z   t          dz  |z
  t          dz  z
  fS )Nr   r   r   r   )divmodrP   rO   SCREENWIDTHSCREENHEIGHT)r)   r:   r;   packet	remainderrV   rW   s          r   rL   zStick.coordsh   ss    "3NN	f_q9},5S[E!;!##eqj0,!2Ca2G%ST*2TTTr   c                     | j         j        t          j        k    rd S | j         j                            | j        | j                   d S r   )r(   r   r,   r4   
controllerr7   r:   r;   )r)   rV   rW   s      r   makemovezStick.makemoven   s=    9?ck))F	((48<<<<<r   N)r@   rA   rB   r*   rL   r`   r   r   r   rD   rD   Y   sD          U U U= = = = =r   rD   c                   4    e Zd Zd ZddZd Zd Zd Zd ZdS )	NimViewc                 n   || _         |j        | _        |j        | _        | j                            d           | j                            d           | j                            d           t          j        d          | _        | j        	                                 | j        
                    d           i | _        t          d          D ]4}t          t                    D ]}t          |||          | j        ||f<   5|                     d           | j                            d           d S )	Nr
   F)   rd   r
   rF   r   r   z... a moment please ...T)r(   screenmodel	colormodetracerbgcolorrJ   rK   writerrR   rQ   r/   r   r   rD   display)r)   r(   r:   r;   s       r   r*   zNimView.__init__u   s$   	kZ
c"""5!!!O,,,mE222!88 	@ 	@CY'' @ @*/S$*?*?S#J''@.///4     r   Nc                    | j                             d           | j                                         |^| j                            dt
           dz  dz              | j                            d           | j                            |dd           | j                            dt
           dz  d	z              | j                            d
           | j                            |dd           | j                             d           d S )NFr   r   0   redcenter)Courier   bold)alignfont   black)rp      rr   T)re   rh   rj   clearrS   r[   pencolorwrite)r)   msg1msg2s      r   rk   zNimView.display   s    5!!!KQ,! 3b 8999K  '''Kd(9NOOOlNa/"4555W%%%$h5JKKK4     r   c                    | j                             d           t          d          D ]K}t          | j        j        |                   D ])}| j        ||f                             t                     *Lt          d          D ]L}t          | j        j        |         t                    D ]$}| j        ||f                             d           %M|                     d           | j                             d           d S )NFr   rI   *Your turn! Click leftmost stick to remove.T)	re   rh   r   rf   r/   rT   SCOLORr   rk   r?   s      r   r3   zNimView.setup   s   5!!!88 	6 	6CTZ.s344 6 6S#J'--f5555688 	7 	7CTZ.s3Y?? 7 7S#J'--g66667ABBB4     r   c                    |dk    r>t           }t          ||          D ]$}| j        ||f                             |           %d S |                     d           t          j        d           |                     d           t          }t          |dz
  |dz
  d          D ]8}t          j        d           | j        ||f                             |           9|                     d           d S )	Nr   z ... thinking ...         g      ?z ... thinking ... aaah ...r   g?r~   )HCOLORr   r/   rT   rk   timesleepCOLOR)r)   r:   r;   r<   r0   farber   s          r   r7   zNimView.notify_move   s    Q;;E3	** 3 3S!H%++E22223 3 LL5666JsOOOLL5666E9Q;Ar22 3 3
3S!H%++E2222LLEFFFFFr   c                 f    | j         j        j        dk    rd}nd}|                     d|           d S )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(   rf   r1   rk   )r)   r|   s     r   r9   zNimView.notify_over   s;    9?!Q&&3DD7DI4PPPPPr   c                 p    | j         j        t          j        k    r| j                                         d S d S r   )r(   r   r,   r.   re   rx   r5   s    r   rx   zNimView.clear   s5    9?ch&&K '&r   r   )	r@   rA   rB   r*   rk   r3   r7   r9   rx   r   r   r   rb   rb   t   sy        ! ! !"
! 
! 
! 
!	! 	! 	!G G GQ Q Q         r   rb   c                       e Zd Zd Zd ZdS )NimControllerc                    || _         |j        j        | _        d| _        | j                                        D ]}|                    |j                   | j         j                            | j         j	        j
        d           | j         j                            | j         j        j        d           | j         j                            d           | j         j                                         d S )NFspaceEscapezPress space bar to start game)r(   r2   r/   BUSYvaluesonclickr`   re   onkeyrf   r3   rx   rk   listen)r)   r(   sticks      r   r*   zNimController.__init__   s    	i&	['')) 	* 	*EMM%.))))	ty4g>>>	ty~3X>>>	>???	!!!!!r   c                 t    | j         rd S d| _         | j        j                            ||           d| _         d S )NTF)r   r(   rf   r7   r?   s      r   r7   zNimController.notify_move   s=    9 	F		##C---			r   N)r@   rA   rB   r*   r7   r   r   r   r   r      s2        	" 	" 	"    r   r   c                        e Zd ZdZdZdZd ZdS )r,   r   r   r   c                     t           j        | _        || _        t	          |           | _        t          |           | _        t          |           | _	        d S r   )
r,   r-   r   re   r&   rf   rb   r2   r   r_   )r)   re   s     r   r*   zNim.__init__   s?    [
d^^
DMM	'--r   N)r@   rA   rB   r-   r4   r.   r*   r   r   r   r,   r,      s2        GGD. . . . .r   r,   c                      t          j                    } |                     d           |                     t          t
                     t          |           }dS )Nstandard	EVENTLOOP)rJ   Screenmoder3   rZ   r[   r,   )
mainscreennims     r   mainr      sE    JOOJ[,///
j//C;r   __main__)__doc__rJ   r   r   rZ   r[   r   r   rO   rP   r   r   r   r   r    r   objectr&   rK   rD   rb   r   r,   r   r@   mainloopr   r   r   <module>r      s  	 	   		a2-Q!0CCD		0 0 0    ! ! ! ! !v ! ! !H= = = = =FM = = =6A  A  A  A  A f A  A  A H    F   *	. 	. 	. 	. 	.& 	. 	. 	.   zDFFFFO r   