在这几个月的对弈客户端的编程中,玄玄围棋先后连上了中国围棋网(CWS)、熊猫围棋网(即原来的IGS)、Tom、弈城(YC)。它们有各自不同的特性。从对它们的比较中我们大致可以看出对弈软件(包括服务器和客户端)的发展。这里需要说明一下的是,连上Tom/YC完全是为了检测玄玄围棋连上多个服务器的程序结构的合理性,是为了测试否能连上各种不同类型的网站,并没有发布它们的打算,因而只实现了看棋和评棋的功能,当然,如果它们主人不介意的话,那我肯定会毫不犹豫发布连上它们的功能,真希望能这样,因为上面有大量高手在下棋,还有大赛的转播,资源实在太丰富了。
中国围棋网和熊猫围棋网其实都是脱胎于原NNGS围棋服务器,属于最早一代围棋服务器。他们的数据结构,通信协议非常接近,但后者做了很多扩充和改进。而Tom和YC的相近程度更高,主要的区别在于,后者注重多国用户的支持,而前者目标用户主要是国内。因此,下面的比较,主要是CWS/ISG与Tom/YC两大阵营的比较。
1、对局室
对于CWS/ISG来说,我感觉一个主要的不足是,对局室在比赛一结束就不存在了。这至少会带来两个问题,一是,对于较为重要的比赛,例如大赛转播,比赛一结束人们就无法看棋了。比赛结束并不意味着对局室就没有人进入了,恰恰相反的是,比赛结束后往往还有许多用户想进去看棋。二是,比赛一结束看棋的用户就不能在原对局室对棋局进行评棋了,因为对局室都不存在了。Tom/YC显然注意到了这些问题,对局室并不会因为比赛结束而消失;对于普通棋局,只有当对局室内空无一人,服务器才将对局室删除。对于转播的大赛棋局,对局室必须经由管理员才能删除,即便室内已空无一人,它们还可以存在在服务器上。
2、文本数据与二进制数据
CWS/IGS客户端与服务器的通信都是文本格式的,我认为采用文本格式的通信协议唯一的好处是,不同客户端开发者能较容易分析通信数据并开发相应的功能。不足之处是,通信效率低下。而二进制格式的协议和文本格式的刚好相反,通信效率高了,别人也不容易为服务器开发客户端。如果需要协议保密的话,这样当然更好。我曾注意到,如果服务器上有3000个用户在线,连上Tom/YC所需的通信量不到CWS/IGS的一半。另外,在同样知晓通信协议的情况下,为Tom/YC写客户端要容易很多。
3、计时机制
在CWS/IGS上,每当有用户走子时,服务器除了提供走子的坐标,还会传来双方的剩余时间。随着时间一秒一秒的流逝,在下一步走子之前,客户端要显示时间只有靠自己计时。这样会带来一个问题,就是客户端的计时和服务器的有一定差异,尤其当网络不够通畅时,网速慢的一方常常因网络不通被判超时。Tom/YC则不同,客户端每一秒的时间显示都是来自服务器的指示,当网络不通时,时间就会停止不动,服务器也会停止为不通的一方计时,这样,基本上不会有人因网速慢而输棋,当然,反复掉线除外。
4、列表更新
CWS/IGS对于客户端的对局列表/用户列表/观棋者列表通常是不会通知更新的。用户为了更新这些信息,通常需要主动向服务器发出请求。Tom/YC则不同,这些列表一有更新,就会主动通知客户端进行更新,这样客户端在任何时候的对局列表和用户列表都是最新的,而且更新的效率很高,因为每次更新信息相对于重新获取这些数据信息量是很小的。正是这个原因,玄玄围棋在实现CWS/IGS的对局室时,只列出对局双方的信息,而不像Tom/YC,还包括观棋者列表。
5、赌棋功能
Tom/YC具有赌棋的功能,就是在看棋的时候用银两押某一方胜负的功能。按说这一功能和下棋的关系不大,有时还会有押某两支球队的比赛哪支获胜的赌局,这和围棋一点关系都扯不上。但即便如此,还是有许多人乐此不疲。我就见过不少人,他们几乎不下棋,专门赌棋,虽然赢来银两只是一个虚拟的数字。有过一段时间,发现我自己居然也有点上瘾了,在看棋时心揪得更紧。或许,好赌也是人的天性吧。
如果将CWS看成是第1代的围棋服务器的话,IGS可以算2代,而Tom/YC则是第3代。上述的5大差异基本上反映了第2代与第3代围棋服务器之间的差异。下面我们来看看,IGS这个2代服务器相对于第1代的CWS到底做了哪些改进,在比较的过程中我可能还会顺便就同一功能和Tom/YC进行比较。
IGS通常上面的用户可达3000多人,而NNGS服务器的源代码很多年以前我是看过的,记得好像支持的在线用户数大约不到1000人,CWS好像是500人。要支持3-6倍的用户数,我相信看不见的改进肯定不少。此外,IGS还做了如下改进:
1、为了和传统的客户端兼容,IGS支持传统方式的对局申请。这一申请方式有许多不足,其中主要的是,不能在申请时说明让多少子,是否猜先。因此IGS引进了所谓“新对局申请”方式,这一方式除了弥补了前面说的两个不足,还可以在申请时说明是采用熊猫网计时方式还读秒方式。所谓的“熊猫网计时方式”就是我们知道的“加拿大计时方式”,它规定在读秒时,必须在规定的时间内走完25手。虽然IGS可以采用读秒方式进行读秒,但是真正使用这种方式下棋的人非常少,我统计了一下,大约不会超过千分之二。如此低的使用率,加上它将读秒时间分成三个组成要素,1 基本读秒时间 2 考虑时间 3 考虑次数,这让读秒时间的显示变得很复杂,完全不像Tom/YC那样的,30/60秒3次,简单明了。因此玄玄围棋不支持在IGS上使用读秒方式的。这里捎带一提的是,为了实现新对局申请方式,作者花了很长时间,烦得半死。
2、IGS支持“自动申请对局”(Tom/YC也支持,但实现的方式好像不一样,使用的人相对较少,要申请成功不是很容易,还要付出银两)。这一功能我觉得很有用,常常是“自动申请对局”的按钮一按下,就可以立即开始对局。
3、IGS支持用户设定对局条件。对局条件主要是对局时间和让子猜先的设定。有了这一设定,其它人如果使用“新对局申请”方式向你提出对局申请,就必须符合你设定的条件,这样免去了许多无谓的打扰。另外还可以设定自动申请对局的条件。
4、对于悔棋的处理IGS也比较好。CWS规定最多只能悔棋5次。常有对手在达到这个极限前反复要求悔棋。而IGS的处理策略是这样的,一旦某一方的悔棋请求被另一方拒绝,双方就不能再悔棋了。而Tom/YC的策略是对局申请时就规定是否允许悔棋。这有点死板。常常是,明显是鼠标点错了的棋,因为一开始申明不能悔棋而无法悔棋,导致对局无效。
5、在IGS上,下手向上手申请对局时,系统通常会自动设定让子。对局结果计入升降级比赛成绩,而在Tom/YC上,让子棋只算友谊对局,不计入升降级比赛。因此,在Tom/YC,让子棋比较少,而在IGS上,让子棋随处可见。让子棋有让子棋的乐趣。
6、IGS的用户信息中包含“国家/地区”的信息,彰显了IGS的“国际性”。Tom/YC在这方面还有待改进。
7、IGS提供了局后对弈双方复盘的功能,玄玄围棋称之为“连线复盘”。这一功能Tom/YC上也有。玄玄围棋在7.0的第一次发布中尽量包含这一功能,除非预计实现它会严重推后新版本的发布。玄玄围棋在写这篇搏文时,IGS对弈模块就差这个功能没有实现,其余全部写好了。
8、 IGS引入了“新段位评定”方式,比如同样是1段,分为 1d?、1d、1d+,分别代表自设1段,系统认定1段,系统认定强1段。它们之间的水平往往差距较大。
9、IGS需要“弃权一手”3次才开始进入点目模式,这样更合理。2次就进入点目有人会不粘劫就进入点目模式,从而便宜1目。
从以上可以看出,Tom/YC虽然总体上比IGS要先进,但在许多实用性细节上IGS反而要更好,上面的2、3、4、5、6都是IGS更为优秀的地方。当然IGS也有改得连CWS都不如的地方,例如,用户的留言信息只能是一行,对局历史列表只列出最近24小时内的成绩。Tom/YC不允许用户留言,但对局历史却非常详细,还可以调出历史棋局来看。另外,IGS在大厅中不能交谈,只能用户间一对一交流或在对局室内评棋,大厅里显得很冷清。
我认为,如果在第3代的Tom/YC基础上再结合IGS的各种优点,就可以算第4代的围棋服务器了,那就是围棋服务器中的F22了。真希望有机会能自己写一个这样的服务器。