[][src]Enum shogi::time::TimeControl

pub enum TimeControl {
    Byoyomi {
        black_time: Duration,
        white_time: Duration,
        byoyomi: Duration,
    },
    FischerClock {
        black_time: Duration,
        white_time: Duration,
        black_inc: Duration,
        white_inc: Duration,
    },
}

Represents various time controls.

Currently Byo-yomi and Fischer Clock are supported.

Examples

use std::time::Duration;
use shogi::{Color, TimeControl};

let mut byoyomi = TimeControl::Byoyomi{
    black_time: Duration::from_secs(10),
    white_time: Duration::from_secs(10),
    byoyomi: Duration::from_secs(5)
};

// Black player can use the time up to black_time + byoyomi.
byoyomi.consume(Color::Black, Duration::from_secs(15));
assert_eq!(Duration::from_secs(0), byoyomi.black_time());
assert_eq!(Duration::from_secs(10), byoyomi.white_time());
use std::time::Duration;
use shogi::{Color, TimeControl};

let mut fischer_clock = TimeControl::FischerClock{
    black_time: Duration::from_secs(10),
    white_time: Duration::from_secs(10),
    black_inc: Duration::from_secs(1),
    white_inc: Duration::from_secs(1)
};

// White player gets additional 1 second after the black move.
fischer_clock.consume(Color::Black, Duration::from_secs(3));
assert_eq!(Duration::from_secs(7), fischer_clock.black_time());
assert_eq!(Duration::from_secs(11), fischer_clock.white_time());

Variants

Byoyomi

Fields of Byoyomi

black_time: Durationwhite_time: Durationbyoyomi: Duration
FischerClock

Fields of FischerClock

black_time: Durationwhite_time: Durationblack_inc: Durationwhite_inc: Duration

Implementations

impl TimeControl[src]

pub fn black_time(&self) -> Duration[src]

Returns the current remaining time for the black player.

pub fn white_time(&self) -> Duration[src]

Returns the current remaining time for the white player.

pub fn consume(&mut self, c: Color, d: Duration) -> bool[src]

Updates the current remaining time after consuming the given amount of time for the given player.

Returns false if the given player runs out of time, true otherwise.

Examples

use std::time::Duration;
use shogi::{Color, TimeControl};

let mut byoyomi = TimeControl::Byoyomi{
    black_time: Duration::from_secs(10),
    white_time: Duration::from_secs(10),
    byoyomi: Duration::from_secs(5)
};

assert!(byoyomi.consume(Color::Black, Duration::from_secs(15)));
assert!(!byoyomi.consume(Color::White, Duration::from_secs(20)));

Trait Implementations

impl Clone for TimeControl[src]

impl Copy for TimeControl[src]

impl Debug for TimeControl[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.