#chess #notation #chess-board #fen #coordinates #algebraic #parser

fenex

用于解析和处理FEN和代数棋谱的Rust库

5个版本

0.1.4 2024年1月21日
0.1.3 2024年1月19日
0.1.2 2024年1月15日
0.1.1 2024年1月15日
0.1.0 2024年1月14日

#324 in 算法

44 每月下载量

MIT 许可证

57KB
1K SLoC

Fenex棋库

Fenex是一个用于处理棋局逻辑的Rust库。它提供了解析 Forsyth-Edwards Notation (FEN) 字符串,处理代数符号的棋步,以及更多功能。

功能

坐标和符号

坐标和符号都是1索引。

Coordinates 结构体

坐标模块提供了用于表示棋盘位置的 Coordinates 结构体。

  • 构造函数: Coordinates { x: i8, y: i8 }

    • 使用给定的x和y值创建一个新的 Coordinates 结构体。
  • 从符号: Coordinates::from_notation(notation: Notation) -> Result<Coordinates, &'static str>

    • 将一个 Notation 结构体转换为 Coordinates 结构体。
  • 到符号: Coordinates::to_notation(&self) -> Result<Notation, &'static str>

    • Coordinates 结构体转换为 Notation 结构体。

Notation 结构体

符号模块提供了用于表示代数符号的棋步的 Notation 结构体。

  • 构造函数: 符号::new(file: 字符, rank: 字符) -> Option<符号>

    • 创建一个新的具有给定文件和等级值的符号结构。
  • 从坐标转换: 符号::from_coordinates(coordinates: Coordinates) -> Result<符号, &'static 字符串>

    • 将一个Coordinates结构转换为符号结构。
  • 转换为坐标: 符号::to_coordinates(&self) -> Result<Coordinates, &'static 字符串>

    • 符号结构转换为Coordinates结构。

棋盘和移动

Board结构

Board模块提供了用于处理1D和2D表示的棋盘的Board结构。

  • 构造函数: Board::new_one_dimensional() -> BoardBoard::new_two_dimensional() -> Board

    • 创建一个新的所有方格都为空的1D2D棋盘。
  • 初始位置: Board::new_one_dimensional_starting_position() -> BoardBoard::new_two_dimensional_starting_position() -> Board

    • 创建一个新的带有初始位置棋子的1D2D棋盘。
  • 设置棋子: Board::set_piece(&mut self, coordinates: Coordinates, piece: ChessPieceEnum)

    • 在给定的坐标处设置一个棋子。
  • 获取棋子: Board::get_piece(&self, coordinates: Coordinates) -> Option<&ChessPieceEnum>

    • 获取指定坐标上的棋子。
  • 生成走法: Board::generate_moves(&self, color: Color) -> Vec<Move>

    • 生成棋盘上指定颜色的所有有效走法。

Move 结构体

Move 结构体表示一次棋局中的走法。它包含被移动的棋子的类型以及走法的起始和结束坐标。

  • 构造函数: Move::new(from: Coordinates, to: Coordinates, piece_type: PieceType) -> Move
    • 使用指定的起始和结束坐标以及被移动的棋子类型创建一个新的 Move

如何安装

只需在你的项目目录中运行 cargo add fenex 即可。

或者在你的 Cargo.toml 文件中的依赖项下添加 fenex = "0.1.3"

示例

   #[test]
    fn notation_and_coordinates() {
        // Creates a Notation from chars. ('file' 'rank').
        let notation: Notation = Notation::new('e', '4').unwrap();

        // Creates Coordinates from an i8. (x, y).
        let coordinates: Coordinates = Coordinates::new(5, 4);

        // Creates a Notation from string. ("e4").
        let notation_from_string: Notation = Notation::from_string("e4").unwrap();

        // Creates Coordinates from a string of 2 i8 separated by a comma.
        // ("4.3").
        let coordinate_from_string: Coordinates = Coordinates::from_string("5,4").unwrap();
    }
    fn boards_and_moves() {
        // Creates a 2D board, With starting pieces.
        let mut two_dimensional_board = Board::new_two_dimensional_starting_position();

        // Creates a 1D board, With starting pieces.
        let mut one_dimensional_board = Board::new_one_dimensional_starting_position();

        // Creates Coordinates from a string of 2 i8 separated by a comma.
        let from = Coordinates::from_notation_string("e2").unwrap();

        // Creates Coordinates from a string of 2 i8 separated by a comma.
        let to = Coordinates::from_notation_string("e4").unwrap();

        // Moves a piece from one coordinate to another.
        one_dimensional_board.move_piece_with_coordinates(from, to);

        // Generates all possible movements for White.
        let movement = one_dimensional_board.generate_moves(Color::White);

        let move = Move

    }

贡献

欢迎为 Fenex 贡献代码!请在创建拉取请求之前确保你的代码格式化良好,可以使用 cargo fmt

无运行时依赖