五子棋中的人工智慧(一) 局面估計

2021-07-02 04:55:04 字數 1038 閱讀 4090

1.局面情況

眠二,眠三,衝四,活二,活三,活四,五連,雙四,四三,三三。

其中眠二表示有兩個相連的棋子,有一邊被堵,眠三跟衝四也是如此。活三表示三個相連的棋子(或兩個相連空一格後再連一棋子)沒被堵。雙四表示兩個四子相連,三三表示兩個活三。因為先手必勝,一般比賽時黑子有禁手,包括雙四禁;三三禁;四三三禁手,即黑方一步使乙個四,兩個活三同時形成 ;四四三禁手,即黑方一步使兩個四,乙個活三同時形成 ;長連禁手 黑方超過5個子連在一起 。禁手圖例如下:

2.局面分數估計

一般五子棋採用15*15的棋盤,越中心的位置價值越大,我們用陣列po

sval

ue[15

][15]

記錄棋盤位置的價值。

int posvalue[grid_num][grid_num]=

, ,,,

,,,,

,,,,

,,};

用陣列ty

peco

unt[

2][20

] 記錄黑白子的局面情況,用陣列ty

pere

cord

[15][

15][4

] 記錄棋盤上每個位置在左斜,右斜及垂直和水平四個方向的連線情況。

勝負判定(不採用禁手):當黑方連有五子時,返回乙個大的負值,黑胜;當白方連有五子時,返回乙個大的正值,白勝。如果輪到白方走棋:如果白棋有衝四或活四或者有活三而且黑棋沒有衝四,則白勝;如果黑棋有活四或四三或兩個活三而且白棋沒有三(活三或眠三),則黑胜;當沒有勝負時,分別用變數wv

alue

和bva

lue 來表示白方和黑方的局面分數,針對不同的局面給wv

alue

和bva

lue 加上不同大小的值,最後返回wv

alue

−bva

lue .如果輪到黑方走棋,與上述情況相似。

五子棋(人工智慧)

五子棋 人人對戰 人機對戰 include include 字元陣列的函式定義的標頭檔案 include standard library標準庫標頭檔案 define kong 0 define wanjia 1 define diannao 2 空位置設為0 玩家下的位置設為1 電腦下的位置設為2...

五子棋的人工智慧演算法

以前曾研究過五子棋的人工智慧演算法,這篇文章就是講的實現與原理。當然也只是做了最簡單的研究,人工智慧是個高深的學問,我基本上不懂,這裡的實現也只是憑自己的感覺來寫的,程式也不是我寫的,但是原理就是這樣。我相信還有高手,我的文章也只能提供給一些初學者看看了。電腦下子實際上是分兩個步驟的,第乙個步驟是盡...

人工智慧五子棋實現原理

關於棋盤棋子的實現邏輯我就不多說了,大家可以看原始碼,並不複雜,說說ai部分的實現吧 我的實現思路是 1.走對自己獲得勝利最有利的點 說白了就是最接近5子連線的點 2.堵對對方獲得勝利最有利的點 說白了就是堵對方的棋子 做到這兩步就能實現乙個初級階段的人工智慧了。那麼接下來就講講關於計算獲得勝利最有...