关于本博客
这个博客不是把五子棋算法研究透彻之后再写的,而是一边研究算法一边写代码,同时一边写博客,所以有些博文的顺序不太对,比如 Zobrist 其实应该放在算杀之前就讲的。不过这并没有大的影响,总体上的顺序是OK的。
另外,这一系列博客讲的五子棋代码其实是一个开源的项目,源码地址: https://github.com/lihongxun945/gobang
由于是边写代码边写博客,所以博客中的代码不是最新的,甚至是有bug的,所以源码请尽量参考上述开源项目中的代码。比如之前讲极大极小值搜索改为负极大值的时候,对玩家的评分就出现了一个重要bug,在后序的提交中修正了这个bug。
Zobrist
Zobrist 是一个快速Hash算法,非常适合用在各种棋类游戏中(事实上也是在各种棋类游戏中有大量应用)。
我们前面讲了负极大值搜索和算杀,其实很多时候会有重复的搜索,比如这种:
[7,7],[8,7],[7,6],[7,9]
其实它和下面这种的走法只是顺序不同 ,最终走出来的局面是一样的:
[7,6],[7,9],[7,7],[8,7]
那么如果我们搜索中碰到了上面两种情况,我们会对两种情况都进行一次打分,而其实有了第一次的打分,完全可以缓存起来,第二次就不用打分直接使用缓存数据了。除了这种情况,其实以前的搜索结果也可以存下来,可以用在启发式搜索中。
那么现在的问题就是,我们应该怎么表示一