游戏中的AI及实用算法逻辑
這篇文章就不加具體的項目代碼了,畢竟“敲代碼是只是在一棟大樓設計好后具體的搬磚工作”,程序猿貴在對這張圖紙的設計好壞。再者這個話題我這車開的還不夠穩,講多了就翻車了。所以就跟大家分享一些基礎的,拋磚引玉吧。
先來感受一下即將到來的人工智能時代:
仿生蜻蜓:
?
游戲中的AI仿生蜘蛛:
波士頓動力的機器人從跑步跳躍到后空翻,跟著節拍跳舞。一次次的給我們以驚艷,一次次的感嘆。《西部世界》中的場景馬上就要成為現實:
波士頓動力機器人的進化史:
引自:游戲人工智能讀書筆記
先來用我的理解來解釋一下這個司空見慣的名詞:AI(Artificial Intelligence)
到底什么是人工智能,什么是游戲中的AI?
什么是人工智能,其實這個領域已經默默打怪升級了幾十年。這兩年突然爆發,取得,尤其是現在發展的神經網絡、深度學習都是人工智能的一個重要的領域,而且取得了重大的突破。尤其是2016年,AlphoGo在圍棋領域打敗李世石后,二手QQ出售平臺人工智能變的家喻戶曉,隨后的由人工智能在圖像處理上取得的重大突破,現在的人工智能在自動駕駛、3D重建等領域都炙手可熱。大街小巷都在學習人工智能,游戲領域自然也是一個非常重要的戰場。
我們這一輩人小時候玩“紅警”,打“War3”,現在玩“DOTA”或者“王者榮耀”都會玩人機對戰。相信大家都會發現,電腦的AI都比較死板。但不可否認,這就是我們游戲領域的人工智能,甚至在未來的很長一段時間大部分游戲的AI也不會變的跟人一樣智能。為什么這么說呢?以前是技術問題,以后是游戲性要求沒必要那么高的AI(個人觀點,歡迎留言拍磚)。
1997年,IBM的深藍戰勝了當時的國際象棋特級大師Garry Kasparov。深藍是基于一個經過大量的國際象棋規則修正和棋盤評估修正后的極大極小算法來下棋的,并且是運行在一臺定制的超級計算機上。然后到了2016年,Google的DeepMind開發的Alphago在5番棋中戰勝了韓國的李世石,這也標記著,圍棋也從代表著人類獨有的智慧的榮光的神壇上走了下來。之后有報道稱Google將AlphaGo應用到著名RTS游戲《星際爭霸》中。相信在不遠的將來,電子競技中就有出現超過人類玩家的智能機器人。玩家在大部分游戲中的AI將會無比強大,具備學習能力,能夠更好的和玩家進行交流互動。以后玩游戲再也不怕遇到“小學生”那樣的坑隊友了。
現在游戲中的AI主要做的事情:
?
- AI玩游戲:棋牌類游戲的AI,競技類游戲AI,游戲中的NPC行為控制,甚至是創造一個robot來和人來玩游戲等。
- AI生成游戲內容:地圖關卡的自動生成,游戲場景劇情的自動生成、推演。
- AI對玩家建模:對玩家游戲內行為建模。試圖去理解游戲內玩家的行為,情感等信息,從而更好的對玩家進行用戶畫像,而這些信息也能夠進一步的改善游戲的沉浸感。
講了這一大堆,回歸一下現實,我們大部分游戲開發主要使用哪些AI相關的算法邏輯呢?
?
- 尋路:這個是游戲中很普遍的一種AI,網格地圖(Tiled)、導航圖(NavMesh)等,用到的圖的最短路徑算法:使用最多的應該是A星(A-Star)算法。
- 有限狀態機:這個是游戲的基礎,可以應對大部分的簡單邏輯流程控制,復雜的邏輯可能會擴展到分層狀態機。
- 行為樹,這個目前大型游戲中NPC應用最多,尤其是一些大型Boss,其行為樹已經相當復雜。
- 模糊狀態機:這個有點上升到只能的層面,已經不再是絕對的是非,而是存在了一定的權重和不確定性,不過感覺用的還不多。
- 集群控制:這種在RTS游戲中應用很多,多個單位的集群AI,追隨、分離、規避等。
對應這些具體的代碼實現,本文就不進一步深入展開了。有興趣的同學可以在網上找到很多的資料。這有一篇很早以前寫的一個行為樹的應用示例文章:基于行為樹的新手引導設計。
推薦三本經典的游戲開發書籍,其中我參與制作的第一款RTS類游戲《指上談兵》就是從《游戲人工智能編程》中借鑒了很多。
?
最后來分享一個經典的游戲人工智能bug來結束本文:
?
早期玩家都知道,印度文明一出現在視野里,必須立刻毫不遲疑地臥薪嘗膽跟其他文明媾合、集中全部力量無論多么遙遠,也要把印度早早摁死。無論怎樣誘人的和平條約,都不要和印度簽署,一定要跟甘地(印度的領袖)死磕到底。
否則,一旦印度發展出核武器,就會瘋狂地四處亂炸,把全地球徹底搞當。相比之下,鑫十五天簡直是個乖寶寶。
原因很簡單。游戲設定里甘地是非常和平的,其野蠻度極低。文明發展,野蠻度越來越低,等到原子彈出現的時代,就差不多降到零。降到零是小事,一旦降為負數,程序無法處理負號,于是變成255,極大值。這是比希特勒還瘋狂好多倍的數值。于是一個極端和平的甘地,眨眼成了核彈狂魔。
總結
以上是生活随笔為你收集整理的游戏中的AI及实用算法逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《守墓人》主程:如何用像素风做出真实的游
- 下一篇: 游戏设计模式——面向数据编程思想