遊戲開發中常用的演算法
阿新 • • 發佈:2019-02-14
內容會持續更新,有錯誤的地方歡迎指正,謝謝!
1.與陣列相關的演算法:
- 快速排序(分治思想的應用):不是任何情況都適用,資料量小的話,還不如冒泡快,但快排的確很優秀。
- 堆排序:可用於做遊戲排行榜前多少多少名,根據求最大的K個數還是最小的K個數來建最大堆和最小堆,再將最大/小堆的根節點和最後一個子葉節點交換,最後調整堆,重複剛才那兩個步驟,直到得到K個數。當然,這種題也可以用紅黑樹實現的set來做。
- 二分查詢:用於查找出分數為多少多少的玩家
2.與樹有關的演算法
四叉樹、八叉樹可用來檢測大量物體之間的碰撞總次數。
3.與圖有關的演算法
1.小型遊戲可以用的簡單的尋路演算法:
- 隨機尋路演算法:當NPC不管是遇到障礙物還是遇到了邊界(利用碰撞檢測),都會隨機選取一個前進的方向,繼續行走
- 跟蹤演算法:當遊戲中的主角進入到NPC 的“警戒區域”後,遊戲的AI 可輕易獲得目標的位置,然後控制NPC 物件移向被跟蹤的物件
- 閃避演算法:和跟蹤演算法完全相反,也就是當遊戲中的主角進入到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也常用於求最優方法這類問題