ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     U
    e5dq                     @   s   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eed d	 ed d
   Z	dZ
dZdZdd Zdd Zdd ZG dd deZG dd dejZG dd deZG dd deZG dd deZdd Zed kre  e  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                   C   s   t ttS N)randomrandint	MINSTICKS	MAXSTICKS r   r   &/usr/lib64/python3.8/turtledemo/nim.py	randomrow   s    r   c                 C   sb   | d | d A | d A }|dkr(t | S tdD ],}| | |A }|| | kr0||f}|  S q0d S )Nr      r      )
randommoverange)stateZxoredzsmover   r   r   computerzug!   s    r   c                 C   sH   t | }tdd}| | |dkkrq(qt|dk| | d }||fS )Nr   r   r   )maxr   r   )r   mr   Zrandr   r   r   r   +   s    r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )NimModelc                 C   s
   || _ d S r   )game)selfr   r   r   r   __init__6   s    zNimModel.__init__c                 C   sP   | j jtjtjfk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    r   r   r   r*   9   s    zNimModel.setupc                 C   s   | j | }|| j |< | jj|||| j |  rRtj| j_| j| _	| jj
  n0| jdkrd| _t| j \}}| || d| _d S )Nr   r   )r&   r   r)   notify_mover'   	game_overr#   r%   r   r(   notify_overr   r   )r    rowcol	maxspalter   r   r   r   B   s    



zNimModel.movec                 C   s   | j dddgkS r"   )r&   r,   r   r   r   r.   P   s    zNimModel.game_overc                 C   s"   | j | |krd S | || d S r   )r&   r   r    r0   r1   r   r   r   r-   S   s    zNimModel.notify_moveN)__name__
__module____qualname__r!   r*   r   r.   r-   r   r   r   r   r   5   s
   	r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Stickc                 C   s   t jj| dd || _|| _|| _| ||\}}| d | t	d t
d  | d |   | || | d |   d S )NFZvisibleZsquareg      $@g      4@r   white)turtleTurtler!   r0   r1   r   coordsshapeZ	shapesizeHUNITWUNITspeedpugotocolorZ
showturtle)r    r0   r1   r   xyr   r   r   r!   Z   s    


zStick.__init__c                 C   s^   t |d\}}dd|  d|  t }dd|  t }|td  td  td | td  fS )Nr   r   r   r   )divmodr?   r>   SCREENWIDTHSCREENHEIGHT)r    r0   r1   ZpacketZ	remainderrD   rE   r   r   r   r<   h   s    zStick.coordsc                 C   s*   | j jtjkrd S | j j| j| j d S r   )r   r   r#   r+   
controllerr-   r0   r1   )r    rD   rE   r   r   r   makemoven   s    zStick.makemoveN)r4   r5   r6   r!   r<   rJ   r   r   r   r   r7   Y   s   r7   c                   @   s>   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd ZdS )NimViewc                 C   s   || _ |j| _|j| _| jd | jd | jd tjdd| _| j	  | j
d i | _tdD ](}ttD ]}t|||| j||f< qxql| d | jd d S )	Nr	   F)   rL   r	   r8   r   r   z... a moment please ...T)r   screenmodelZ	colormodetracerZbgcolorr:   r;   writerrA   r@   r&   r   r   r7   display)r    r   r0   r1   r   r   r   r!   u   s    

zNimView.__init__Nc                 C   s   | j d | j  |d k	rT| jdt d d  | jd | jj|ddd | jdt d d	  | jd
 | jj|ddd | j d d S )NFr   r   0   Zredcenter)Courier   bold)ZalignZfont   Zblack)rT      rV   T)rM   rO   rP   clearrB   rH   Zpencolorwrite)r    Zmsg1msg2r   r   r   rQ      s    
zNimView.displayc                 C   s   | j d tdD ].}t| jj| D ]}| j||f t q(qtdD ]0}t| jj| tD ]}| j||f d qbqL| d | j d d S )NFr   r9   *Your turn! Click leftmost stick to remove.T)	rM   rO   r   rN   r&   rC   SCOLORr   rQ   r3   r   r   r   r*      s    
zNimView.setupc                 C   s   |dkr2t }t||D ]}| j||f | qnd| d td | d t}t|d |d dD ]"}td | j||f | qh| d d S )	Nr   z ... thinking ...         g      ?z ... thinking ... aaah ...r   g?r\   )HCOLORr   r&   rC   rQ   timesleepCOLOR)r    r0   r1   r2   r'   Zfarber   r   r   r   r-      s    



zNimView.notify_movec                 C   s(   | 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   rN   r(   rQ   )r    r[   r   r   r   r/      s    zNimView.notify_overc                 C   s   | j jtjkr| j  d S r   )r   r   r#   r%   rM   rY   r,   r   r   r   rY      s    zNimView.clear)N)	r4   r5   r6   r!   rQ   r*   r-   r/   rY   r   r   r   r   rK   t   s   
rK   c                   @   s   e Zd Zdd Zdd ZdS )NimControllerc                 C   s|   || _ |jj| _d| _| j D ]}||j q | j j| j j	j
d | j j| j jjd | j jd | j j  d S )NFZspaceZEscapezPress space bar to start game)r   r)   r&   BUSYvaluesZonclickrJ   rM   ZonkeyrN   r*   rY   rQ   Zlisten)r    r   Zstickr   r   r   r!      s    
zNimController.__init__c                 C   s*   | j r
d S d| _ | jj|| d| _ d S )NTF)rd   r   rN   r-   r3   r   r   r   r-      s
    zNimController.notify_moveN)r4   r5   r6   r!   r-   r   r   r   r   rc      s   rc   c                   @   s    e Zd ZdZdZdZdd ZdS )r#   r   r   r   c                 C   s0   t j| _|| _t| | _t| | _t| | _	d S r   )
r#   r$   r   rM   r   rN   rK   r)   rc   rI   )r    rM   r   r   r   r!      s
    

zNim.__init__N)r4   r5   r6   r$   r+   r%   r!   r   r   r   r   r#      s   r#   c                  C   s*   t  } | d | tt t| }dS )NZstandardZ	EVENTLOOP)r:   ZScreenmoder*   rG   rH   r#   )Z
mainscreenZnimr   r   r   main   s
    
rg   __main__)__doc__r:   r   r`   rG   rH   r   r   r>   r?   r]   r_   rb   r   r   r   objectr   r;   r7   rK   rc   r#   rg   r4   Zmainloopr   r   r   r   <module>   s0   

$D