1. 程式人生 > >遊戲開發中的人工智慧——基本路徑尋找及航點應用

遊戲開發中的人工智慧——基本路徑尋找及航點應用

1. 基本的路徑尋找

    從最基本得層次來講,路徑尋找只是讓某個遊戲角色,從其最初位置移向所需到達的目的地的過程而已。本質上,這一點和第二章中的基本追逐演算法的原理相同。具體如:簡單追逐追逐方法(最簡單的使座標逐漸相同)和視線追逐方法(使用Breseman方法)。但是,如果遊戲環境中有障礙物,那麼就需要考慮其他事情了。如下圖所示,兩種方法產生的路徑都可能被障礙物阻截。
   
1.1 隨機移動避開障礙物
    此方法適用於障礙物較少的情況,如下圖,環境中的樹木不是很多,隨意移動一下巨人,玩家就能進入巨人的視線。這種方法簡單有效,避免了負責路徑演算法對CPU的消耗。
   

if(玩家在視線內) {
    採用直線路徑走向玩家
}
else {
    以隨機方向移動
}

1.2 繞行障礙物   

    繞行障礙物是另一種簡單的避開障礙物的方法。當你要在策略遊戲或者角色扮演遊戲中,找出一條繞過大型障礙物的路徑時,比如繞過山區,這種方法相當有效。
    方法說明:· 假設單位透過障礙物看到目的地,但是不能夠越過障礙物到達目的地。
                  · 讓單位朝著目的地使用直接走過去,當遇到障礙物了,就沿著障礙物的邊緣走。
                  · 當障礙物與目的地之間沒有障礙物的時候,再朝著障礙物走過去。
   

2. 以麵包屑尋找路徑

    麵包屑路徑尋找方式可以讓計算機控制角色看起來很聰明,因為是玩家在不知不覺間替計算機控制角色建立了路徑。每次玩家走一步時,都會毫無所知地再遊戲世界中留下看不見的標記或者麵包屑。當遊戲角色碰到麵包屑時,就能憑著麵包屑一路走下去。遊戲角色會跟著玩家的足跡,直到追上玩家。
    麵包屑方法也是計算機控制角色成群移動的有效方式。不必讓群體的每個成員,都以費事費力的路徑尋找演算法找路徑,可以直接讓成員跟著領頭者留下的麵包屑走。
    思考:角色智慧與否,要看玩家的路徑是否智慧,如果玩家在轉了一個圓圈,再走出去,那麼角色會完全複製玩家的路徑,這樣就不那麼智慧了。對於成群的單位也是這樣,如果單位都是按照領頭者的路線走,那麼就只有一種路線,太單調了。關鍵還是要找到合適的使用情況。
    實際上,書中給出例子,也沒有完全複製目標單位的路徑,而是每次尋找最新的相鄰的麵包屑路徑。這個圖太模糊了,不上傳了。這樣就是在玩家走的路線中,做了一點點優化。   

3. 尋著路徑走

    路徑尋找通常僅被認為是從起點行走到所需到達的目的地的問題。然而,很多情況下,在遊戲環境中,即使沒有最終的目的地,也要讓計算機控制的角色以模擬的現實的方式移動。例如,計算機控制的賽車就必須沿著賽車道前進。同樣,策略遊戲中,也許要讓軍隊在城鎮間的道路上巡邏。如下圖:
   
     上圖中,標示為1的地形元素視為道路,標示為2的地形元素視為道路邊界以外的區域。我們不想讓巨人在道路上隨機移動,這種結果看起來不自然,我們想讓讓巨人看起來像是沿著道路行走。因此,我們需要分析周圍地形,決定巨人的路徑。
     核心思路是,每一步儘量沿著上一步的路線走。比如:上一步走的是向左上方,那麼對8個方向給出8個權值,左上方的權值為+2,上方和左方的權值都是+1,右下方的權值是-1,其他方向的權值都為0。然後把這八個方向按權值從大到小排序,然後,選取數值最大的,且地形可以走到的位置,作為路徑的下一步。最可能的是沿著左上方繼續走,最不可能的是原路返回。
 

   

4. 沿著牆走

    和遵循道路走一樣,這種方法也不會去算起點和終點之間的路徑。沿著牆走更像是探索的技巧。有時候,需要讓計算機控制的角色探索環境,以搜尋玩家、武器、燃料、寶物或任何遊戲角色可以接觸的東西。讓計算機控制的角色在環境中隨機移動,是遊戲開發人員最常用的辦法。如下圖:
   
      一個簡單的方法:左側移動法。即每次巨人總是儘量向其左邊移動,這樣就能對環境做出較為完整的探索工作。但是要注意,左側移動法,並不能保證巨人會進入到遊戲環境中的每個房間。
     

5. 航點導航

    路徑尋找是一項非常耗時,且耗用CPU資源的運算工作。減少這種困擾的方式之一,就是儘可能預先算好路徑。航點導航減少這種困擾的做法就是,認真地在遊戲環境中置放節點,然後,使用預先計算好的路徑,或者是簡單的路徑尋找方法在節點之間移動。如下圖:
   
    注意,圖中的每個點,至少都能讓另一個節點的視線看見。這樣,遊戲控制的角色總是能使用簡單的視線演算法,到達圖中的任何地點。下一步,就是規定這些節點之間的關係。
    
      有了這個路徑關係,兩點之間的最短距離,就可以使用Dijkstra演算法或者Floyd等演算法實現。

6. 結束
    本章討論的每種方法都有其優缺點,而且使用範圍往往比較侷限。下一章將要介紹的A*演算法,可適用大部分的路徑尋找問題。