得益于游戏逻辑的多样性,游戏编程中用得到算法的主要是游戏的业务逻辑。下面,力扣君来简单说说做游戏相关用得到的算法吧!
1. 贪心
其实生活中基本都用得到贪心算法,在面对陌生事物时,优先选择直观上最划算的,就是贪心,游戏里也一样,各种计算机制都会用到贪心。从flash小游戏,到匹配机制,都可以用到贪心。
2. 排序
排序也一样,好友排序,属性排序,各种各样的场景下都会用到排序,最基础的算法。
3. 堆
堆这种数据结构相对用得最多的应该是最大堆,即构建一个堆,每次可以O(1)取其中的最大数,O(logn)添加元素,往往用于需要动态维护最大值的情况。
4. 队列、栈
队列是相对而言用的最多的数据结构之一,无论是搜索中的广度优先搜索,还是协程的应用都需要用到先进先出的队列。
栈这种数据结构在游戏里被用到的也相对不少,最简单的纸牌游戏就是通过栈的数据结构实现的。
5. 搜索
搜索在做算法的时候用得很多,但做游戏的时候一般很少使用。
原因有两个,一个是写搜索相对而言需要更小心,其他的地方写错了可能只是这里停下出错了,但搜索出错往往会导致死循环,二是,搜索的应用场景较小,搜索主要适用于对整个游戏所有场景进行遍历的小工具上,其他情况下游戏用到穷举的可能没那么多。
6. 动态规划
和搜索一样,因为游戏往往是让玩家去做决策,所以可能动态规划很少被用到。但很多小游戏都有一定的动态规划思维在其中,就比如出去采集资源,怎么样可以让带回去的资源在有限的背包容量下价值最高。
7. SPFA & Floyed
寻路是很多游戏中不可或缺的一部分,SPFA,单源点最短路径,一般是用于自身的寻路系统,而floyed 一般是用于网格状棋盘的寻路系统。
8. AI 逻辑
这里的 AI 逻辑不是人工智能,而是 NPC 的行动机制。往往依靠状态转移树或者状态转移方程来完成。
游戏里算法还有很多,在大规模的线上对战中,还用得到一些复杂的预测算法,在游戏渲染里也会有大量的渲染算法,这些都需要你在今后的工作中自己去慢慢探索。