#chess #turn #notation #parser #algebraic #chess-notation #castling

chess-notation-parser

代数式国际象棋符号解析器

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 2022 年 6 月 5 日

#10#algebraic


用于 2 crates

MIT 许可证

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,
});

国际象棋符号解析器规则

  • 方格符号 应使用小写字母

    • 有效:a1a2 ... h7h8
  • 王车易位符号 可以用 0O 表示

    • 有效示例:0-0-0O-O
    • 当打印 Castling 回合时,将使用 0 符号
  • 棋子符号

    • K:国王
    • Q:皇后
    • R:车
    • B:象
    • N:马
    • 兵没有字母表示
  • 吃子 用小写字母 x 表示

    • 有效示例:Qxd3
  • 将军+ 字符表示

    • 有效示例:Qd3+
  • “将军”用 # 字符注释

    • 有效示例:Qd3#
  • 兵的升变= 符号后跟升变后的棋子注释

    • 兵的升变只对第 81 排有效
    • 有效示例:g8=Q
  • 注释 ??!!?!!??! 只允许在回合结束时使用

    • 有效示例:a1=B??
    • 无效示例:??a1=B

关于

我实际上并不怎么下棋,但需要些东西来练习我的 Rust 技能,所以这算是个有趣的项目。这个特定的包是为了 和平主义棋类模拟 而创建的。

无运行时依赖