用Python和Pygame寫遊戲從入門到精通(16)

發表於2015-12-16

經歷了長年的艱苦卓絕的披星戴月的慘絕人寰的跋山涉水,我們終於接近了AI之旅的尾聲(好吧,實際上我們這才是剛剛開始)。這一次真正展示一下這幾回辛勤工作的結果,最後的畫面會是這個樣子:

下面給出完整程式碼(注意需要gameobjects庫才可以執行,參考之前的向量篇):

這個程式的長度超過了以往任何一個,甚至可能比我們寫的加起來都要長一些。然而它可以展現給我們的也前所未有的驚喜。無數勤勞的小螞蟻在整個地圖上到處覓食,隨機出現的葉子一旦被螞蟻發現,就會搬回巢穴,而蜘蛛一旦出現在巢穴範圍之內,就會被螞蟻們群起而攻之,直到被驅逐出地圖範圍或者掛了,蜘蛛的屍體也會被帶入巢穴。

這個程式碼寫的不夠漂亮,沒有用太高階的語法,甚至都沒有註釋天哪……基本程式碼都在前面出現了,只是新引入了四個新的狀態,AntStateExploringAntStateSeekingAntStateDeliveringAntStateHunting,意義的話前面已經說明。比如說AntStateExploring,繼承了基本的Stat,這個狀態的動作平時就是讓螞蟻以一個隨機的速度走向螢幕隨機一個點,在此過程中,check_conditions會不斷檢查周圍的環境,發現了樹葉或蜘蛛都會採取相應的措施(進入另外一個狀態)。

遊戲設計藝術中,建立一個漂亮的AI是非常有挑戰性也非常有趣的事情。好的AI能讓玩家沉浸其中,而糟糕的AI則讓人感到非常乏味(有的時候AI中的一些bug被當作祕籍使用,也挺有意思的,不過如果到處是“祕籍”,可就慘了)。而且,AI是否足夠聰明有時候並不與程式碼量直接相關,看看我們這個演示,感覺上去螞蟻會合作攻擊蜘蛛,而實際上它們都是獨立行動的,不過就結果而言螞蟻們看起來都很聰明。

對AI而已,狀態機是個很有力的工具(當然狀態機不僅僅用在這裡),因為狀態機可以把複雜的系統分割成幾個容易實現的小段。而這每一小部分都是對一些簡單思考或動作的模擬,即便不是那麼容易轉化為程式碼,也很容易模擬。在遊戲中,我們只需要模擬就足夠了。

我們這幾次講述的東西相當有用,儘管不是那麼直觀,但對於遊戲設計至關重要,而此次的蟻巢演示,也給我們揭示了AI系統的種種,至少這個系統式可以運作的了,不錯不錯~ 參天大樹也是從小樹苗開始的。

本次使用的影象資源:

葉子:leaf.png
螞蟻:ant.png
蜘蛛:spider.png

下一次,我們開始更加激動人心的專案,3D影象!

相關文章