从0开始搭建一个战棋游戏的AI(初级教程)
戰棋類游戲一直以高策略性著稱,其中不乏經典之作如“三國志英杰傳”、“三國曹操傳”、“炎龍騎士團”、“金庸群俠傳”等等。
今天,我們就如何一步步從0開始實現一個簡單的戰棋類游戲AI,概述一下此類游戲AI的設計思路和算法。(什么?AI是啥?——人工智能,通俗來說就是電腦的自動策略。)
?
戰棋類游戲的關卡設計思想
經典戰棋類游戲一般來說AI都比較簡單,豐富高可玩性的關卡和極限挑戰難度,還是要靠關卡設計來做:比如什么時候敵方出援軍、敵方某個據點什么時候出兵之類的驅動整個戰局變化的。
這個由于是關卡設計者(一般是游戲策劃)考慮的范疇,我們今天不討論這個。光討論一個NPC,每回合在正常情況下應該如何決策。
模型分解
我們分析幾款經典的戰棋類游戲
1、曹操傳
分敵我回合,每回合自由選擇角色先后行動順序。
每回合一個角色可以做兩件事——(移動+行為)
其中行為又可以細分為攻擊、技能、休息、使用物品(可以給自己或身邊的人使用)
?
2、炎龍騎士團
也分敵我回合,每回合玩家自由選擇角色先后行動順序。
還是一樣,決策=移動+行為
行為細分為攻擊、休息、魔法、物品(可以給自己或身邊的人使用)
和曹操傳不一樣的地方是移動后不可以使用魔法(必須本回合停留原地才可以使用魔法)
?
3、金庸群俠傳
無敵我回合,每回合按照角色的身法決定先后行動順序。
決策=移動+行為
行為細分為攻擊、用毒、解毒、醫療、物品、等待、休息……
其中等待可以將行動延后
?
……
不難發現,大部分戰棋類游戲都遵循這個規則:單個回合內角色決策 = 移動 + 行動。
AI框架設計思路
我們本文并不想針對某個特定的游戲模式來做設計,而是想教大家一個簡單的買QQ號通用AI如何搭建——
因為大家構思和想做的游戲系統設定各異,(比如上面幾款游戲,就分別有自己的各項特殊規則)
在此種情況下,我們其實可以搭建一個通用的計算模型,來“海納百川”,實現一個與具體游戲業務邏輯無關的AI框架。
我們不妨先把技術的東東放一邊,以一個玩家的角度來重現,每一個回合我們人類是如何思考的呢?
“我走到這里,下回合對方是不是可以走過來打到我?”
“我這一擊剛好可以把對方秒殺,這樣對方就不能反擊我了!”
“我移動速度比對方快,我先跑回去補給完,然后再回來打”
“調整一下陣型!用防御力高的人在這個關卡上卡位,弓箭手在后方射。”
總之,決策基準就是如何行動對自己是最有利的。
數學模型
我們可以給每一個行為決策,算出一個“得分”來,最后負分是有害、正分是有利。最終AI的結果就是選擇得分最高的行為。
初級AI的本質是一個貪心算法
貪心算法(又稱貪婪算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解。
貪心算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無后效性,即某個狀態以前的過程不會影響以后的狀態,只與當前狀態有關。
通俗來說,貪心算法就是只看眼前,不看之后的情況。
所以如果我們只看眼前一步,那么問題就變得很簡單:我如何下這一步棋獲得當前的最高收益?
搭建框架
這樣我們只需要將所有的行為結果都有一個評估的分數,然后遍歷所有的行為可能,取得分最高的評估結果來決策即可。
1、分數評估體系搭建
如何來做這個分數評估體系?——不同的游戲可以有各自的設定:舉個例子,比如如果某次行動擊中3個敵人,每個人評估扣血100,那么總共算得300分。比如某次給隊友加血,預估恢復技能能加150血,就算得150分……
所以某次行動的得分應該是本次行動所有影響的結果分數之和。(也可以根據具體需要,調整一些加權系數,后文說明)對自己有利則加分,對自己有害則減分(同理,對敵人有利減分,有害加分)
2、如何遍歷?
很簡單,戰棋類游戲無非移動+行動,把所有可能走的點全部走一遍,走到了那兒后把所有可能的行動全部做一遍。如果有些行動設計到施展位置,把所有的施展位置全部算一遍即可。
這里如果效率太低,可以盡情對搜索算法剪枝,此處不贅述。
3、擴展和調優
有了以上兩步,AI應該就可以跑起來了。我們接下來可以根據具體咱們游戲的設定來調優,讓AI更加聰明。
拿剛才的例子,比如擊中的3個敵人里有一個可以導致死亡(HP=0),那么額外再加200分(得分就是500了)。比如加血的隊友血越少得分越高(優先給瀕死的隊友加血),那么當AI可以選擇兩個隊友加血的時候,自然就會選擇那個更加瀕死的角色。
這里的設計就跟具體每個游戲相關,甚至更加復雜的話,還可以考慮地形、站位、AOE覆蓋范圍、加BUFF/DEBUFF、使用道具等各種情況。
這里還可以賦予不同的角色不同的使命,也只需要在最終的得分上體現即可(比如一個偏輸出的攻擊者,比一個偏防御的防御者在“減少敵方HP”的得分上有額外加權)
總之基于這個分數,可以做出一切有想象力的AI來,此處仁者見仁。
結語
我們基于這個思路開發了《金庸群俠傳X》和《江湖X》以及即將發布的《江湖X:漢家江湖》,基本AI是可用的(雖然由于游戲屬性有點復雜,AI也經常被玩家吐槽)。
很多戰斗變成了玩家的攔路虎
?
也會有一些由于AI給力被津津樂道的情況
最后祝大家開發愉快,有問題可以與我交流。
總結
以上是生活随笔為你收集整理的从0开始搭建一个战棋游戏的AI(初级教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏的数值系统的实现和演化
- 下一篇: 游戏编程中的数学——随机数字生成(RNG