pub struct Game { /* fields omitted */ }
For UI/UCI Servers, store a game object which allows you to determine
draw by 3 fold repitition, draw offers, resignations, and moves.
This structure is slow compared to using Board
directly, so it is
not recommended for engines.
Create a new Game
with the initial position.
use chess::{Game, Board};
let game = Game::new();
assert_eq!(game.current_position(), Board::default());
Get all actions made in this game (moves, draw offers, resignations, etc.)
use chess::{Game, MoveGen, Color};
let mut game = Game::new();
let mut movegen = MoveGen::new_legal(&game.current_position());
game.make_move(movegen.next().expect("At least one valid move"));
game.resign(Color::Black);
assert_eq!(game.actions().len(), 2);
What is the status of this game?
use chess::Game;
let game = Game::new();
assert!(game.result().is_none());
Create a new Game
object from an FEN string.
use chess::{Game, Board};
let game = Game::new_from_fen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1").expect("Valid FEN");
let game2 = Game::new_from_fen("Invalid FEN");
assert!(game2.is_none());
Get the current position on the board from the Game
object.
use chess::{Game, Board};
let game = Game::new();
assert_eq!(game.current_position(), Board::default());
Determine if a player can legally declare a draw by 3-fold repetition or 50-move rule.
use chess::{Game, Square, Rank, File, ChessMove};
let b1 = Square::make_square(Rank::First, File::B);
let c3 = Square::make_square(Rank::Third, File::C);
let b8 = Square::make_square(Rank::Eighth, File::B);
let c6 = Square::make_square(Rank::Sixth, File::C);
let b1c3 = ChessMove::new(b1, c3, None);
let c3b1 = ChessMove::new(c3, b1, None);
let b8c6 = ChessMove::new(b8, c6, None);
let c6b8 = ChessMove::new(c6, b8, None);
let mut game = Game::new();
assert_eq!(game.can_declare_draw(), false);
game.make_move(b1c3);
game.make_move(b8c6);
game.make_move(c3b1);
game.make_move(c6b8);
assert_eq!(game.can_declare_draw(), false);
game.make_move(b1c3);
game.make_move(b8c6);
game.make_move(c3b1);
game.make_move(c6b8);
assert_eq!(game.can_declare_draw(), true);
Declare a draw by 3-fold repitition or 50-move rule.
use chess::{Game, Square, Rank, File, ChessMove};
let b1 = Square::make_square(Rank::First, File::B);
let c3 = Square::make_square(Rank::Third, File::C);
let b8 = Square::make_square(Rank::Eighth, File::B);
let c6 = Square::make_square(Rank::Sixth, File::C);
let b1c3 = ChessMove::new(b1, c3, None);
let c3b1 = ChessMove::new(c3, b1, None);
let b8c6 = ChessMove::new(b8, c6, None);
let c6b8 = ChessMove::new(c6, b8, None);
let mut game = Game::new();
assert_eq!(game.can_declare_draw(), false);
game.make_move(b1c3);
game.make_move(b8c6);
game.make_move(c3b1);
game.make_move(c6b8);
assert_eq!(game.can_declare_draw(), false);
game.make_move(b1c3);
game.make_move(b8c6);
game.make_move(c3b1);
game.make_move(c6b8);
assert_eq!(game.can_declare_draw(), true);
game.declare_draw();
Make a chess move on the board
use chess::{Game, MoveGen};
let mut game = Game::new();
let mut movegen = MoveGen::new_legal(&game.current_position());
game.make_move(movegen.next().expect("At least one legal move"));
Who's turn is it to move?
use chess::{Game, Color};
let game = Game::new();
assert_eq!(game.side_to_move(), Color::White);
Offer a draw to my opponent. color
is the player who offered the draw. The draw must be
accepted before my opponent moves.
use chess::{Game, Color};
let mut game = Game::new();
game.offer_draw(Color::White);
Accept a draw offer from my opponent.
use chess::{Game, MoveGen, Color};
let mut game = Game::new();
game.offer_draw(Color::Black);
assert_eq!(game.accept_draw(), true);
let mut game2 = Game::new();
let mut movegen = MoveGen::new_legal(&game2.current_position());
game2.offer_draw(Color::Black);
game2.make_move(movegen.next().expect("At least one legal move"));
assert_eq!(game2.accept_draw(), false);
color
resigns the game
use chess::{Game, Color};
let mut game = Game::new();
game.resign(Color::White);
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static