Pygame實(shí)現(xiàn)游戲最小系統(tǒng)功能詳解
前言
“我有一個(gè)夢(mèng)想,那就是有生之年做出一款屬于自己的游戲。”
不知道屏幕前的你是否曾經(jīng)有和我一樣的想法,總覺得市面上的游戲不完全符合你的胃口,想要自己開發(fā)出一款屬于自己的獨(dú)有的游戲。
此時(shí),如果你正好學(xué)了Python,那么你的機(jī)會(huì)來了,python也是可以做游戲的!本篇文章將介紹Python一個(gè)非常有趣又功能強(qiáng)大庫(kù),它所擁有的模塊幾乎包含了2D游戲常用功能的實(shí)現(xiàn),讓你用Python也能開發(fā)出一款小型的2d游戲,它的名字就是—— pygame。
一、什么是pygame
Pygame是一個(gè)專門用來開發(fā)游戲的 Python 模塊,主要為開發(fā)、設(shè)計(jì) 2D 電子游戲而生,具有免費(fèi)、開源,支持多種操作系統(tǒng),具有良好的跨平臺(tái)性等優(yōu)點(diǎn)。
Pygame它提供了諸多操作模塊,比如圖像模塊(image)、聲音模塊(mixer)、輸入/輸出(鼠標(biāo)、鍵盤、顯示屏)模塊等。簡(jiǎn)單來說,如果你使用pygame,理論上可以開發(fā)設(shè)計(jì)市面上所有的2d類型游戲(僅僅是理論上)。
但是,實(shí)際上,我學(xué)習(xí)pygame并不是說要用它來開發(fā)一款完美的游戲,pygame太過于底層,許多功能都要自己來封裝實(shí)現(xiàn)。也許你用pygame開發(fā)一款超級(jí)瑪麗時(shí)間,別人都能學(xué)會(huì)C#用unity開發(fā)和平精英了(夸張)。
那么既然如此,為什么還要來學(xué)它?
1.1 學(xué)習(xí)pygame的用處
Pygame適合小型2d游戲開發(fā),比如于飛機(jī)大戰(zhàn)、貪吃蛇、掃雷等,游戲越大,開發(fā)越困難。所以,學(xué)習(xí)pygame你可以復(fù)刻一款小時(shí)候玩的經(jīng)典游戲,比如超級(jí)瑪麗,魂斗羅之類的,然后更改一些游戲角色及內(nèi)容,哄哄家里的弟弟妹妹(就是裝X唄)。
更重要的一點(diǎn),我希望你能夠通過學(xué)習(xí)pygame深入理解python面向?qū)ο蟮乃枷?,python面向?qū)ο笫沁@門語言的精髓之一。掌握python面向?qū)ο蟮乃枷?,也是你成功跨過python基礎(chǔ)的標(biāo)志之一,對(duì)于你后面選擇的學(xué)習(xí)方向(web開發(fā),自動(dòng)化,爬蟲等等)的入門非常有幫助。有了python面向?qū)ο蟮睦喂袒A(chǔ),學(xué)習(xí)python高級(jí)的東西你會(huì)覺得也就那么回事,有一法破萬法的效果。
當(dāng)然,值得一提的是如果你真的對(duì)游戲開發(fā)感興趣,又有python基礎(chǔ),那么通過pygame你可以初步了解關(guān)于游戲開發(fā)的一些基礎(chǔ)知識(shí),等到用pygame開發(fā)一兩個(gè)小游戲,再來思考一下自己適不適合游戲開發(fā),畢竟游戲開發(fā)的精髓都是相通的,那些高級(jí)游戲引擎只是把一些基礎(chǔ)功能封裝好了讓你用,pygame只是需要你用自己的手去打造自己的工具箱。
1.2 pygame里的游戲世界
在講解具體代碼之前,還是要科普一些pygame里游戲的基礎(chǔ)知識(shí)。
你印象中的2d游戲由哪些成分構(gòu)成?首先要有一個(gè)窗口,它規(guī)定游戲畫面占你的屏幕的尺寸大小,也可以設(shè)計(jì)游戲名字,背景等等。其次就是各種場(chǎng)景,一個(gè)游戲可以看做是由許多個(gè)場(chǎng)景組成的,比如超級(jí)瑪麗的開始菜單場(chǎng)景,第一關(guān),第二關(guān)等等。場(chǎng)景要有內(nèi)容,比如背景,主角,敵人,子彈,物品(如超級(jí)瑪麗的磚塊等等)。
在后面就是主角與敵人或者其它對(duì)象的各種交互動(dòng)作,如白色瑪麗會(huì)發(fā)射子彈,踩到敵人壓扁對(duì)方等等。最后則是貫穿場(chǎng)景的各種音效,聲音等等。
二、pygame簡(jiǎn)單講解
本篇文章不打算太深入pygame,旨在增加你對(duì)python的理解,以及吸引你對(duì)pygame游戲開發(fā)的一點(diǎn)點(diǎn)興趣,或者你之前學(xué)過pygame但忘記了,希望本篇文章可以幫到你。如果你想要系統(tǒng)學(xué)習(xí)pygame,建議先看B站免費(fèi)教程,然后自己通過官網(wǎng)深入學(xué)pygame。
廢話不多說,我將通過自己初學(xué)時(shí)學(xué)的一個(gè)例子來讓你實(shí)現(xiàn)pygame的初步入門。
2.1 安裝pygame
pip install pygame
一直都是通過pycharm安裝python第三方庫(kù),簡(jiǎn)直不要太爽.
2.2 游戲最小系統(tǒng)
什么是游戲最小系統(tǒng)(不知道有沒有這個(gè)名詞)?可以理解為游戲能夠運(yùn)行不報(bào)錯(cuò)的最小代碼。
# 導(dǎo)入庫(kù) import pygame # 初始化操作,游戲開始之前,運(yùn)行該代碼進(jìn)行初始化 pygame.init() # 創(chuàng)建游戲窗口,注意設(shè)置了window這個(gè)變量 window = pygame.display.set_mode((600,400)) # 設(shè)置游戲標(biāo)題 pygame.display.set_caption('游戲最小系統(tǒng)') # 給窗口設(shè)置背景顏色 window.fill((255,255,255))
運(yùn)行上面代碼你會(huì)發(fā)現(xiàn)左上角出現(xiàn)一個(gè)窗口,然后一閃即過,這是正常的。這里就要思考python代碼的運(yùn)行,通過執(zhí)行上述代碼,你創(chuàng)建了一個(gè)黑色窗口,但是當(dāng)代碼執(zhí)行完會(huì)發(fā)生什么,當(dāng)然是python自動(dòng)退出了。所以你要使用一定的方法不讓代碼結(jié)束運(yùn)行,這就要添加“死循環(huán)”了,這很好理解,while true 會(huì)一遍又一遍的運(yùn)行里面的代碼而不退出。
# 保持游戲運(yùn)行狀態(tài)(游戲循環(huán)) while True: # 檢測(cè)事件發(fā)生,先把事件全部拿過來,再看發(fā)生的是哪一件事。 for event in pygame.event.get(): # 檢測(cè)關(guān)閉按鈕被點(diǎn)擊的事件 if event.type == pygame.QUIT: # 如果按下屏幕里的X號(hào)就會(huì)退出 exit()
看到循環(huán)里面添加的for循環(huán)及if語句嗎?它們有什么作用。由于循環(huán)會(huì)一直執(zhí)行,里面的代碼會(huì)一遍又一遍進(jìn)行檢測(cè),所以在里面就可以有很多操作了。這就是之前提到的主角與敵人或其它物品的交互部分,代碼會(huì)一直檢測(cè)發(fā)生了什么事情,并作出反應(yīng),也包括開發(fā)游戲常說的碰撞檢測(cè)。
所以結(jié)合上面,最小系統(tǒng)就出來了,它只是一個(gè)黑屏,但是它是游戲的基礎(chǔ)框架。
import pygame # 初始化操作 pygame.init() # 創(chuàng)建游戲窗口 window = pygame.display.set_mode((600,400)) # 設(shè)置游戲標(biāo)題 pygame.display.set_caption('游戲最小系統(tǒng)') # 設(shè)置背景顏色 window.fill((255,255,255)) # ========游戲開始頁面靜態(tài)效果========== # 保持游戲運(yùn)行狀態(tài)(游戲循環(huán)) while True: # ===========游戲幀的刷新=========== # 檢測(cè)事件 for event in pygame.event.get(): # 檢測(cè)關(guān)閉按鈕被點(diǎn)擊的事件 if event.type == pygame.QUIT: # 退出 exit()
到此這篇關(guān)于Pygame實(shí)現(xiàn)游戲最小系統(tǒng)功能詳解的文章就介紹到這了,更多相關(guān)Pygame游戲系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mac使用python識(shí)別圖形驗(yàn)證碼功能
這篇文章主要介紹了mac使用python識(shí)別圖形驗(yàn)證碼功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Python數(shù)據(jù)處理pandas讀寫操作IO工具CSV解析
這篇文章主要為大家介紹了Python?pandas數(shù)據(jù)讀寫操作IO工具之CSV使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Pytorch卷積神經(jīng)網(wǎng)絡(luò)resent網(wǎng)絡(luò)實(shí)踐
這篇文章主要為大家介紹了Pytorch卷積神經(jīng)網(wǎng)絡(luò)resent網(wǎng)絡(luò)實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python代碼打印100-999之間的回文數(shù)示例
今天小編就為大家分享一篇python代碼打印100-999之間的回文數(shù)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11pyqt4教程之實(shí)現(xiàn)windows窗口小示例分享
這篇文章主要介紹了pyqt4實(shí)現(xiàn)windows窗口小示例,需要的朋友可以參考下2014-03-03Python標(biāo)準(zhǔn)庫(kù)json模塊和pickle模塊使用詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)json模塊和pickle模塊使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法
今天小編就為大家分享一篇將Pytorch模型從CPU轉(zhuǎn)換成GPU的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08python接入GoogleAuth的實(shí)現(xiàn)
經(jīng)常會(huì)用到GoogleAuth作為二次驗(yàn)證碼,本文主要介紹了python接入GoogleAuth的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08