※ 引述《fish770130 (夕提)》之铭言:
: 第一个字为该步欲行棋的兵种,7种棋子代表0-7,共7码
: 第二个字为该子所在的路:1-9(若同一路有两颗同样的棋子,则改成前后),共11码
: 第三个字为兵种(第一个字)的移动方式,只有“进、退、平”三种可能,共3码
: 第四个字为一数字:(1-9)共9码
: 若兵种为斜向移动型,则此数字代表要进到哪一路,或要退到哪一路。
: 若兵种为直横向移动型,则分两种情况:
: 若移动方式为“进”或“退”,则此数字代表“纵向”移动的距离。
: 若为“平”,则此数字代表要平“移”到哪一路。
: 所以我们可以把暗号简化成一个7码+11码+3码+9码的暗号
: 如果再搭配二进制表示例如:011(象)-0111(七)-00(进)-1001(九)
: 如此一来每移动一次棋只需要忍受13次震动即可下子
这种方法太复杂了
棋盘上同一个位置只会有一个棋子(除非是军仪这种可以叠的)
那只要用位置->位置来代表就能知道要移动棋子到哪边
加上非暗棋的棋盘初始棋子都是固定的 只要一路追踪路径
把每一动的Snapshot重叠起来计算
就可以知道现在某个位置是哪一颗棋子
以西洋棋来说:
https://i.imgur.com/OhWKkEm.png
是一个8x8的棋盘
如果使用使用二进制表达位置(横,直)->(横,直)
势必需要(2^3,2^3)->(2^3,2^3)的位数
总共十二位 动一次要震动12下 实在太多了
但如果能辨识三种震动方式 0,1,2
就会变成三进位 每一个位数可以缩短为(3^2,3^2)
那只需要震动8次就可以表达从A位置到B位置
对照表:
a b c d e f g h i
1 2 3 4 5 6 7 8 9
00 01 02 10 11 12 20 21 22
像是我要从a1移动到b3
只需要 00(a) 00(1) 01(b) 02(3)
就能知道要把a1的棋子移动到b3
从12下减少到8下震动
也能减轻棋手的负担
不过西洋棋还算简单的
像中国象棋棋盘是9*10 上面的三进位不够用了 需要多一位
而围棋则是19*19 肯定需要更复杂的震动代码
具体怎么做 我不想继续思考了