在开源的围棋项目中,fuego应该是棋力最强的了。
使用很简单,这里主要分析一下代码。
代码是c 的,可以在gcc下编译,用vc2010稍稍修改一下也可以。这不是主要的,关键这么小的项目,也引入了boost,向手机上移植,一是稍麻烦一点,当然fuego已经成功移植到iphone上了。另外就是代码体积也庞大了一些。计划去掉boost,用标准c/c 修改成更通用一些。
fuego结构如下:
gtp是个通信协议,外挂一个界面,或双机对弈时使用。
smartgame是monte carlo utc核心算法
go是围棋相关功能,比如棋盘布局,棋子链表。
gouct是围棋算法,调用smartgame。
fuegomain是与外界的接口,通过gtpengine传入命令,传出结果。
用到boost的地方主要在gtpengine和smartgame。
gtpengine很简单,就是stream的通话。
这样,重点就在smartgame上。
主要代码流程:
main()
{.....
fuegomainengine engine(g_fixedboardsize, g_programpath, g_nohandicap);
.....
gtpinputstream in(cin);
gtpoutputstream out(cout);
engine.mainloop(in, out);
}
很明显,fuegomainengine是主要处理模块。
再:
class fuegomainengine
: public gogtpengine
{
...
gouctcommands m_uctcommands;
}
明显看出,fuegomainengine接收命令,进行处理,再返回结果。
传入传出的命令遵守gtp协议。
到此,程序流程已经很清楚了,下一步开始分析命令,然后再进入算法。
看代码应该类似斯诺克,先轻轻一碰球,把握整体,再一一把球打进袋。用成语来解释,就是庖丁解牛。
阅读(4831) | 评论(0) | 转发(0) |