Python编写超级玛丽竟然如此简单?不信你试试
得益于Python簡潔的語法和強大的擴展庫,使用Python編寫應用變得十分快捷方便。比如今天要介紹的一款經典游戲超級瑪麗的編寫,如果用其他語言可能要上千行代碼,而使用Python最少只需兩百多行就可完成。不信?那就讓我們一起開始吧。
我們使用的擴展庫是Pygame Zero(簡稱Pgzero)。該庫是一個基于Pygame的游戲編程框架。它可以更容易地編輯游戲,無需模板、不用編寫事件循環,也無需學習復雜的Pygame API,而且支持樹莓派。
安裝: pip install pgzero
建立游戲場景
建立游戲窗口只需兩行代碼:
import pgzrun pgzrun.go()在Python自帶的IDLE編輯器中輸入上述代碼,運行便可以看到一個游戲窗口
如果想到調整窗口大小也很簡單,只需再加入兩行代碼:
import pgzrun HEIGHT=640 WIDTH=1024 pgzrun.go()現在我們想為窗口設置一個背景顏色,可以在Pgzero提供的draw()函數中編寫代碼:
def draw():screen.fill((148, 146, 255))上述代碼用RGB顏色值(148, 146, 255)為游戲窗口生成了一個背景色,并自動顯示出來,效果如下:
接下來定義一個文本文件,把游戲場景中各種物體的位置用字母記錄下來:
然后在程序中編寫代碼來讀取文件,在相應字符的位置處生成物體,并將生成的物體全部加入到列表objs中。
最后在draw()函數中加入顯示物體的代碼即可:
def draw():screen.fill((148, 146, 255))for obj in objs:obj.draw()場景的最終顯示效果如下:
創建游戲角色
現在輪到主角隆重登場了。Pgzero中生成一個游戲角色十分簡單,只需一行代碼即可:
mario=Actor("smario.png",(200,HEIGHT-120))Actor類是Pgzero提供的角色類,調用該類的構造方法并傳入角色圖片和位置便可生成一個角色對象,同時在draw()函數中顯示該角色即可。修改后的draw()函數如下:
def draw():screen.fill((148, 146, 255))for obj in objs:obj.draw()mario.draw()現在看看效果:
怎樣?是不是還原度很高呢!
現在我們想讓他動起來,比如按下空格鍵瑪麗能跳躍,那么怎么辦呢?首先可以為瑪麗對象設置一個屬性vy來表示垂直方向的速度值:
mario.vy=0然后使用Pgzero提供的鍵盤處理函數on_key_down(),在其中加入如下代碼:
def on_key_down(key):if key==keys.SPACE and mario.vy==0:mario.vy=-800該函數會自動檢測玩家的鍵盤按鍵事件,并將按鍵信息保存在key變量中。從代碼中可以看到,當玩家按下的是SPACE鍵(即空格鍵),那么瑪麗將獲得一個垂直向上的速度值。
此外還要在Pgzero提供的update()方法中編寫代碼:
def update(dt):uy=mario.vymario.vy=mario.vy+2000.0*dtmario.y=mario.y+(uy+mario.vy)*0.5*dtupdate()也是Pgzero提供的一個內置函數,用來按固定的頻率更新游戲邏輯,它和draw()一道構成了基本的游戲循環。上述代碼對瑪麗的速度值vy和坐標值y進行了精細的控制,以便真實模擬跳躍時的重力效果。
如此一來,當玩家按下空格鍵時,瑪麗便可以騰空而起,然后在重力作用下掉回到地面。對于瑪麗的左右移動控制也與此類似,詳情可以查閱源代碼,這里不再贅述。
場景與角色的交互
最后編寫代碼實現場景與角色的交互,這樣瑪麗便能站在地面上,而且可以頂磚塊、吃蘑菇、撿金幣、踩怪物等等。
以吃金幣為例,我們可以編寫如下代碼:
class Coin(Actor):def react(self):if mario.colliderect(self):sounds.coin.play()objs.remove(self)mario.points=mario.points+1我們首先定義了一個金幣類Coin,它繼承自Actor類。然后在其中定義了react()方法,該方法判斷瑪麗是否“吃”到了金幣,如果吃到則先播放一個音效,接著將金幣對象從objs列表中移除,最后為瑪麗增加一個游戲積分。
可以看到,Pgzero為我們提供了非常便捷的API來實現游戲基礎功能,比如判斷瑪麗是否吃到金幣,這實際上是個碰撞檢測問題,只需調用colliderect()方法即可,而不需要手動編制大量代碼。同時播放聲音也只用一行代碼就可搞定,足見Pgzero是多么的方便。
游戲場景中其他物體與瑪麗的交互與此類似,有興趣的朋友可自行參閱代碼。游戲最終運行效果如下:
?
源碼下載鏈接:阿里云盤分享
最后祝大家天天進步!!學習Python最重要的就是心態。我們在學習過程中必然會遇到很多難題,可能自己想破腦袋都無法解決。這都是正常的,千萬別急著否定自己,懷疑自己。如果大家在剛開始學習中遇到困難,想找一個python學習交流環境,可以 加入我們,領取學習資料,一起討論。?
總結
以上是生活随笔為你收集整理的Python编写超级玛丽竟然如此简单?不信你试试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AnnaAraslanova/FBNet
- 下一篇: QtMqtt安装