
    Ii'                        S r SSKJr  SSKrSSKJr  SSKJrJr  SSK	J
r
JrJrJrJr  \(       a  SSKJrJr  SS	 jrSS
 jrSS jrg)zBot AI for Senet.    )annotationsN)TYPE_CHECKING   )	SenetMovegenerate_legal_moves)HOUSE_HAPPINESSHOUSE_WATERSAFE_SQUARESis_protectedopponent_num)	SenetGameSenetPlayerc                    U R                   nUR                  UR                  :w  a  g UR                  S:X  a  gUR                  S:X  a  [	        X5      $ g )Nthrowingsq_0moving)
game_statecurrent_player_num
player_num
turn_phase
_pick_move)gameplayergss      5c:\Users\dbart\PlayPalace11\server\games\senet\bot.py	bot_thinkr      sK    	B	 1 11	}}
"	}} $''    c                  ^^ U R                   m[        TTR                  TR                  5      nU(       d  g U R                  R
                  nUS:X  a  [        R                  " U5      nO[        UUU4S jS9nSUR                   3$ )Nrandomc                2   > [        TU TR                  5      $ )N)_score_mover   )mr   r   s    r   <lambda>_pick_move.<locals>.<lambda>-   s    B6;L;L(Mr   )keysq_)
r   r   r   current_rolloptionsbot_difficultyr   choicemaxsource)r   r   moves
difficultymover   s    `   @r   r   r   #   sm    	B V%6%6HE,,JX}}U#5MNr   c                (  ^^ Sn[        U5      mUR                  (       a  US-  nUR                  [        :X  a  US-  nUR                  (       a  US-  nUR
                  b  US-  nUR                  [        ;   a  US-  nUR                  (       d  UR                  S:  a  U R                  mUR
                  b  UR
                  OUR                  nUS:  a$  TUS-
     U:X  a  US-
  UR                  :w  a  US-  nUS	:  a$  TUS-      U:X  a  US-   UR                  :w  a  US-  nU R                  mUR                  nUS:  a  TUS-
     U:X  a  US
-  nUS	:  a  TUS-      U:X  a  US
-  nUR                  (       d  UR                  S:  aw  UR
                  b  UR
                  OUR                  nU[        ;  aH  [        UU4S j[        [        SUS-
  5      [        SUS-   5      5       5       5      nUS:  a  USU-  -  nX1R                  -  nU$ )z-Heuristic score for a move. Higher is better.r      d   P      <   r   2      (   c              3  >   >#    U  H  nTU   T:X  d  M  S v   M     g7f)r   N ).0iboardopps     r   	<genexpr>_score_move.<locals>.<genexpr>_   s%      #Ea8s? Es   	         )r   is_bear_offdestinationr   is_swap
water_destr
   r=   r,   sumranger+   min)	r   r/   r   scoredestsrcnearby_opponentsr=   r>   s	          @@r   r!   r!   2   s   E
z
"C ?*||??&RKE <'  0 02 5"&//"=t4CSCS!8dQh:54!8:SRKE"9taxJ6D1H;TRKE HHE
++C
Qw5q>Z/
RxE#'Nj0  0 02 5"&//"=t4CSCS|#" # Qq!13r4!83DE#    !#... 
[[ELr   )r   r   r   r   returnz
str | None)r/   r   r   intrO   rP   )__doc__
__future__r   r   typingr   r-   r   r   stater   r	   r
   r   r   r   r   r   r   r   r!   r:   r   r   <module>rU      s5     "    2  ,7r   