Python 竟能開發如此精美的俄羅斯方塊!

 

 

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

歡迎點擊左上角關注小編,除了分享技術文章之外還有很多福利,私信學習資料可以領取包括不限於Python實戰演練、PDF電子文檔、面試集錦、學習資料等。

 

最近想找一些Python相關的遊戲開發例子,正好在itch.io上閒逛看到這個俄羅斯方塊項目,瞬間被驚豔到了。

1.遊戲介紹

下面就給大家介紹一下這個用Python寫的俄羅斯方塊具體功能。它一共有七個遊戲模式:

1. 單人模式
2. 普通雙人模式
3. 鏡像雙人模式(即掉落方塊都一樣)
4. 雙人加速模式(每消去一行都會給對方加速)
5. 雙人交換控制模式(一次控制自己的方塊,一次控制對方的)
6. 雙人平衡模式(會改變對方的容量)
7. 雙人單容器模式

沒錯,是不是被這豐富的遊戲模式震驚到了?而且這款遊戲的界面設計也是相當簡潔舒服(而且玩這樣的Python開源遊戲,你永遠不會被廣告氣到):

 

不僅如此,除了wasd和上下左右鍵,它還支持用遊戲手柄(僅一個)進行遊戲,並且能切換兩個玩家的按鍵設置:

 

雙人模式類似如下, 非常適合小情侶之間消耗時光哦(如果你們都喜歡玩俄羅斯方塊的話)

 

尤其是雙人協作模式,兩個人一起解決問題也是增進感情的好方法:

 

2.源碼剖析

當然,我們首要目的還是學習這款遊戲的源代碼,下面就給大家介紹一些這款遊戲的部分核心代碼。下載該開源項目後,你會發現它的py文件分佈如下:

│ base.py
│ game_modes.py
│ main.py
│ run_to_release.py
│ tetris.py
│ ... ....
├─assets
│ ... ...

└─screens
... ...

其中,main.py是程序的入口點,首先看看模塊引入,sys的引入是當然的,遊戲結束的時候需要調用


 
sys.exit()

使得Python程序正常退出。這個遊戲的引擎使用了pygame,是一個比較老的基於Python的2D遊戲引擎,不過也是因爲存在時間長,它已經成爲一個很成熟且易上手的2D遊戲開發庫 。

 

 

作者自己寫了兩個模塊,一個是base,裏面有畫布配置、按鍵配置、玩家配置等等一系列遊戲的基礎設置。而 game_modes 則是七種遊戲模式的邏輯所在模塊,裏頭還引用了tetris.py,這個模塊定義了整個俄羅斯方塊旋轉的方法及其數據結構。

不過由於時間關係,我們重點看看base裏的主循環main_loop:

 

 

pygame.time.Clock() 用於配置遊戲的幀數,Clock.tick(frameate) 代表每秒framerate幀運行,也就是說,每秒不會執行超過 framerate 次循環 。這個參數的值,我們可以在主函數裏看到是600. 也就是這個循環每秒不會超過600次。

pygame.event.get() 是pygame遊戲引擎的事件處理器,它用於處理所有的事件,好像打開大門讓所有的人進入,然後我們可以根據事件不同的屬性做相應的操作,如 event.type == pgl.KEYDOWN 表示鍵盤被按下時,執行條件中的語句:


 
pressed_keys.add(event.key)

便將其加入到pressed_keys集合中,yield返回生成器,也就是說只要程序不被終止,這個函數就會不斷地返回四個值: events, time_passed, pressed_keys 或 {(0, 0)}。events就是用戶觸發的事件,time_passed就是這些事件的時長,pressed_keys即用戶按下的鍵。

這樣就完成了一次用戶事件的傳遞,然後再又後端對用戶的事件進行處理,展示在遊戲當中。當然,更復雜的還在後面,這裏只是一個簡單的事件處理,當然也是最重要的事件處理部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章