介紹
黑白棋,又叫反棋(Reversi)、奧賽羅棋(Othello)、蘋果棋或翻轉棋。黑白棋在西方和日本很流行。游戲通過相互翻轉對方的棋子,最后以棋盤 上誰的棋子多來判斷勝負。它的游戲規則簡單,因此上手很容易,但是它的變化又非常復雜。有一種說法是:只需要幾分鐘學會它,卻需要一生的時間去精通它。下子的方法:把自己顏色的棋子放在棋盤的空格上,而當自己放下的棋子在橫、豎、斜八個方向內有一個自己的棋子,則被夾在中間的全部翻轉會成為自己的棋子。并且,只有在可以翻轉棋子的地方才可以下子。
估價函數
所謂的“金角銀邊草肚皮”,說明了子的位置的重要性是不同的。最最要的點是四個角,而和角相鄰的三個點,則是不應該占領的,其次是四條邊,占領后的好處也很多。
當然了除了子的位置,自由度也比較重要。
搜索算法
如果只是憑估價函數來走棋,是很難贏的,好的AI必須能夠向前看幾步,看得越深,棋力就越強。
這就涉及到博弈樹搜索了,最經典是極大極小算法。
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 α
實現
請用chrome或者firefox打開,chrome的javascript性能更好~
演示地址: https://yshan.github.io/othello/
posted @ 2012-09-20 12:50 小明 閱讀(13525) | 評論 (11) | 編輯 收藏