本系列是對入門書籍《編程:從入門到實踐》的筆記整理,屬于初級內容 。標題順序采用書中標題 。
本章主要學習如何使用編寫一個簡單的小飛機打外星人的游戲,由于本人對用寫游戲并不是特別感興趣,所以主要是看代碼的構建和一些編程規(guī)范 , 代碼會有所簡略 。
準備工作
標準庫中并沒有自帶模塊,所以需要自行安裝,可以在控制臺(下是cmd)上使用命令行安裝:pip。如果你是用的,也可以在設置中安裝:
點擊右邊的加號,在彈出的窗口中輸入,然后安裝即可 。
該項目中需要使用一些書中的圖片,這些圖片都可以在中下載到 。
游戲基本內容
首先需要新建一個項目,筆者取名為“” , 并在該項目的根目錄下新建一個文件夾,用于存放項目中用到的圖片 。在本節(jié)中,我們將先創(chuàng)建4個文件:
.py:游戲主程序
.py:游戲的配置文件
.py:存放游戲的控制函數,比如響應鼠標、鍵盤等
ship.py:飛船類
.py模塊:
該模塊經過重構后的代碼如下:
①代碼第1行導入模塊,它包含開發(fā)游戲所需的基本功能;
②代碼3到5行導入的是自行編寫且經過重構的模塊;
③第9行代碼執(zhí)行游戲的初始化工作,比如初始化游戲背景等;
④第10行實例化一個游戲配置類 , 用于配置游戲參數,該類的具體實現(xiàn)見本篇后面的內容;
⑤代碼第12-13行用于生成一個名為的顯示窗口,長寬從配置對象中讀出;.()返回的是一個,在中,是屏幕的一部分 , 用于顯示游戲元素,這里的表示的是整個游戲窗口 。我們激活游戲的循環(huán)后,每經過一次循環(huán)都將重繪這個 。
⑥代碼第20行的()函數用于響應游戲中發(fā)生的時間,比如鼠標,鍵盤 , 關閉窗口等 。
⑦代碼第21行用于更新飛船的信息,如飛船位置
⑧最后一行用于啟動游戲,即初始化游戲 , 并開始主循環(huán) 。
.py模塊
該文件主要是游戲的配置信息,存放游戲的各種參數 。
這里故意將飛船的速度設置為浮點數,也可以是整數 。在設置游戲元素的位置時有了游戲源碼怎么安裝,如果直接使用浮點數,則只會截取整數部分 。
ship.py模塊
該模塊描述了一個飛船類的基本內容:
①()中的self.屬性,代碼將self.rect.即飛船的中心x坐標轉換成浮點數,并將其存儲在self.中 。之所以轉換成浮點數,是因為在.py文件中,我們將飛船移動速度設置成了浮點數 。
②self.和self.標志,用于表示飛船是否正在移動,用于實現(xiàn)飛船在不松開按鍵下連續(xù)移動 。

文章插圖

文章插圖
③()方法,用于增減飛船的中心位置x坐標(因為飛船只能在底部移動,所以不用改y坐標),并防止飛船移動出游戲窗口 。
④重寫了()函數,用于繪制飛船
.py模塊
該模塊主要是集中處理游戲中發(fā)生的各種事件 。
①在中,用 , 表示方向按鍵,其實鍵盤上每個鍵在中都有所對于,以K_開頭 。()函數和()函數都是對下面的()的進一步簡化 , 這兩個函數的代碼均可以放在()中,但這樣代碼將會很臃腫,結構不清晰 。
②()函數用于監(jiān)聽游戲的事件,比如.QUIT,它表示游戲推出事件;.和.KEYUP分別表示鍵盤按下與松開事件 。本次大循環(huán)中(外層的while循環(huán))發(fā)生的所有事件都存儲在.event中,我們使用get()方法獲得這些事件 。
③在()函數中,我們使用的fill()方法填充窗體的背景色,調用()方法來在窗體中繪制飛船,最后,調用..flip()方法讓最近的繪制在窗體中可見 。
運行游戲
現(xiàn)在我們運行.py文件,我們將得到如下窗體:
目前功能還比較簡單 , 只能實現(xiàn)飛船的左右移動 。
添加射擊功能
為了添加射擊功能,需要先添加一個子彈類 。
.py
首先我們需要導入模塊以及其中的類(直譯的話叫做“精靈類”,然而這名字叫的真的很尷尬) , 它可以讓我們在后面方便批量處理相同類型的同一操作,子彈類繼承自類 。該子彈類并沒有使用圖片,而是直接在上繪制矩形用于表示子彈 。()方法用于更新子彈的位置 。.draw.rect()用于在上繪制子彈 。
修改.py
在該模塊中添加子彈類的參數:
修改.py
游戲中我們按空格鍵發(fā)射子彈,并發(fā)射子彈的過程單獨寫在一個函數()中 。為了響應空格鍵,需要修改()函數和()函數,前者只修改了參數,后者在判斷結構中添加了一個判斷 。有了子彈類,那我們還需要在中繪制子彈,所以還需要修改()函數 , 而子彈自身信息(比如子彈的移動)的修改則放在了一個新的函數()中 。
當子彈從窗口中消失時,它并沒有從內存中消失,如果對于已經從屏幕中消失的子彈不做處理的話,時間一長 , 子彈數一多,光子彈一項的內存占用就會越來越多(土豪請忽略),雖然只是線性增長,但作為一個合格的程序員,應該避免這種無謂的浪費 。
修改.py
最后,我們修改主程序有了游戲源碼怎么安裝 , 在其中添加一個.中的Group對象用于表示子彈集合,以及對該對象的操作代碼 。
運行新代碼
以下是運行截圖:
小結
自此,我們創(chuàng)建了一個能開火的小飛機,在下一篇文章中我們將向其中添加外星人 。
本篇中的代碼都是經過了重構后的代碼,但是,當我們自己在編程時,如果對某一框架還是小白,搞不清楚該如何組織代碼,那就把所有代碼都寫在一個或幾個文件里(雖然這種習慣很不好) , 也暫時不用考慮代碼結構之類的問題,因為你的任務是造東西,而不是寫漂亮代碼 , 用精巧結構 , 用別人沒看過的語法 。兩者能兼?zhèn)洚斎桓?,但每個人都有當小白的時期,有一定熟練度后,再來考慮代碼重構的問題 。
【Python學習之路11-武裝飛船】本文到此結束,希望對大家有所幫助 。
- python做可視化數據分析,究竟怎么樣?
- 小女孩背乘法口訣,哭著喊太難了,小低年級數學學習的點滴思考
- linux學習~巧用setup命令
- 我為什么不想學習?
- Linux系統(tǒng)虛擬機和云服務配置,快速搭建學習環(huán)境
- 孩子厭倦學習,打罵不是辦法,5招教你解決
- 云原生架構下的產品自動化發(fā)布、快速部署和持續(xù)交付實戰(zhàn)之路
- 一 學習語文有方法,我來指導你進步之系列:議論文寫作指導
- 2023最新版360度無死角Java學習路線
- 怎么快速學習輪滑
