4 个版本
0.2.3 | 2022 年 6 月 10 日 |
---|---|
0.2.2 | 2022 年 6 月 7 日 |
0.2.1 | 2022 年 6 月 7 日 |
0.2.0 | 2022 年 6 月 5 日 |
0.1.0 |
|
#10 在 #algebraic
用于 2 crates
47KB
837 行
国际象棋符号解析器
Crate 将代数式国际象棋符号转换为软件可读的 struct,反之亦然。每一回合的解析的国际象棋符号存储在 Turn
结构体中。
要解析某个回合,例如 d2xe3
,以 &str
的形式存储它,并将其作为参数传递给 Turn::try_from()
函数。
Turn
是一个有两个元素的枚举
Castling
- 描述 castling 回合的结构体Move
- 描述其他所有可能的回合的结构体
Castling
回合的示例
0-0
将被转换为
Turn::Castling(Castling {
r#type: CastlingType::Short,
flags: Flag::NONE,
});
Move
回合的示例
d6
将被转换为
Turn::Move (Move {
who: Piece::Pawn,
dst: Square::D6,
flags: Flag::NONE,
src: None,
promotion: None,
});
d7xe8=B+?
将被转换为
Turn::Move (Move {
who: Piece::Pawn,
dst: Square::E8,
flags: Flag::CHECK | Flag::CAPTURE,
src: Some(vec![Square::D7]),
promotion: Some(Piece::Bishop),
});
Nab3#
将被转换为
Turn::Move (Move {
who: Piece::Knight,
dst: Square::B3,
flags: Flag::CHECKMATE,
src: Some(Square::get_file('a').unwrap()), // Vector of 'Ax' squares
promotion: None,
});
国际象棋符号解析器规则
-
方格符号 应使用小写字母
- 有效:
a1
,a2
...h7
,h8
。
- 有效:
-
王车易位符号 可以用
0
和O
表示- 有效示例:
0-0-0
或O-O
- 当打印
Castling
回合时,将使用0
符号
- 有效示例:
-
棋子符号
K
:国王Q
:皇后R
:车B
:象N
:马- 兵没有字母表示
-
吃子 用小写字母
x
表示- 有效示例:
Qxd3
- 有效示例:
-
将军 用
+
字符表示- 有效示例:
Qd3+
- 有效示例:
-
“将军”用
#
字符注释- 有效示例:
Qd3#
- 有效示例:
-
兵的升变 用
=
符号后跟升变后的棋子注释- 兵的升变只对第
8
和1
排有效 - 有效示例:
g8=Q
- 兵的升变只对第
-
注释
??
、!!
、?
、!
、!?
、?!
只允许在回合结束时使用- 有效示例:
a1=B??
- 无效示例:
??a1=B
- 有效示例:
关于
我实际上并不怎么下棋,但需要些东西来练习我的 Rust 技能,所以这算是个有趣的项目。这个特定的包是为了 和平主义棋类模拟 而创建的。