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 每月下载量
57KB
1K SLoC
Fenex棋库
Fenex是一个用于处理棋局逻辑的Rust库。它提供了解析 Forsyth-Edwards Notation (FEN) 字符串,处理代数符号的棋步,以及更多功能。
功能
坐标和符号
坐标和符号都是1索引。
Coordinates
结构体
坐标模块提供了用于表示棋盘位置的 Coordinates
结构体。
-
构造函数:
Coordinates { x: i8, y: i8 }
- 使用给定的x和y值创建一个新的
Coordinates
结构体。
- 使用给定的x和y值创建一个新的
-
从符号:
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() -> Board
和Board::new_two_dimensional() -> Board
- 创建一个新的所有方格都为空的
1D
或2D
棋盘。
- 创建一个新的所有方格都为空的
-
初始位置:
Board::new_one_dimensional_starting_position() -> Board
和Board::new_two_dimensional_starting_position() -> Board
- 创建一个新的带有初始位置棋子的
1D
或2D
棋盘。
- 创建一个新的带有初始位置棋子的
-
设置棋子:
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
。