NO IMAGE

人機對弈演算法屬於策略型人工智慧演算法,本遊戲中設定了人機對弈的遊戲模式,其演算法如下:

1,  設定所有獲勝組合,獲勝表

將可能出現的獲勝組合存入計算機中,計算機根據此組合判斷玩家或計算機是否勝利。例如:10×10的棋盤的獲勝組合如下圖:

 

 

得出棋局可能出現的獲勝組合,此組合用於後期設計AI對弈。

           最後,將所有的獲勝組合存入一個陣列中,即形成獲勝表。例如:A[1][1][2]表明A的位置為第2行,第2(陣列從0開始計算)。它在獲勝組合中的儲存在第三個位置。

再設定一個勝利判斷陣列  INT  WIN[計算機/玩家編號][獲勝組合編號]ds  玩家/計算機每下一步,則在相應的WIN陣列上自加一次。當WIN陣列達到56時,表示已經有一方勝出;當一方佔據了另一方的關鍵位置,致使另一方無法利用該獲勝組合失效,則此時另一方的WIN陣列設定為7,表示另一方已經無法由被佔據的組合上獲取勝利。該步驟為演算法的關鍵。

 

2,  計算棋格獲勝分數

在計算機下棋之前,會計算空白棋格上的獲勝分數,根據分數高低獲取最佳位置。計算機會將棋子下在獲勝分數最高的地方。

獲勝分數的計算機規則,是以包含棋格所在位置的獲勝組合數目,以及目前棋盤上這些獲勝組合中已經存在的棋子數目的多少來計算獲勝分數。

當可獲勝組合中已放置的棋子數越多,那麼在這個獲勝組合上的空棋格上下棋子而贏得棋局的可能性越大,所以分值越高,當已放置4顆棋子時,必須在第五個空棋格上設定絕對高的分值。

   當獲勝組合上有部分位置已被對手的棋格佔據而無法連成五子時,獲勝組合上空棋格的獲勝分數會直接設定為0

   當有兩組及其以上的獲勝組合位置交叉時,對該位置的分數進行疊加,形成分數比周圍位置明顯高。

 

3,  計算機的攻擊與防守

計算機計算獲勝分值越高的棋格,就能確定能讓自己的棋子最有可能達成聯機的位置,也就是最佳進攻位置,而一旦計算機能確定自己的最高分值的位置,計算機就具備了進攻能力。同理,計算機能計算出玩家的最大分值位置,並搶先玩家獲得該位置,這樣計算機就具有了防禦的能力。

 

總述:該演算法的關鍵所在就是判斷每個空棋格的分值,據此來實現人機對弈計算機的進攻與防守。該演算法的重點就是設計獲勝組合用於後期的判斷,該演算法的難就是實現空棋格的最佳位置的計算。但是該演算法的人工智慧程度比起其他演算法有明顯的優勢。

 

 

參考文獻:《VISUAL C 遊戲程式設計基礎》 作者:榮欽科技  主編:肖欽亮