步骤一:收到两份看似相同的局面
出题者给了两串FEN。A是“r3k2r/8/8/8/8/8/8/R3K2R w KQkq - 0 1”,B是“r3k2r/8/8/8/8/8/8/R3K2R w - - 0 1”。两串导入棋盘后,都是双方王在e线、四辆车位于角落,轮到白方。
问题也很具体:A局面里白方可以短易位或长易位,B局面为什么不行?如果只截棋盘图片,两者几乎无法区分,这正是FEN对比比图片对比更有价值的地方。
这次FEN对比用一个真实会遇到的排错场景:两串代码摆出的棋子完全相同,一边能王车易位,另一边却不能。咱们按接收数据、拆分字段、导入验证、修正记录的顺序复盘,看看差异究竟藏在哪,以及怎样避免被截图误导。
出题者给了两串FEN。A是“r3k2r/8/8/8/8/8/8/R3K2R w KQkq - 0 1”,B是“r3k2r/8/8/8/8/8/8/R3K2R w - - 0 1”。两串导入棋盘后,都是双方王在e线、四辆车位于角落,轮到白方。
问题也很具体:A局面里白方可以短易位或长易位,B局面为什么不行?如果只截棋盘图片,两者几乎无法区分,这正是FEN对比比图片对比更有价值的地方。
我把两串按空格切成六段。布局段相同,说明棋子位置没变;第二段都是w;第四段都是“-”;两个计数也都是0和1。差异只在第三段:A写KQkq,B写“-”。
KQkq不是棋子列表,而是双方保留的易位权。K、Q对应白方王翼与后翼,k、q对应黑方。B中的横杠明确表示四项权利全部不存在。哪怕王和车摆在初始格,规则也不会自动把权利补回来。
接着把A导入支持合法着检查的分析棋盘。由于王与车之间没有棋子,王未处于被将军状态,经过格也没有被攻击,白方的易位着可以生成。再导入B,相同棋子布局下,易位选项消失。
这一步不能只看引擎估值。估值会随引擎版本、搜索深度变化,合法着则由规则和局面状态决定。FEN对比排错时,先比较合法着集合,比盯着正负分数可靠。
回查后发现,B并不是软件损坏,而是出题者只按截图重新摆了棋子,编辑器默认清空易位权。正确修法不是武断地把KQkq补上,而是查原始棋谱:只有确认双方王和对应车从未移动,才能恢复相应字母。
最后保留A作为原题数据,并在题目旁写明“白走,双方保留易位权”。这次案例留下的检查模板很实用:先比六段,再找字段差异,随后用合法着验证,最后回到PGN或原始来源确认。别让棋子位置替历史状态作证。