Posted on 2012-09-20 12:50
小明 阅读(13329)
评论(11) 编辑 收藏 引用 所属分类:
Game Development
介绍
黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘 上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不是像
围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。
下子的方法:把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。并且,只有在可以翻转棋子的地方才可以下子。
估价函数
黑白棋中最重要的是电脑对局势的判断,如何写好这样的估价函数是黑白棋人工智能程序的重点。
所谓的“金角银边草肚皮”,说明了子的位置的重要性是不同的。最最要的点是四个角,而和角相邻的三个点,则是不应该占领的,其次是四条边,占领后的好处也很多。
当然了除了子的位置,自由度也比较重要。
你的目标是限制对手的自由度(即棋步数量),同时增加自己的自由度
![](data:image/png;base64,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)
搜索算法
如果只是凭估价函数来走棋,是很难赢的,好的AI必须能够向前看几步,看得越深,棋力就越强。
这就涉及到博弈树搜索了,最经典是极大极小算法。
Minimax算法常用于棋类等由两方较量的游戏和程序。该算法是一个零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,另一方则选择令对手优势最小化的方法。而开始的时候总和为0。
伪代码:
function minimax(node, depth)
if node is a terminal node or depth = 0
return the heuristic value of node
if the adversary is to play at node
let α := +∞
foreach child of node
α := min(α, minimax(child, depth-1))
else {we are to play at node}
let α := -∞
foreach child of node
α := max(α, minimax(child, depth-1))
return α
实现