由于我对 chess 不算特别了解,所以现在写的比较偏技术化,而不是偏棋局功能。既然 xboard 是个 frontend,那么势必有一个所谓的 backend 亦即 chess engine 作为后台计算程序,常见的 backend 有 gnu chess 或者 crafty 等,他们使用类似的协议与 frontend 通信,这也就使得我们可以用不同的 backend 互较高下,作为比试谁的 engine 牛,同时也使得算法、界面分离开来。类似的 frontend 还有 eboard 等。
xboard 含有如下的内容,
/usr/games/xboard主要程序包含 xboard、zic2xpm、cmail 和 pxboard,分别是主程序、将 zic 格式转换成为 xboard 可以读取的格式、从 email 里面读取和玩 chess、将一个局通过管道送给 xboard 在上面玩。
/usr/games/zic2xpm
/usr/games/cmail
/usr/games/pxboard
/usr/share/man/man6/pxboard.6.gz
/usr/share/man/man6/xboard.6.gz
/usr/share/man/man6/zic2xpm.6.gz
/usr/share/info/xboard.info.gz
/usr/share/doc/xboard/changelog.gz
/usr/share/doc/xboard/zippy.README.gz
/usr/share/doc/xboard/READ_ME
/usr/share/doc/xboard/FAQ.gz
/usr/share/doc/xboard/NEWS.gz
/usr/share/doc/xboard/FAQ.html
/usr/share/doc/xboard/ToDo.gz
/usr/share/doc/xboard/copyright
/usr/share/doc/xboard/changelog.Debian.gz
/usr/share/doc/xboard/ChangeLog.2.gz
/usr/share/menu/xboard
/usr/share/games/xboard/bitmaps.xchess
/usr/share/games/xboard/bitmaps.xchess/b108o.bm
...
/usr/share/lintian/overrides/xboard
/usr/share/man/man6/cmail.6.gz
如果我们想进行人机对战,可以用 -fcp/-scp 指定两个 engine,-st/-depth 指定搜索时间或者搜索深度;如果是联网,则可以 -ics,并用 -icshost/-icsport 指定服务器,这是还需要一个 helper 程序 -icshelper,用于登录发出命令和服务器交互(如 freechess.org 用 timeseal、而 chessclub.com 用 timestamp);-lgf 可以从文件里面读取牌局。
连接到 ICS 上可以用下面的命令,如 help 获得帮助,who 列出用户,games 列出现在的局,比较有用的是邀战 match id time inc,其中 id 是对方的注册号,time 是每方使用的时间(分 lightening,blitz 和 standard),inc 是每下一步增加的时间(常用方法是 time = 10,inc = 0 这样限制每盘时间,或者 time = 2,inc = 12,这样相当于最长思考时间不能超过 2min,每一步平均大约是 12s)。提出这个请求后,可以 accept 或者 decline。finger id 可以获得某人的比分情况。vars 列出自己的 configuration,可以用 set 设置。可以用 observe id/game id 观战。examine 可以获得最近进行那盘棋的信息。比较常用的命令是 getgame,这个会匹配自己的时间什么的自动获得一盘棋局。这里有一个入门介绍,以及详细的命令指南。
我们下面看看 gnuchess 这个 engine,
/usr/games/gnuchess其实 gnuchess 就是一个文本下面的 chess,但是用户必须对表达方式比较熟悉,如使用坐标之类的。类似的,crafty 也是这样的东西,
/usr/games/gnuchessx
/usr/share/doc/gnuchess/README
/usr/share/doc/gnuchess/TODO
/usr/share/doc/gnuchess/README.Debian
/usr/share/doc/gnuchess/copyright
/usr/share/doc/gnuchess/NEWS.gz
/usr/share/doc/gnuchess/changelog.Debian.gz
/usr/share/doc/gnuchess/changelog.gz
/usr/share/menu/gnuchess
/usr/share/man/man6/gnuchess.6.gz
/usr/share/man/man6/gnuchessx.6.gz
/usr/games/crafty.bin这里可以看见比 gnuchess 复杂了不少,还有专门的 rc 控制其行为。
/usr/games/crafty
/usr/share/crafty/crafty.hlp
/usr/share/doc/crafty/read.me.gz
/usr/share/doc/crafty/changelog.Debian.gz
/usr/share/doc/crafty/README.Debian
/usr/share/doc/crafty/copyright
/usr/share/doc/crafty/changelog.gz
/usr/share/doc/crafty/crafty.doc.gz
/usr/share/doc/crafty/crafty.faq.gz
/usr/share/man/man6/crafty.6.gz
/usr/share/man/man5
/usr/share/man/man5/crafty.rc.5.gz
/usr/share/lintian/overrides/crafty
/usr/share/doc-base/crafty
/usr/share/menu/crafty
/var/lib/crafty/book.lrn
/var/lib/crafty/position.lrn
/var/lib/crafty/TB
/etc/crafty.rc
/usr/share/man/man6/crafty.bin.6.gz
和 xboard 类似,还有 eboard,
/usr/games/eboard功能上似乎允许直接用 LAN 联机。
/usr/bin/eboard-config
/usr/bin/eboard-addtheme
/usr/share/applications/eboard.desktop
/usr/share/pixmaps/eboard.xpm
/usr/share/man/man1/eboard-config.1.gz
/usr/share/man/man1/eboard-addtheme.1.gz
/usr/share/man/man6/eboard.6.gz
/usr/share/games/eboard/classic.png
/usr/share/games/eboard/ghouls.png
/usr/share/games/eboard/plastic.png
/usr/share/games/eboard/eboard_themes.conf
/usr/share/games/eboard/NAG.en.txt
/usr/share/games/eboard/eboard.cs.dict
/usr/share/games/eboard/eboard.de.dict
/usr/share/games/eboard/eboard.es.dict
/usr/share/games/eboard/eboard.fr.dict
/usr/share/games/eboard/eboard.hu.dict
/usr/share/games/eboard/eboard.it.dict
/usr/share/games/eboard/eboard.ja.dict
/usr/share/games/eboard/eboard.pl.dict
/usr/share/games/eboard/eboard.pt_BR.dict
/usr/share/lintian/overrides/eboard
/usr/share/doc/eboard/Crafty.txt
/usr/share/doc/eboard/DGTboard.txt
/usr/share/doc/eboard/FICS-Timeseal.txt
/usr/share/doc/eboard/GNUChess4.txt
/usr/share/doc/eboard/GNUChess5.txt
/usr/share/doc/eboard/Makefile
/usr/share/doc/eboard/Scripts.txt
/usr/share/doc/eboard/Sjeng.txt
/usr/share/doc/eboard/Themes.txt
/usr/share/doc/eboard/copyright
/usr/share/doc/eboard/changelog.gz
/usr/share/doc/eboard/README.gz
/usr/share/doc/eboard/changelog.Debian.gz
/usr/share/menu
/usr/share/menu/eboard