pub struct Table { /* private fields */ }Expand description
A round in progress, with per-seat knowledge tracking
Table::round intentionally exposes the full position — user
interfaces and loggers need it — but strategies only ever receive the
Views handed to them by Table::step.
Implementations§
Source§impl Table
impl Table
Sourcepub fn new(round: Round) -> Self
pub fn new(round: Round) -> Self
Wrap a freshly dealt round
The round must still be in the upcard phase: knowledge accumulated during earlier play cannot be reconstructed from a mid-game round.
The game score defaults to level (both seats at zero), so a
standalone round reports game_scores of
[0, 0]. Set it with Table::scores when driving a round
within a game.
Sourcepub const fn scores(self, scores: [u16; 2]) -> Self
pub const fn scores(self, scores: [u16; 2]) -> Self
Set the running game totals, indexed by Player
Each seat’s View then reports the seat-relative
game_scores, letting score-aware strategies
bank a lead or gamble from behind.
Sourcepub fn deal(rules: Rules, dealer: Player, rng: &mut (impl Rng + ?Sized)) -> Self
pub fn deal(rules: Rules, dealer: Player, rng: &mut (impl Rng + ?Sized)) -> Self
Shuffle and deal a fresh round onto a new table
Sourcepub const fn turn(&self) -> Option<Player>
pub const fn turn(&self) -> Option<Player>
The player to act, or None when the round is finished
Sourcepub const fn view(&self, seat: Player) -> View<'_>
pub const fn view(&self, seat: Player) -> View<'_>
The legally visible information for one seat
Sourcepub fn step(
&mut self,
strategy: &mut dyn Strategy,
) -> Result<Option<RoundResult>, EngineError>
pub fn step( &mut self, strategy: &mut dyn Strategy, ) -> Result<Option<RoundResult>, EngineError>
Ask strategy — which must belong to the seat to act — for one
decision and apply it
Returns the result once the round finishes, None while it
continues. On the forced stock draw after both players pass the
upcard, the strategy is not consulted; the draw is applied directly.
§Errors
EngineError::IllegalAction when the round rejects the strategy’s
choice. The table is left unchanged, so an interactive caller may
retry the same decision.
Sourcepub fn play(
&mut self,
strategies: [&mut dyn Strategy; 2],
) -> Result<RoundResult, EngineError>
pub fn play( &mut self, strategies: [&mut dyn Strategy; 2], ) -> Result<RoundResult, EngineError>
Drive the round to completion, one strategy per seat
§Errors
EngineError::IllegalAction when a strategy’s choice is rejected.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Table
impl RefUnwindSafe for Table
impl Send for Table
impl Sync for Table
impl Unpin for Table
impl UnsafeUnpin for Table
impl UnwindSafe for Table
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more