author:expter
date 2010/06/30
介紹: 世界杯現在如此的備受矚目和關注,本文介紹如何實現一個基于足球AI的實現,而作為程序員我們關注的不是目標用其贏得世界杯,而是創造一個把球踢好的智能體,加上最近上班輕松,晚上較閑,加上去年實現的一個AI模型與平時寫的游戲智能算法,想組織起來完成一個足球模擬玩玩。
本文會首先介紹一種基于AI仿真機的實現流程圖,后面我將會用大量的篇幅詳細介紹各個實現細節,與具體足球戰術,此足球AI主要是主動攻擊性AI,所以還需要具體完善加強防御性的AI,所以具體代碼現在將不會現在放出。以后實現完整過后會完整公開,現在主要設計描述如下。
足球的游戲規則不是很復雜,就是2個球隊,然后每個球隊一個守門員與幾名球員,目的就是踢進對方的球門。簡單的足球是沒有傻子的,也就沒有犯規,越位,頭球,點球以及烏龍球。以后可能會增加上面幾種。
一個簡單的游戲的具體環境如下:
1.一個足球場(FootBallPitch)
2.一個足球 FootBall
3.二個球門 Goal
4.二個球隊 FootBallTeam
5.場上12名足球隊員(每隊6名,期中5名為球員2名后衛3名前鋒,還有1名守門員)
6.球員 FootBaller 守門員 GoalKeeper
然后只要理清上面的描述然后把具體的實現封裝到每個類中,就實現了1個簡單的足球仿真模擬,實現上面的功能代碼還是簡單,但是如何組織強大攻擊性強大,防御性強的AI還是挺復雜的。
下面將給出具體UML實現類圖:

由于是基于智能體的足球AI所以還是借鑒了FSM模型,我們可以把每個Player處于不同的狀態進行不同的操作,具體把操作類型和事件處理都放在具體的狀態中。
基于球場上運球的FootBaller有下列狀態ChaseBall 追球狀態,Dribble運球 Gohome 歸位 KickBall 踢球 ReceviveBall傳球
基于守門員GoalKeeper有InterceptBall 攔截 PutBallBackInPlay發球.
這里為了區分隊員是前鋒還是后衛,我們給隊員增加一個行為Behaviors,讓其根據自己的行為做相應的事情.。
其中所有的圖像處理都是用的GDI的繪制,程序采用的Win32編寫方式。
上面的設計基本是現在程序的設計方案和流程圖。
后期完善部分:
1.引入基于事件響應,FootBaller 可以通知同隊FootBaller 的接收響應的消息處理,比如A發現B的位置很好,A可以通知B我要傳球到一個坐標點。
2.加強防御和攻擊AI。
3.完成具體方案后,公布所有的方案設計和具體算法,后期引入腳本機制,通過外部編寫腳本實現不同隊伍AI模擬。