6个版本
0.2.2 | 2021年5月22日 |
---|---|
0.2.1 | 2021年2月15日 |
0.2.0 | 2020年7月18日 |
0.1.2 | 2020年4月18日 |
0.1.1 | 2019年12月23日 |
在游戏类别下排名第269
每月下载量30次
110KB
1.5K SLoC
open_ttt_lib
这是一个开源的Rust库,包含常用的井字棋功能。
概述
井字棋是一种策略游戏,两名玩家X和O轮流在一个3x3的网格中放置他们的标记。第一个在行、列或对角线上连成三个标记的玩家获胜。游戏也可以以平局结束,称为“猫的游戏”。
此库包含执行井字棋规则、管理游戏状态和为单人游戏提供人工智能算法的逻辑。
用法
将其添加到您的 Cargo.toml
[dependencies]
open_ttt_lib = "0.2.2"
有关库API的完整详细信息,请参阅库的文档。
示例
以下是使用此库的一个简短示例。
use open_ttt_lib::{ai, board, game};
fn main() -> Result<(), Box<game::Error>> {
// Create a game struct to manage the game.
let mut game = game::Game::new();
// Pick a position to place a mark. Positions are zero based.
// An error result is returned if the position is outside the bounds
// of the board, the position is already owned, or the game is over.
let position = board::Position { row: 0, column: 2 };
game.do_move(position)?;
// do_move() updates the game state. The state indicates the player
// who gets to place to next mark or, if the game is over, the
// outcome of the game.
match game.state() {
game::State::PlayerXMove => println!("X's turn."),
game::State::PlayerOMove => println!("O's turn."),
game::State::PlayerXWin(_) => println!("Game Over: X wins!"),
game::State::PlayerOWin(_) => println!("Game Over: O wins!"),
game::State::CatsGame => println!("Game Over: cat's game."),
};
// Have an AI opponent pick a move.
let opponent = ai::Opponent::new(ai::Difficulty::Medium);
if let Some(ai_position) = opponent.get_move(&game) {
game.do_move(ai_position)?;
};
Ok(())
}
在examples
目录中包含其他示例。
要运行示例,请克隆此仓库,然后使用cargo run --example
。例如
git clone https://github.com/j-richey/open_ttt_lib.git
cd open_ttt_lib
cargo run --example single_player
基准测试
此库包含您可以用于评估库是否满足性能目标的基准测试。使用cargo bench
运行基准测试套件
git clone https://github.com/j-richey/open_ttt_lib.git
cd open_ttt_lib
cargo bench
报告问题和功能请求
请使用此项目的GitHub问题跟踪器报告问题和自由地请求新功能。
变更
所有显著变更都记录在CHANGELOG.md中。
贡献
欢迎贡献!有关如何为此项目做出贡献的详细信息,请参阅CONTRIBUTING.md。
许可
此库根据MIT许可授权。
依赖
~1.3–2MB
~36K SLoC