五子棋算法
更新時間: 2007-06-01 13:10:16來源: 粵嵌教育瀏覽量:791
任何一種棋類游戲其關(guān)鍵是對當前棋局是否有正確的評分,評分越準確則電腦的AI越高。五子棋游戲也是如此,但在打分之前,我們先掃描整個棋盤,把每個空位從八個方向上的棋型填入數(shù)組gStyle(2, 15, 15, 8, 2),其中個下標為1時表示黑棋,為2時表示白棋,第二和第三個下標表示(x,y),第四個下標表示8個方向,一個下標為1時表示棋子數(shù),為2時表示空格數(shù),如:
gStyle(1,2,2,1,1)=3表示與坐標(2,2)在第1個方向上相鄰的黑棋棋子數(shù)為3
gstyle(1,2,2,1,2)=4表示與坐標(2,2)在第1個方向上的近的空格數(shù)為4
在定義方向時,也應(yīng)該注意一定的技巧,表示兩個相反的方向的數(shù)應(yīng)該差4,在程序中我是這樣定義的:
Const DIR_UP = 1
Const DIR_UPRIGHT = 2
Const DIR_RIGHT = 3
Const DIR_RIGHTDOWN = 4
Const DIR_DOWN = 5
Const DIR_DOWNLEFT = 6
Const DIR_LEFT = 7
Const DIR_LEFTUP = 8
這樣我們前四個方向可以通過加四得到另一個方向的值。如果你還是不太明白,請看下面的圖:
---------
---------
---oo----
-ox*xx---
---------
---------
圖中的*點從標為(4,4),(打*的位置是空位),則:
gStyle(2,4,4,1,1)=1在(4,4)點相鄰的上方白棋數(shù)為1
gStyle(2,4,4,1,2)=2在(4,4)點的上方距上方白棋近的空格數(shù)為2
gStyle(1,4,4,3,1)=2在(4,4)點相鄰的右方黑棋數(shù)為2
gStyle(1,4,4,3,2)=1在(4,4)點的右方距右方黑棋近的空格數(shù)為3
...
一旦把所有空點的棋型值填完,我們很容易地得出黑棋水平方向上點(4,4)的價值,由一個沖1(我把有界的棋稱為沖)和活2(兩邊無界的棋稱為活)組成的。對于而白棋在垂直方向上點(4,4)的價值是一個活1,而在/方向也是活1所以,只要我們把該點的對于黑棋和白棋的價值算出來,然后我們就取棋盤上各個空點的這兩個值的和的一點作為下棋的點。然而,對各種棋型應(yīng)該取什么值呢?我們可以先作如下假設(shè):
Fn 表示先手n個棋子的活棋型,如:F4表示先手活四
Fn'表示先手n個棋子的沖棋型,如:F4'表示先手沖四
Ln 表示后手n個棋子的活棋型,如:L3表示后手活三
Ln'表示后手n個棋子的沖棋型,如:L3'表示后手沖三
.
.
.
根據(jù)在一行中的棋型分析,得到如下關(guān)系:
L1'<=F1'<L2'<=F2'<=L1<F1<L2<F2<L3'<=F3'<L4'<F4'=F4
從這個關(guān)系包含了進攻和防守的關(guān)系(當然,這個關(guān)系是由我定的,你可以自己定義這些關(guān)系)。對這些關(guān)系再進一步細化,如在一個可下棋的點,其四個方向上都有活三,也比不上一個沖四,所以我們可以又得到4*F3<L4'這個關(guān)系,同樣,我們還可以得到其它的關(guān)系,如:4*F2<L3、4*L3<F3...,這些的關(guān)系由于你的定法和我的定法制可能不一樣,這樣計算機的AI也就不一樣,我們把分值小的L1'值定為1,則我們就得到了下面各種棋型的分值,由C語言表示為:
F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};
L[2][5]={{0,1,5,50,3750},{0,10,30,150,4000}};
F數(shù)組表示先手,個下標為0時表示沖型,第二個下標表示棋子數(shù),則F2'對應(yīng)F[0][2]L數(shù)組表示后手,個下標為0時表示沖型,第二個下標表示棋子數(shù),則L2對應(yīng)F[1][2]Ok,棋型的分值關(guān)系確定好了以后,我們把每一個可下點的四個方向的棋型值相加(包括先手和后手的分值),選擇一個值,并把這一點作為計算機要下的點就OK了:)。
后話:
1、得到值也許不止一個點,但在我的程序中只選擇個點,當然你可以用于個隨機數(shù)來決定選擇那一個值點,也可以對這些值點再作進一步的分析。
2、在這個算法中我只考慮了周圍有棋子的點,而其它點我沒有考慮。
3、可以再更進一步,用這個算法來預測以后的幾步棋,再選擇預測值的一步,這樣電腦的AI就更高了
4、這個算法沒有考慮黑棋的禁手(雙3、雙四和多于五子的連棋)。因為在平時我下的五子棋是沒有這些禁手的。
推薦閱讀
- ·Linux字符設(shè)備驅(qū)動框架解析:file_operations的核心作用與實現(xiàn)
- ·廣東朝歌數(shù)碼科技股份有限公司專場招聘會
- ·深化產(chǎn)教融合,共筑技能人才培養(yǎng)新生態(tài) —— 廣州華立學院到訪粵嵌從化校區(qū)為深化產(chǎn)教
- ·校企合作新突破 | 粵嵌科技與三亞學院共探產(chǎn)教融合新路徑
- ·粵嵌科技入選國家級職業(yè)數(shù)字展館聯(lián)合建設(shè)單位,賦能計算機程序設(shè)計員高技能人才培養(yǎng)
- ·嵌入式實時操作系統(tǒng)的性能優(yōu)化與實現(xiàn)路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學探索 AGI 時代教學新范式
- ·嵌入式系統(tǒng)中的低功耗設(shè)計策略與實現(xiàn)路徑
- ·深圳市軒宇軟件開發(fā)有限公司專場招聘會
- ·嵌入式系統(tǒng)中的代碼空間優(yōu)化:策略與實踐