很久很久以前(大概 20 多年前),我在一本杂志上看到了一段五子棋游戏的代码,我把它输入到我的电脑里,玩得很开心。
这款游戏很难赢,但电脑 AI 的核心算法非常简单,代码量也不大。我想知道是否有人了解这种算法,并有一些关于它的源代码或理论的链接。
我记得的是,它基本上分配了一个数组,覆盖了整个棋盘。然后,每当我或电脑放置一个棋子时,它会给棋盘上所有可能受到该棋子影响的位置增加一些权重。
例如(请注意,权重肯定是不对的,因为我不记得了):
1 1 1 2 2 2 3 3 3 4441234X4321 3 3 3 2 2 21 1 1
然后它简单地扫描数组,找到一个具有最低或最高值的空闲位置。
我不太清楚的地方:
- 也许它有两个数组,一个用于我,一个用于电脑,并且有一个最小/最大权重?
- 可能算法还有更多内容,但其核心基本上是一个数组和加权数字
这是否让任何人想起了什么?有人有什么可以帮忙的吗?
回答:
阅读您的描述,并稍加思考,我认为它可能使用单个数组,就像您描述的那样。
要实现五子连珠的目标,你必须 (a) 阻止对手成功,以及 (b) 自己成功。
要让自己成功,你必须在你已经放置在棋盘上的棋子附近放置棋子,因此为你的棋子旁边可能参与连线的空位增加一个正分是有意义的。无论你给出的线性例子,还是二次方的例子,都可能运作良好。
为了阻止你的对手成功,你必须在他/她的棋子旁边放置棋子。一石二鸟尤其好,所以对手的棋子应该以与你的棋子相同的方式增加周围空位的值——他已经连成的棋子越多,得分越高,算法就越有可能试图切断对手。
这里最重要的是不同空位的权重,以及对手的棋子的权重是否与你的棋子不同。不幸的是,我对此无能为力,但是一旦游戏本身被编写出来,这些值应该通过反复试验就能很容易地计算出来。
然而,这是一种非常基本的方法,并且会被树搜索算法超越。在 Google 上搜索,有一个相关的 威胁搜索论文,它显然适用于五子棋。但这篇论文需要付费才能阅读 :/