ChineseChess
象棋遊戲設計
需求:
-
人機對打
-
人人對打
-
搜尋深度設定(電腦強度)
-
悔棋,還原
-
下棋步法名稱顯示(ex:走三進一)
系統分為兩部分:
-
AI設計
-
界面還有程式輔助設計(ex: UI顯示 以及操作和悔棋還原)
遊戲方式:
-
由鍵盤輸入指令控制要哪個要動 EX: 1-> 車(0,9) 2-> 馬(1,9) 依此類推,選定後再顯示該單位可走路線(x,y)值,在由選手輸入x y值移動,以,做間隔。
-
吃掉對方將軍為勝利者
AI設計
建立一顆博弈樹來表示下棋的過程,樹中的每一個節點代表棋盤上的一個局面,對每一個節點根據不同的走法又產生不同的局面(生出新的結點),如此不斷進行下去直到沒有可以選擇的走法,即到達葉子結點(棋局結束)。
該樹包含三種類型的結點
-
奇數層的中間結點(以及根結點),表示輪到紅方
-
偶數層的中間結點,表示輪到黑方
-
葉子結點,表示棋局結束
局面評估
自己定義棋子的價值,考慮棋子位置及子力總合來替局面打分數。
建議用Alpha-Beta搜尋算法
悔棋和還原功能
(建議)悔棋主要任務為:
-
下棋回合數減一
-
將當前局面的數據保存到[步法]的queue裡,以供還原
-
從[步法]queue中POP出上一回合的棋局數據,覆蓋目前回合。
-
將戰況的列表框中的目前回合的保存到一個[步法名稱]QUEUE中,以供還原用,然後刪掉列表框中的目前回合走法名稱。
還原則跟悔棋相反:
-
下棋回合數加一
-
跟上面相反就對了….
下棋步法顯示功能
簡單來說就是將步法的起點坐標,終點坐標轉成中國象棋規範的走法名稱。
指定棋類為一個class(內含ID 名稱 子力 顏色(哪方) 目前位置(x,y) 存在(是否被吃掉了))
指定每個種類(EX:車馬砲士將兵象)繼承棋類各為class
建議定義一個class作為遊戲平台將各種棋類CLASS包含在內部,而AI引擎定義為另一個CLASS分開做。
Main function裡最好只需要多加
Game.start();
就好
其他自由發揮 只要能做到上述需求即可