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

發表於2015-12-15

在繼續我們的AI之旅前,分享一個在煎蛋上看到的有趣新聞,能通過讀說明書來學習的AI,這個世界真是變得越來越不可琢磨啦!機器人很快就要超越我們了……

因為這一次是接著上面的內容的,所以請不要跳過直接看這裡。

哭!!!寫完了上傳出錯,丟失啊,重傷重寫~~~~~~~~~~~

螞蟻例項類

在我們正式建造大腦之前,我們得先做一個螞蟻類出來,就是下面的這個,從GameEntity繼承而來:

這個Ant類先呼叫了父類的 __init__ ,都是Python基礎不多說了。下面的程式碼就是一些狀態機程式碼了,對了還有一個carry_image變數,保持了現在螞蟻正在搬運物體的影象,或許是一片樹葉,或許是一隻死蜘蛛。這裡我們寫了一個加強的render函式,因為我們可能還需要畫一下搬的東西。

建造大腦

我們給每一隻螞蟻賦予四個狀態,這樣才能足夠建造我們的螞蟻的狀態機。在建造狀態機之前,我們得先把這些狀態的詳細資訊列出來。

狀態 動作
探索(Exploring) 隨機的走向一個點
蒐集(Seeking) 向一篇樹葉前進
搬運(Dellivering) 搬運一個什麼回去
狩獵(Hunting) 攻擊一隻蜘蛛

我們也需要定義一下各個狀態之間的連結,或者可以叫轉移條件。這裡舉兩個例子(實際上不止):

條件 轉移狀態
發現樹葉 蒐集
有蜘蛛攻擊 狩獵

我們還是最終畫一張圖來表示整個狀態機:

高水平的你也許可以看著上面的圖寫狀態機了,不過為了方便先建立一個State類,來儲存一個狀態。很簡單,只是一個框子,實際上什麼都不做:

然後可以建立一個狀態機類來管理這些狀態,這個狀態機可是整個程式碼的核心類。

然後就可以通過繼承State建立一系列的實際狀態了,這些狀態傳遞給StateMachine保留並執行。StateMachine類的think方法是檢查當前有效狀態並執行其動作的,最後還可能會呼叫set_state來進入下一個狀態。

我們應該根據上面的四個狀態表格建立狀態了,有鑑於本次的程式碼已經很多了,需要好好消化…… 下一次將會一次性給出完整程式碼,到時候就能看到一個豐富多彩的昆蟲世界了!盡請期待~

相關文章