日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python编写超级玛丽竟然如此简单?不信你试试

發布時間:2023/12/20 python 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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*dt

update()也是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编写超级玛丽竟然如此简单?不信你试试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。