當前位置:編程學習大全網 - 編程語言 - 跪求五子棋算法c語言版

跪求五子棋算法c語言版

任何壹種棋類遊戲其關鍵是對當前棋局是否有正確的評分,評分越準確則電腦的AI越高。五子棋遊戲也是如此,但在打分之前,我們先掃描整個棋盤,把每個空位從八個方向上的棋型填入數組gStyle(2, 15, 15, 8, 2),其中:第壹個下標為1時表示黑棋,為2時表示白棋,第二和第三個下標表示(x,y),第四個下標表示8個方向,最後壹個下標為1時表示棋子數,為2時表示空格數,如:

gStyle(1,2,2,1,1)=3表示與坐標(2,2)在第1個方向上相鄰的黑棋棋子數為3

gstyle(1,2,2,1,2)=4表示與坐標(2,2)在第1個方向上的最近的空格數為4

在定義方向時,也應該註意壹定的技巧,表示兩個相反的方向的數應該差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)點相鄰的上方白棋數為1

gStyle(2,4,4,1,2)=2在(4,4)點的上方距上方白棋最近的空格數為2

gStyle(1,4,4,3,1)=2在(4,4)點相鄰的右方黑棋數為2

gStyle(1,4,4,3,2)=1在(4,4)點的右方距右方黑棋最近的空格數為3

...

壹旦把所有空點的棋型值填完,我們很容易地得出黑棋水平方向上點(4,4)的價值,由壹個沖1(我把有界的棋稱為沖)和活2(兩邊無界的

棋稱為活)組成的。對於而白棋在垂直方向上點(4,4)的價值是壹個活1,而在/方向也是活1所以,只要我們把該點的對於黑棋和白棋的價值算出

來,然後我們就取棋盤上各個空點的這兩個值的和的最大壹點作為下棋的點。然而,對各種棋型應該取什麽值呢?我們可以先作如下假設:

Fn 表示先手n個棋子的活棋型,如:F4表示先手活四

Fn'表示先手n個棋子的沖棋型,如:F4'表示先手沖四

Ln 表示後手n個棋子的活棋型,如:L3表示後手活三

Ln'表示後手n個棋子的沖棋型,如:L3'表示後手沖三

.

.

.

根據在壹行中的棋型分析,得到如下關系:

L1'<=F1'<L2'<=F2'<=L1<F1<L2<F2<L3'<=F3'<L4'<F4'=F4

從這個關系包含了進攻和防守的關系(當然,這個關系是由我定的,妳可以自己定義這些關系)。對這些關系再進壹步細化,如在壹個可下棋的點,其四個方向上都有活三,也比不上壹個沖四,所以我們可以又得到4*F3<L4'這個關系,同樣,我們還可以得到其它的關系,如:4*F2<L3、4*L3<F3...,這些的關系由於妳的定法和我的定法制可能不壹樣,這樣計算機的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數組表示先手,第壹個下標為0時表示沖型,第二個下標表示棋子數,則F2'對應F[0][2]L數組表示後手,第壹個下標為0時表示沖型,第二個下標表示棋子數,則L2對應F[1][2]Ok,棋型的分值關系確定好了以後,我們把每壹個可下點的四個方向的棋型值相加(包括先手和後手的分

值),最後選擇壹個最大值,並把這壹點作為計算機要下的點就OK了:)。

後話:

1、得到最大值也許不止壹個點,但在我的程序中只選擇第壹個最大點,當然妳可以用於個隨機數來決定選擇那壹個最大值點,也可以對這些最大值點再作進壹步的分析。

2、在這個算法中我只考慮了周圍有棋子的點,而其它點我沒有考慮。

3、可以再更進壹步,用這個算法來預測以後的幾步棋,再選擇預測值最好的壹步,這樣電腦的AI就更高了.

4、這個算法沒有考慮黑棋的禁手(雙3、雙四和多於五子的連棋)。因為在平時我下的五子棋是沒有這些禁手的。: )

  • 上一篇:linux 系統是幹什麽的?為什麽不用windows系統?
  • 下一篇:求小說《邊城》的大概故事簡介
  • copyright 2024編程學習大全網