用Python和Pygame寫遊戲-從入門到精通(實戰二:惡搞俄羅斯方塊3)

發表於2015-12-29

我們講解了俄羅斯方塊的各個巨集觀的部分,這次就是更細緻的程式設計了,不過程式碼量實在不小,如果完全貼出來估計會嚇退很多人,所以我打算這裡只貼出資料和方法名,至於方法裡的程式碼就省略了,一切有興趣的朋友,請參考最後放出來的原始檔。

這個是main呼叫的Tetris類,這個類實現了我們所看到的遊戲畫面,是整個俄羅斯方塊遊戲的核心程式碼。為了明晰,它還會呼叫shape類來實現當前的shape,下面會講:

這裡的東西基本都是和python語言本身相關的,pygame的內容並不多,所以就不多講了。看一下__init__的內容,瞭解了結構和資料,整個運作也就能明白了:

注意我們這裡update方法的實現有些不同,並不是等待一個事件就立刻相應。記得一開是說的左右移動的對應麼?按下去自然立刻移動,但如果按下了沒有釋放,那麼方塊就會持續移動,為了實現這一點,我們需要把event.get和get_pressed混合使用,程式碼如下:

稍微看一下消除動畫的實現,效果就是如果哪一行填滿了,就在把那行刪除前閃兩下:

這個類本身沒有操縱shape的能力,第一塊程式碼中move的部分,其實是簡單的呼叫了self.shape的方法。而shape則響應當前的按鍵,做各種動作。同時,shape還有繪製自身和下一個影象的能力。

框架如上所示,一個Shape類主要是有移動旋轉和標識自己的能力,當使用者按下按鍵時,Tetris會把這些按鍵資訊傳遞給Shape,然後它相應之後在返回到螢幕之上。

這樣的Tetris和Shape看起來有些複雜,不過想清楚了還是可以接受的,主要是因為我們得提供多種模式,所以分割的細一些容易繼承和發展。比如說,我們實現一種方塊一落下就消失的模式,之需要這樣做就可以了:

這次全是程式碼,不禁讓人感到索然。

遊戲玩起來很開心,開發嘛,說白了就是艱難而持久的戰鬥(個人開發還要加上“孤獨”這個因素),程式碼是絕對不可能缺少的。所以大家也就寬容一點,網上找個遊戲玩了幾下感覺不行就不要罵街了,多多鼓勵:)誰來做都不容易啊!

我們這次基本就把程式碼都實現了,下一次就有個完整的可以動作的東西了。

相關文章