當球隊進攻時,對於有球隊員來說,它(暫且用它咯)在每乙個瞬間都會有乙個行為指導,也就是下一步行為:是向某方向帶球?還是以某種方式傳球給隊友中的某一人?或者即是立即射門。這個指導行為從何邇來?又如何根據狀況得以改變?不管情況怎樣變化,使球員能在任何時刻都有一種較為合理的下一步行為為備,這樣大概便可以模擬出踢足球的ai了。
其實足球ai模擬的關鍵就在於會讓球員能較為聰明合理地分析球場上瞬息萬變的賽況,並根據這個判斷得出乙個更為聰明合理的下一步行為。能力好的球員會不斷的分析,從而迅速地調整它的行為而得以使比賽向更為有利的趨向發展,這個過程不斷地持續,一場計算機ai模擬的高水平足球賽便可得以實現了。
第乙個難度便是如何教會讓ai球員判斷場上的情況,如何產生ai分析,如何得出結論並生成下一步行為。
第一步是視覺判斷:
帶球球員能看到隊友及對方的行為,從離它近的到離它遠,無論在它前面或是在它側面甚至是在它身後的,優秀的球員都能夠感知。也就是模擬使ai球員「視野開闊」。這些資訊可以很方便地從sim比賽中球員的座標,速度,動作資料得來,模擬起來並不算太難。
第二步是賽況分析:
也就是說使球員在視覺資訊採集後產生乙個意圖,使比賽能更為向我方有利地發展。(比如:隊友位置都不太好,無法穿球,ai使它得出了繼續運球的意圖;當它離球門距離不太遠,有一定的射門空擋,ai便使它得出帶球射門的意圖;當有隊友的跑位出現空擋時,ai便使它產生了向其分球射門的意圖;當兩側隊友跟進到位時,ai便使它產生向其穿球打下底穿中的意圖)
這些都是第一步行為意圖,是戰術的雛形。
從這些極其離散的視覺採集資訊(就是那些敵我雙方球員座標,速度,行為甚至能力)而產生乙個戰術意圖看起來是非常玄妙而神秘的。殊不知,聰明的人類卻能夠從這些離散而無規的資料中能提煉出非常多隱藏在內的有用的比賽資訊!而ai模擬的任務就要讓com球員學會找出這些隱藏的資訊!
因此可以將導向式思考(利用經驗規則導向)與推論式思考(用極大極小法推導出最佳行為)兩種方式合理巧妙地結合起來。
另乙個重要的因素便是將大量隱藏資訊進行「過濾」,也就是說,ai需要找出最有價值(或者講是合適)的隱藏資訊,這裡有隨機因素,也有權排序。
最後一步便是根據所產生戰術意圖而形成乙個下一步行為:
這很像是乙個細節處理,因為下一步行為行為是隨時在頻繁地改變,而戰術意圖相對來說是較為穩定的。(畢竟近處看得多,遠處觀的少)實現下一步行為便是這個sim足球的「動作引擎元素」,合理的動作元素可以使模擬比賽的可視性更為真實,更重要的是它能夠與ai相互配合,這兩者可以說是相輔相成缺一不可的(呵呵~哲學課考試我用的最多就是這句話:)fifa的缺陷便在於它的動作引擎元素沒有we系列合理真實,這便直接導致了它的真實性不如we,ai做的再棒也無濟於事。
總結:ai球員通過觀察賽況,找出離散資料的隱藏資訊,得出了乙個戰術意圖,做出了乙個動作行為,這便就似完成了乙個turn。剩下的,sidmeier有乙個很有用的經驗思路:「我先教它如何玩乙個回合開始。然後教它如何玩兩個回合,再後來就該考慮教它如何玩10個回合了。」當然,sim足球的ai也許會更複雜,因為我們只考慮了有球球員ai模擬的乙個例子,但是我相信這3個部件是適用與足球場上每乙個情況的,要做的只是更深入的分析,體會,感悟。
談談網路遊戲中的延遲解決方案
我們平常玩的很多網路遊戲,比如英雄聯盟 王者榮耀 pubg等,你感覺到卡頓往往不是因為你的網速問題,而是因為網路延時導致的,比如說lol美服的遊戲伺服器在美國,而你在中國的華中地區玩著美服lol,那麼你的延遲可能會在300ms左右,因為網路請求從美國到中國華中地區需要經過很多的路由,這裡面會消耗掉很...
遊戲中的指令碼
現在遊戲裡流行的指令碼有python 和lua 例如魔獸世界就是用lua指令碼來驅動邏輯的。我們為什麼用指令碼,而不是純用c 呢?當然,這與團隊協作以及工作效率有關。c 編譯速度不佳,當乙個專案達到比較龐大的乙個規模時,編譯的時間往往會讓人憤怒了。於是,python出現了。一些重要的演算法實現,圖形...
遊戲中的音效
1.遊戲中的即時音效 soundpool類 public int load context context,int resid,int priority 架子啊音訊檔案 context 該引數為應用程式的上下文 resid 該引數為要載入的音效資源的id priority 優先順序 例項 初始化聲音...