棋子跳動算法
該算法在ChessBoard.CanJumpTo函數中實現
找出一個棋子所有可走位置,並建成數據結構“圖”的形式
這個算法有點象圖的廣度優先遍歷算法。文字說明如下:
1.把當前棋子坐標加入“圖”中。
2.從當前棋子位置出發,從六個方向查找棋子可跳的位置,
3.如果第2步找到坐標沒有加入“圖”中,就把這些坐標加入“圖”中去。
4.從第3步剛加入“圖”中的坐標出發,繼續執行第2步。一直到沒有坐標加入“圖”中為止。
最短路徑搜索
當用戶指定下棋位置以后,還要計算出棋子從當前位置到目標位置的最短路徑,為游戲的播放棋子走動動畫作准備。這個算法還是有點象圖的廣度優先遍歷算法,文字說明如下:
1.把所有坐標的“權值”設為-1
2.把當前棋子坐標的“權值”設為0。
3.從當前棋子位置出發,查找棋子可跳的位置。
3.如果第3步找到坐標沒有“權值”為-1,就把這些坐標的“權值”在上一坐標的基礎上加1。
4.從第4步剛設定“權值”的坐標出發,繼續執行第2步。一直到所有坐標都設定“權值”為止。
5.從目標位置開始,倒退着開始查找,每次查找的位置應該是“權值”比當前位置減小1的坐標。一直找到起始位置。這樣就找到最短路徑了。
這些的都是數據結構基礎知識,有點抽象,只要理解加想象就沒有問題了。哦,上次“平安”考試中有一個題目:什么是前序遍厲,什么是后序遍厲,我真的記不住。數據結構的知識能理解能運用,考試卻不能得分,冤呀。
5. 計算機下棋策略
這是最難設計的部分,人與計算機的思維方式完全不同,如何把人的下棋思路表示計算機可運算的數據結構,這是比較困難的,要不然人工智能這么多年一直沒有突破性進展呢?
兩坐標間距離計算方法
計算機下棋策略主要有以下幾個方面:
- 計算出己方所有可能走法
- 選出一個跳得最遠(盡快讓自己獲勝)的棋子和走法。
- 選擇一個最可能阻礙對方前行的棋子和走法。
- 盡可能選擇可為下一步提供最有利條件的棋子和走法
- 對以上幾項做綜合分析,得出較好的走法。