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

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