1.0.3 • Published 5 years ago
@dousha99/cchess v1.0.3
cchess - 中国象棋棋盘状态表示与验证库
记号说明
以开局时黑方右手侧車为原点建立右手坐标系,即行为 x 轴,列为 y 轴。
无论标记哪一方的棋子或动作,均使用此坐标系。
棋盘记号说明
一枚棋子的表示方法为 ${棋子类型}${行号}${列号}. 行号和列号均从 0 开始。
如开局时红方右手侧的俥为 R98.
棋子类型如下表所示:
| 类型 | 红方记号 | 黑方记号 |
|---|---|---|
| 兵卒 | P | p |
| 炮砲 | C | c |
| 俥車 | R | r |
| 傌馬 | K | k |
| 相象 | B | b |
| 仕士 | A | a |
| 帥將 | G | g |
保存一个棋盘时,所有棋子按记法依次写入为一个字符串。 棋子写入的顺序不做保证。
步法记号说明
步法记号由 5 部分组成:${棋子类型}${唯一性标识?}${列号}${方向}${位移}.
唯一性标识
当一列上有多个同类型的棋子时,按顺序为这些棋子从 1 开始标号。唯一性标识即为编号数。 编号的顺序:对于黑方,按行号递减方向依次编号;对于红方,按行号递增方向依次编号。
如果该列上该棋子唯一,则省略不写。
方向
对于黑方,行号增加方向为 +, 行号降低方向为 -;
对于红方,行号增加方向为 -, 行号降低方向为 +.
行号不改变,方向为 =.
位移
对于在水平与竖直方向上行走的棋子:
当方向不为 = 时,代表前进或后退几行;当方向为 = 时,代表去往的列号。
对于在斜线方向上行走的棋子:
方向始终不为 =. 位移代表去往的列号。
示例
开局
r00k01b02a03g04a05b06k07r08c21c27p30p32p34p36p38P60P62P64P66P68C71C77R90K91B92A93G94A95B96K97R98残局
g04a05R08a14P37C44b46c61K76r82A84G94样例应将方法:
- 象 7 退 5:
b6-4 - 士 5 退 4:
a4-3 - 将 5 平 4:
g4=3