
    Ii                    N    S r SSKJr  SSKrSSKJr  SSKJr   " S S5      rS/r	g)	z5Shared bot scaffolding for push-your-luck dice games.    )annotationsN)ClassVar   )	BotHelperc                  h   ^  \ rS rSr% SrSrS\S'   SU 4S jjrSS jrSS jr	SS	 jr
SS
 jrSrU =r$ )PushYourLuckBotMixin   z=Provides reusable logic for target-based push-your-luck bots.)
      zClassVar[tuple[int, int]]push_target_rangec                  > [         TU ]  5         [        U SS5      (       d  g[        U SS5      nU(       a:  [        USS5      (       a(  [        R                  " U5      c  U R                  U5        [        R                  " U 5        g)z>Ensure bot targets persist across reloads and drive BotHelper.game_activeFNcurrent_playeris_bot)superon_tickgetattrr   
get_target_set_push_bot_target)selfplayer	__class__s     Ec:\Users\dbart\PlayPalace11\server\game_utils\push_your_luck_mixin.pyr   PushYourLuckBotMixin.on_tick   sl    t]E22/6gfh669;O;OPV;W;_%%f-$    c                \    U(       a%  [        USS5      (       a  U R                  U5        ggg)z;Call at start of a bot's turn to (re)initialize its target.r   FN)r   r   )r   r   s     r   prepare_push_bot_turn*PushYourLuckBotMixin.prepare_push_bot_turn   s(    gfh66%%f- 76r   c                h    U R                  U5      n[        R                  " U[        SU5      5        g )Nr   )_calculate_push_bot_targetr   
set_targetmaxr   r   targets      r   r   )PushYourLuckBotMixin._set_push_bot_target$   s(    008VSF^4r   c                l    U R                   u  p#[        R                  " X#5      nU R                  X5      $ )N)r   randomrandint_adjust_push_bot_target)r   r   lowhighbases        r   r    /PushYourLuckBotMixin._calculate_push_bot_target(   s.    **	~~c(++F99r   c                    U$ )zEOverride to tweak the per-turn target using game-specific heuristics. r#   s      r   r)   ,PushYourLuckBotMixin._adjust_push_bot_target-   s    r   r/   )returnNone)r1   int)r$   r3   r1   r3   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   r    r)   __static_attributes____classcell__)r   s   @r   r   r      s0    G3;0;
 .5:
 r   r   )
r8   
__future__r   r'   typingr   
bot_helperr   r   __all__r/   r   r   <module>r@      s)    ; "   !$ $N "
"r   