1. 程式人生 > >AI實現五子棋機器人(一)

AI實現五子棋機器人(一)

而是 fec 指定 pie soft lis href 遊戲 bsp

前言:

  前幾天在 csdn 下載資源的時候才發現自己 csdn 有近 200 的下載積分,看了看共享的資源,哈哈 ... 7年前寫的五子棋遊戲很受歡迎。

  下載地址:新手入門五子棋遊戲 剛入行的時候寫的,采用的 "權值" 計算法。

  在這個 AI 的浪尖風口上,借助我對遊戲領域的熱愛,在工作余外的時間喚起了我的想法,學習 AI 實現一個五子棋機器人。

  

一、五子棋介紹

  種類及區別

  先說說五子棋吧,通常大家玩的五子棋分為帶禁手和不帶禁手兩個版本,
  (前者稱之為連珠Renju,後者一般稱之為五子棋Gomoku
  然而無論哪一個版本,先手黑棋均必勝。
  (所謂黑必勝

的意思是,只要黑棋按照一定的方式下,白棋選擇棋盤上的任何一個點都不可能贏棋。)

  (禁手規則增加程序復雜度,暫不考慮加入)

  這裏只說結果,至於為什麽參考文末資料:
  1992年Victor Allis通過編程證明不帶禁手的五子棋,黑必勝。
  2001年Janos Wagner第一次證明的帶禁手的五子棋,也是黑必勝。

  先手優勢及棋譜介紹

  黑棋的優勢到底有多大呢?在26個職業開局裏,已經發現有19個是黑棋必勝的(一打必勝)。

  因此為了進一步削弱黑棋的優勢,國際上推出五手兩打的規則。
  (就是黑棋的第三步需要下兩個點,但由白棋挑選讓其下較弱的哪一個)
  可是人們發現黑棋帶禁手依然是必勝。

  從實踐的角度來講,網上是可以搜索地毯譜的,一般在幾百兆左右,可以用renlib軟件打開,

  所謂地毯譜的意思就是黑棋會指定下法,但白棋每一步都可以選擇棋盤任意位置,最後黑棋必勝。也就是說,只要按照此棋譜下棋,五子棋世界冠軍都一定會輸給你。
  ( 目前花月、浦月、雲月、雨月、峽月、溪月、金星、水月、寒星、明星、嵐月、新月、名月,山月,殘月都是五手兩打必勝)

  那麽正式的比賽是怎麽玩的呢?

  現在的正式比賽通常會常用三手交換五手兩打這些復雜的規則來平衡比賽,但這些規則的各個分支也是逐漸被人破解,
  五子棋的比賽已經很大程度不是在考驗自己的臨場發揮,而是考驗選手對於少量黑白平衡 分支的記憶情況。

  廣義的五子棋

  不帶禁手的五子棋是屬於一類更為普遍的 m,n,k遊戲 的一種特例,既 15,15,5。

  m,n,k遊戲是指m行n列,輪流下子,連成k個算贏。這個在數學中專門的研究如果在最理想下法(Perfect Play)的情況下有什麽樣不同的結果,

  比如標準的三連棋(Tic-tac-toe)是3,3,3是一個平局,同樣只有六路棋盤的五子棋也是平局,當然上面我們已經說明了15,15,5是先手必勝,

  還有研究發現11,11,5也是先手必勝。m,n,k遊戲只有先手必勝和平局兩種結果。由於每下一個子都一定會對下子一方那一方有優勢,

  所以可以通過反證法證明m,n,k遊戲裏不可能有後手勝利的情況。如果後手有勝利的方法,

  那麽先手可以提前借鑒(Strategy stealing)過來實現必勝。

  參考來自:Csdoker‘s Blog

二、實現思路

  開發語言:HTML5、JS  (輕)

  繪制棋盤、勝負判斷規則、界面操作功能,這些比較基礎的內容暫時不考慮;

  采用一個三維數據來定義棋盤內容:  

var _chessPieces = new Array();
_chessPieces[16][16][1] = -1; 

// [16][16] 棋盤大小:15 * 15,[1] 黑白棋子 (-1 沒有棋子,0 白色棋子,1 黑色棋子)

AI實現五子棋機器人(一)