Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1239649
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2012-04-28 12:25:26


在开源的围棋项目中,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()
{.....
 SgInit();
 GoInit();
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协议。
到此,程序流程已经很清楚了,下一步开始分析命令,然后再进入算法。
看代码应该类似斯诺克,先轻轻一碰球,把握整体,再一一把球打进袋。用成语来解释,就是庖丁解牛。
阅读(4909) | 评论(0) | 转发(0) |
0

上一篇:vs2010下QT编程

下一篇:gnugo 3.8 内存问题

给主人留下些什么吧!~~