a
    -†c`1  ã                   @   sJ   d dl Z ddlmZmZmZmZmZmZmZ ddl	m
Z
 G dd„ dƒZdS )é    Né   )ÚBLACKÚROWSÚREDÚSQUARE_SIZEÚCOLSÚWHITEÚBROWN)ÚPiecec                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zg fdd„Zg fdd„ZdS )ÚBoardc                 C   s*   g | _ d | _| _d | _| _|  ¡  d S )Né   r   )ÚboardÚred_leftÚ
white_leftÚ	red_kingsÚwhite_kingsÚcreate_board©Úself© r   ú3C:\Users\User\Desktop\JT\Dambrete\checkers\board.pyÚ__init__   s    zBoard.__init__c              
   C   sR   |  t¡ ttƒD ]:}t|d tdƒD ]$}tj |t|t	 |t	 t	t	f¡ q&qd S )Né   )
Úfillr   Úranger   r   ÚpygameÚdrawÚrectr	   r   )r   ÚwinÚrowÚcolr   r   r   Údraw_squares   s    
zBoard.draw_squaresc                 C   sŽ   | j | | | j |j |j  | j |j |j< | j | |< | ||¡ |td ksZ|dkrŠ| ¡  |jtkr||  jd7  _n|  j	d7  _	d S )Nr   r   )
r   r   r    Úmover   Z	make_kingÚcolorr   r   r   )r   Úpiecer   r    r   r   r   r"      s    :
z
Board.movec                 C   s   | j | | S )N)r   ©r   r   r    r   r   r   Ú	get_piece   s    zBoard.get_piecec                 C   s¦   t tƒD ]˜}| j g ¡ t tƒD ]~}|d |d d krŽ|dk rZ| j|  t||tƒ¡ qž|dkr|| j|  t||tƒ¡ qž| j|  d¡ q | j|  d¡ q qd S )Nr   r   é   é   r   )r   r   r   Úappendr   r
   r   r   r%   r   r   r   r       s    zBoard.create_boardc                 C   sJ   |   |¡ ttƒD ]2}ttƒD ]$}| j| | }|dkr| |¡ qqd S )Nr   )r!   r   r   r   r   r   )r   r   r   r    r$   r   r   r   r   .   s    
z
Board.drawc                 C   sP   |D ]F}d| j |j |j< |dkr|jtkr<|  jd8  _q|  jd8  _qd S )Nr   r   )r   r   r    r#   r   r   r   )r   Úpiecesr$   r   r   r   Úremove6   s    
zBoard.removec                 C   s    | j dkrdS | jdkrdS d S )Nr   r   r   )r   r   r   r   r   r   Úwinner?   s
    

zBoard.winnerc              	   C   sâ   i }|j d }|j d }|j}|jtks.|jr~| |  |d t|d dƒd|j|¡¡ | |  |d t|d dƒd|j|¡¡ |jt	ksŽ|jrÞ| |  |d t
|d tƒd|j|¡¡ | |  |d t
|d tƒd|j|¡¡ |S )Nr   r'   éÿÿÿÿ)r    r   r#   r   ZkingÚupdateÚ_traverse_leftÚmaxÚ_traverse_rightr   Úminr   )r   r$   ÚmovesÚleftÚrightr   r   r   r   Úget_valid_movesG   s    

((((zBoard.get_valid_movesc                 C   s  i }g }t |||ƒD ]ô}	|dk r& q
| j|	 | }
|
dkrè|rL|sL q
n"|rb|| ||	|f< n|||	|f< |rà|dkrŠt|	d dƒ}nt|	d tƒ}| | j|	| ||||d |d¡ | | j|	| ||||d |d¡  q
n|
j|krú q
n|
g}|d8 }q|S ©Nr   r-   r'   r   )Úskipped)	r   r   r0   r2   r   r.   r/   r1   r#   )r   ÚstartÚstopÚstepr#   r4   r8   r3   ÚlastÚrÚcurrentr   r   r   r   r/   V   s0    $$

zBoard._traverse_leftc                 C   s  i }g }t |||ƒD ]ô}	|tkr& q
| j|	 | }
|
dkrè|rL|sL q
n"|rb|| ||	|f< n|||	|f< |rà|dkrŠt|	d dƒ}nt|	d tƒ}| | j|	| ||||d |d¡ | | j|	| ||||d |d¡  q
n|
j	|krú q
n|
g}|d7 }q|S r7   )
r   r   r   r0   r2   r   r.   r/   r1   r#   )r   r9   r:   r;   r#   r5   r8   r3   r<   r=   r>   r   r   r   r   r1   w   s0    $$

zBoard._traverse_rightN)Ú__name__Ú
__module__Ú__qualname__r   r!   r"   r&   r   r   r+   r,   r6   r/   r1   r   r   r   r   r      s   	!r   )r   Ú	constantsr   r   r   r   r   r   r	   r$   r
   r   r   r   r   r   Ú<module>   s   $