#tic-tac-toe #board-game #game-ai #game-state #logic #strategy #row

open_ttt_lib

提供通用井字棋逻辑的库

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

MIT授权许可

110KB
1.5K SLoC

open_ttt_lib

Crates.io Documentation License Build Status Coverage Status unsafe forbidden

这是一个开源的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