本項目要實現的是五子棋人機版,經過制定棋型的評分表使機器可以對棋盤局勢評估。五子棋玩家雙方分別稱爲「人」、「機器」 ,當人落子後,機器對棋盤掃描獲取可行棋的位置集合,而後遍歷該集合,利用評估函數對每一個空位依次估分,得分最高的位置即爲機器要落子的位置,在使用評估函數對空位打分時,爲了不機器只攻不守,須要使用「換位思考」的思想,也就是說打分時不只考慮自身,還要考慮對方。html
Location類封裝棋盤上的一個位置,AI對局勢分析時會對位置打分,因此位置實體類應該有個字段保存位置分數,Location類的設計如圖1所示。函數
public Location(int x, int y)spa
構造函數。x:橫座標,y:縱座標設計
public Location(int x, int y, int player)3d
構造函數。x:橫座標,y:縱座標,player:位置全部者htm
public Location(int x, int y, int player, int score)對象
構造函數。x:橫座標,y:縱座標,player:位置全部者,score:位置分數blog
public void setX(int x)事件
設置橫座標的值文檔
public void setY(int y)
設置縱座標的值
public void setScore(int score)
設置位置分數
public void setPlayer(int player)
設置該位置由玩家player落子,player可取:Chess.PLAYER、Chess.AI
public int getX()
獲取對象的橫座標
public int getY()
獲取對象的縱座標
public int getPlayer()
獲取該位置是由哪位玩家全部
public int getScore()
獲取該位置的分數
ChessPanel類負責視圖上的事情,如棋盤以及棋子的繪製、棋盤狀態的保存、落子、清空等事件,ChessPanel類的設計如圖2所示。
參考文檔和完整的文檔和源碼下載地址: