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