發(fā)布時(shí)間:2023-11-27 17:46:40 瀏覽量:114次
安裝pygame
本人電腦是windows 10、python3.6,pygame下載地址:
https://pypi.python.org/pypi/Pygame/1.9.3
請(qǐng)自行下載對(duì)應(yīng)python版本的pygame
運(yùn)行以下命令
創(chuàng)建Pygame窗口及響應(yīng)用戶輸入
新建一個(gè)文件夾alien_invasion,并在文件夾中新建alien_invasion.py文件,輸入如下代碼。
運(yùn)行上述代碼,我們可以得到一個(gè)灰色界面的窗口:
創(chuàng)建設(shè)置類
為了在寫游戲的過程中能便捷地創(chuàng)建一些新功能,下面額外編寫一個(gè)settings模塊,其中包含一個(gè)Settings類,用于將所有設(shè)置存儲(chǔ)在一個(gè)地方。
這樣在以后項(xiàng)目增大時(shí)修改游戲的外觀就更加容易。
我們首先將alien_invasion.py中的顯示屏大小及顯示屏顏色進(jìn)行修改。
首先在alien_invasion文件夾下新建python文件settings.py,并向其中添加如下代碼:
然后再alien_invasion.py中導(dǎo)入Settings類,并使用相關(guān)設(shè)置,修改如下:
添加飛船圖像
接下來,我們需要將飛船加入游戲中。為了在屏幕上繪制玩家的飛船,我們將加載一幅圖像,再使用Pygame()方法blit()繪制它。
在游戲中幾乎可以使用各種類型的圖像文件,但是使用位圖(.bmp)文件最為簡單,這是因?yàn)镻ygame默認(rèn)加載位圖。
雖然其他類型的圖像也能加載,但是需要安裝額外的庫。
我們推薦去免費(fèi)的圖片素材網(wǎng)站上去找圖像:https://pixabay.com/
我們?cè)谥黜?xiàng)目文件夾(alien_invasion)中新建一個(gè)文件夾叫images,將如下bmp圖片放入其中。
接下來,我們創(chuàng)建飛船類ship.py:
重構(gòu):模塊game_functions
在大型項(xiàng)目中,經(jīng)常需要在添加新代碼前重構(gòu)既有代碼。重構(gòu)的目的是為了簡化代碼的結(jié)構(gòu),使其更加容易擴(kuò)展。
我們將實(shí)現(xiàn)一個(gè)game_functions模塊,它將存儲(chǔ)大量讓游戲Alien invasion運(yùn)行的函數(shù)。通過創(chuàng)建模塊game_functions,可避免alien_invasion.py太長,使其邏輯更容易理解。
函數(shù)check_events()
首先我們將管理事件的代碼移到一個(gè)名為check_events()的函數(shù)中,目的是為了隔離事件循環(huán)
然后我們修改alien_invasion.py代碼,導(dǎo)入game_functions模塊,并將事件循環(huán)替換成對(duì)函數(shù)check_events()的調(diào)用:
函數(shù)update_screen()
將更新屏幕的代碼移到一個(gè)名為update_screen()函數(shù)中,并將這個(gè)函數(shù)放在模塊game_functions中:
其中alien_invasion修改如下:
從上面一套流程走下來,我們發(fā)現(xiàn):在實(shí)際的開發(fā)過程中,我們一開始將代碼編寫得盡可能的簡單,并在項(xiàng)目越來越復(fù)雜時(shí)進(jìn)行重構(gòu)。接下來我們開始處理游戲的動(dòng)態(tài)方面。
駕駛飛船
這里我們要實(shí)現(xiàn)的就是使玩家通過左右箭頭鍵來控制飛船的左移與右移。
響應(yīng)按鍵
因?yàn)樵趐ygame中,每次按鍵都被注冊(cè)為KEYDOWN事件,在check_events()中,我們通過event.type檢測到KEYDOWN事件后還需進(jìn)一步判斷是哪個(gè)按鍵。代碼如下:
允許不斷移動(dòng)
玩家按住右箭頭不動(dòng)時(shí),我們希望飛船能不斷地移動(dòng),直到玩家松開為止。這里我們通過KETUO事件來判斷。因此我們?cè)O(shè)置一個(gè)標(biāo)志位moving_right來實(shí)現(xiàn)持續(xù)移動(dòng)。原理如下:
飛船不動(dòng)時(shí),標(biāo)志moving_right將為false。玩家按下右箭頭時(shí),我們將這個(gè)標(biāo)志設(shè)置為True;玩家松開時(shí),我們將標(biāo)志重新設(shè)置成False。
這個(gè)移動(dòng)屬性是飛船屬性的一種,我們用ship類來控制,因此我們給這個(gè)類增加一個(gè)屬性名稱叫,moving_right以及一個(gè)update()方法來檢測標(biāo)志moving_right的狀態(tài)。
ship
game_functions
最后在alien_invasion中調(diào)用update()方法
左右移動(dòng)
前面我們實(shí)現(xiàn)了向右移動(dòng),接下來實(shí)現(xiàn)向左移動(dòng),邏輯類似,代碼就不貼了。
調(diào)整飛船的速度
當(dāng)前,每次執(zhí)行while循環(huán)時(shí),飛船最多移動(dòng)一個(gè)像素,我們可以在Settings中添加ship_speed_factor,用于控制飛船的速度。我們將根據(jù)這個(gè)屬性決定飛船每次循環(huán)時(shí)最多移動(dòng)多少距離。
Settings:
Ship:
限制飛船的活動(dòng)范圍
如果玩家按住箭頭的時(shí)間過長,飛船就會(huì)消失,那么如何使飛船抵達(dá)屏幕邊緣時(shí)停止移動(dòng)?這里我們只需要修改Ship類中的update方法,增加一個(gè)邏輯判斷。
重構(gòu)
這里我們主要講check_events()函數(shù)進(jìn)行重構(gòu),將其中部分代碼分成兩部分,一部分處理KEYDOWN事件,一部分處理KEYUP事件。
game_functions:
射擊
接下來添加射擊功能,使玩家按空格鍵時(shí)發(fā)射子彈,子彈將在屏幕中向上穿行,抵達(dá)屏幕后消失。
添加子彈設(shè)置
在Settings類中增加一些子彈的屬性,這里我們創(chuàng)建一個(gè)寬3像素,高15像素的深灰色子彈。子彈的速度比飛船稍低。
創(chuàng)建Bullet類
將子彈存儲(chǔ)到group中
前面定義了Bullet類和必要的設(shè)置后,就可以編寫代碼了,在玩家每次按空格鍵時(shí)都會(huì)發(fā)射一發(fā)子彈。
首先,我們?cè)赼lien_invasion中創(chuàng)建一個(gè)group,用于存儲(chǔ)所有的有效子彈。
開火
這里我們修改check_keydown_events()函數(shù),來監(jiān)聽玩家按下空格鍵的事件。這里還需要修改update_screen()函數(shù),確保屏幕每次更新時(shí),都能重繪每一個(gè)子彈。
我們來看下效果:
刪除消失的子彈
在alien_invasion中刪除消失的子彈。
限制子彈數(shù)量
為了鼓勵(lì)玩家有目標(biāo)的射擊,我們規(guī)定屏幕上只能同時(shí)存在3顆子彈,我們只需要在每次創(chuàng)建子彈前檢查未消失的子彈數(shù)目是否小于3即可。
創(chuàng)建update_bullets()函數(shù)
為了使alien_invasion中代碼更加簡單,我們將檢查子彈管理的代碼,移到game_functions模塊中:
創(chuàng)建fire_bullet()函數(shù)
這里我們將發(fā)射子彈的代碼移到一個(gè)獨(dú)立的函數(shù)中:
添加外星人,并檢測碰撞
在我們完成新的任務(wù)之前,我們先給游戲添加一個(gè)結(jié)束游戲的快捷鍵Q:
創(chuàng)建第一個(gè)外星人
這里和創(chuàng)建飛船的方法一樣
創(chuàng)建一群外星人
這里我們首先確定一行能容納多少個(gè)外星人以及要繪制幾行。這里改動(dòng)代碼較多,直接看效果:
其實(shí)做為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子是一個(gè)特別重要的事情,這里我創(chuàng)建了一個(gè)python交流群12546470,不管你是小白還是大牛歡迎入駐,大家一起交流成長。
移動(dòng)外星人
前面我們創(chuàng)建的是靜態(tài)的外星人,現(xiàn)在我們需要讓外星人動(dòng)起來。這里我們?cè)赟ettings類中設(shè)置外星人移動(dòng)的速度,然后通過Alien類中的update的方法來實(shí)現(xiàn)移動(dòng)
射殺外星人
要想射殺外星人,就必須先檢測兩個(gè)編組成員之間是否發(fā)生碰撞,在游戲中,碰撞就是游戲元素重疊在一起。
這里我們使用sprite.groupcollide()來檢測兩個(gè)編組的成員之間的碰撞。
子彈擊中外星人時(shí),需要立馬知道,并同時(shí)使被碰撞的外星人立即消失,因此我們需要在更新子彈的位置后立即檢測碰撞。
結(jié)束游戲
這里我們還需要知道何時(shí)該結(jié)束游戲,有以下幾種情況:
飛船全部被摧毀
外星人到達(dá)屏幕底部
實(shí)際效果:
計(jì)分
最后我們將給游戲添加一個(gè)Play按鈕,用于根據(jù)需要啟動(dòng)游戲以及在游戲結(jié)束后重啟游戲。
我們還將實(shí)現(xiàn)一個(gè)計(jì)分系統(tǒng),能夠在玩家等級(jí)提高時(shí)加快節(jié)奏。
添加Play按鈕
這里可以先將游戲初始化為非活動(dòng)狀態(tài),當(dāng)我們點(diǎn)擊了按鈕,就開始游戲。
由于Pygame中沒有內(nèi)置的創(chuàng)建按鈕的方法。因此我們可以通過創(chuàng)建一個(gè)Button類來創(chuàng)建一個(gè)自帶標(biāo)簽的實(shí)心矩形。
我們通過檢測鼠標(biāo)發(fā)生點(diǎn)擊后的坐標(biāo)是否與我們繪制的按鈕發(fā)生碰撞與否來判斷是否發(fā)生了點(diǎn)擊事件。
提高等級(jí)
為了使玩家將敵人消滅干凈后能夠提高游戲難度,增加趣味性,這里我們可以在Settings類中進(jìn)行修改,增加靜態(tài)初始值,和動(dòng)態(tài)初始值。
記分、等級(jí)、剩余飛船
打包成exe可執(zhí)行文件
上面游戲開發(fā)完了,那么你需要將其轉(zhuǎn)成文exe的可執(zhí)行文件。我們采用pyinstaller,安裝步驟參考:
https://github.com/pyinstaller/pyinstaller/
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵碓囋嚕?/span>
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)漫建模全過程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
7. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
9. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
10. Unity3D入門:手把手帶你開發(fā)一款坦克大戰(zhàn)的游戲
Unity工程創(chuàng)建完成后如圖所示: 接下來應(yīng)該導(dǎo)入此項(xiàng)目所需的Unity Package文件,要用到的Unity package文件大家可以去Unity3D的官方網(wǎng)站下載(地址:ht...
最新文章
同學(xué)您好!