1. 程式人生 > >遊戲開發中常用的演算法

遊戲開發中常用的演算法

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

1.與陣列相關的演算法:

  1. 快速排序(分治思想的應用):不是任何情況都適用,資料量小的話,還不如冒泡快,但快排的確很優秀。
  2. 堆排序:可用於做遊戲排行榜前多少多少名,根據求最大的K個數還是最小的K個數來建最大堆和最小堆,再將最大/小堆的根節點和最後一個子葉節點交換,最後調整堆,重複剛才那兩個步驟,直到得到K個數。當然,這種題也可以用紅黑樹實現的set來做。
  3. 二分查詢:用於查找出分數為多少多少的玩家

2.與樹有關的演算法

四叉樹、八叉樹可用來檢測大量物體之間的碰撞總次數。

這裡寫圖片描述

3.與圖有關的演算法

1.小型遊戲可以用的簡單的尋路演算法:

  1. 隨機尋路演算法:當NPC不管是遇到障礙物還是遇到了邊界(利用碰撞檢測),都會隨機選取一個前進的方向,繼續行走
  2. 跟蹤演算法:當遊戲中的主角進入到NPC 的“警戒區域”後,遊戲的AI 可輕易獲得目標的位置,然後控制NPC 物件移向被跟蹤的物件
  3. 閃避演算法:和跟蹤演算法完全相反,也就是當遊戲中的主角進入到NPC 的“警戒區域”後,主角可以去追著NPC跑

2.大型遊戲一般使用A*尋路演算法:使用最廣泛的一種尋路演算法,簡單說一下A*尋路演算法:

這裡寫圖片描述

公式:f(n)=g(n)+h(n),g(n)表示從起點到任意點n的實際直線距離,h(n)表示任意頂點n到目標點的估算距離(常用曼哈頓距離公式用於估算h(n):|x1 - x2| + |y1 - y2|)

把待處理的方格A存入一個”開啟列表”,開啟列表就是一個等待檢查方格的列表;”關閉列表”中存放的都是不需要再次檢查的方格。

每次從OPEN列表中選擇 f(n) 最小的節點將其加入CLOESE列表中,同時擴充套件相鄰節點並將它們加入OPEN列表,可把OPEN列表看成一個優先佇列,key值為 f(n),優先順序最高的先出。

最後直到把終點加入OPEN列表中,計算出指標指向就完事了。所以最後的路徑就是,從終點開始沿著父指標不斷往起點走,最後回到起始點,這樣最短路徑就找到了:

這裡寫圖片描述

3.DFS、BFS也常用於求最優方法這類問題