python飛機(jī)大戰(zhàn)pygame游戲框架搭建操作詳解
本文實(shí)例講述了python飛機(jī)大戰(zhàn)pygame游戲框架搭建操作。分享給大家供大家參考,具體如下:
目標(biāo)
- 明確主程序職責(zé)
- 實(shí)現(xiàn)主程序類(lèi)
- 準(zhǔn)備游戲精靈組
01. 明確主程序職責(zé)
- 回顧 快速入門(mén)案例,一個(gè)游戲主程序的 職責(zé) 可以分為兩個(gè)部分:
- 游戲初始化
- 游戲循環(huán)
- 根據(jù)明確的職責(zé),設(shè)計(jì) PlaneGame 類(lèi)如下:

提示 根據(jù) 職責(zé) 封裝私有方法,可以避免某一個(gè)方法的代碼寫(xiě)得太過(guò)冗長(zhǎng)
如果某一個(gè)方法編寫(xiě)的太長(zhǎng),既不好閱讀,也不好維護(hù)!
- 游戲初始化 —— init() 會(huì)調(diào)用以下方法:

游戲循環(huán) —— start_game() 會(huì)調(diào)用以下方法:

02. 實(shí)現(xiàn)飛機(jī)大戰(zhàn)主游戲類(lèi)
2.1 明確文件職責(zé)

- plane_main
- 封裝 主游戲類(lèi)
- 創(chuàng)建 游戲?qū)ο?/li>
- 啟動(dòng)游戲
- plane_sprites
- 封裝游戲中 所有 需要使用的 精靈子類(lèi)
- 提供游戲的 相關(guān)工具
代碼實(shí)現(xiàn)
- 新建 plane_main.py 文件,并且設(shè)置為可執(zhí)行
- 編寫(xiě) 基礎(chǔ)代碼
import pygame
from plane_sprites import *
class PlaneGame(object):
"""飛機(jī)大戰(zhàn)主游戲"""
def __init__(self):
print("游戲初始化")
def start_game(self):
print("開(kāi)始游戲...")
if __name__ == '__main__':
# 創(chuàng)建游戲?qū)ο?
game = PlaneGame()
# 開(kāi)始游戲
game.start_game()
2.3 游戲初始化部分
完成 init() 代碼如下:
def __init__(self):
print("游戲初始化")
# 1. 創(chuàng)建游戲的窗口
self.screen = pygame.display.set_mode((480, 700))
# 2. 創(chuàng)建游戲的時(shí)鐘
self.clock = pygame.time.Clock()
# 3. 調(diào)用私有方法,精靈和精靈組的創(chuàng)建
self.__create_sprites()
def __create_sprites(self):
pass
使用 常量 代替固定的數(shù)值
- 常量 —— 不變化的量
- 變量 —— 可以變化的量
應(yīng)用場(chǎng)景
- 在開(kāi)發(fā)時(shí),可能會(huì)需要使用 固定的數(shù)值,例如 屏幕的高度 是 700
- 這個(gè)時(shí)候,建議 不要 直接使用固定數(shù)值,而應(yīng)該使用 常量
- 在開(kāi)發(fā)時(shí),為了保證代碼的可維護(hù)性,盡量不要使用 魔法數(shù)字
常量的定義
- 定義 常量 和 定義 變量 的語(yǔ)法完全一樣,都是使用 賦值語(yǔ)句
- 常量 的 命名 應(yīng)該 所有字母都使用大寫(xiě),單詞與單詞之間使用下劃線連接
常量的好處
- 閱讀代碼時(shí),通過(guò) 常量名 見(jiàn)名之意,不需要猜測(cè)數(shù)字的含義
- 如果需要 調(diào)整值,只需要 修改常量定義 就可以實(shí)現(xiàn) 統(tǒng)一修改
提示:Python 中并沒(méi)有真正意義的常量,只是通過(guò)命名的約定 —— 所有字母都是大寫(xiě)的就是常量,開(kāi)發(fā)時(shí)不要輕易的修改!
代碼調(diào)整
- 在 plane_sprites.py 中增加常量定義
import pygame # 游戲屏幕大小 SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
修改 plane_main.py 中的窗口大小
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
2.4 游戲循環(huán)部分
完成 start_game() 基礎(chǔ)代碼如下:
def start_game(self):
"""開(kāi)始游戲"""
print("開(kāi)始游戲...")
while True:
# 1. 設(shè)置刷新幀率
self.clock.tick(60)
# 2. 事件監(jiān)聽(tīng)
self.__event_handler()
# 3. 碰撞檢測(cè)
self.__check_collide()
# 4. 更新精靈組
self.__update_sprites()
# 5. 更新屏幕顯示
pygame.display.update()
def __event_handler(self):
"""事件監(jiān)聽(tīng)"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
PlaneGame.__game_over()
def __check_collide(self):
"""碰撞檢測(cè)"""
pass
def __update_sprites(self):
"""更新精靈組"""
pass
@staticmethod
def __game_over():
"""游戲結(jié)束"""
print("游戲結(jié)束")
pygame.quit()
exit()
03. 準(zhǔn)備游戲精靈組
3.1 確定精靈組

3.2 代碼實(shí)現(xiàn)
創(chuàng)建精靈組方法
def __create_sprites(self): """創(chuàng)建精靈組""" # 背景組 self.back_group = pygame.sprite.Group() # 敵機(jī)組 self.enemy_group = pygame.sprite.Group() # 英雄組 self.hero_group = pygame.sprite.Group()
更新精靈組方法
def __update_sprites(self):
"""更新精靈組"""
for group in [self.back_group, self.enemy_group, self.hero_group]:
group.update()
group.draw(self.screen)
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專(zhuān)題:《Python游戲開(kāi)發(fā)技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Pygame框架實(shí)現(xiàn)飛機(jī)大戰(zhàn)
- python使用pygame框架實(shí)現(xiàn)推箱子游戲
- 基于Python+Pygame實(shí)現(xiàn)經(jīng)典賽車(chē)游戲
- Python Pygame實(shí)戰(zhàn)之飛機(jī)大戰(zhàn)的實(shí)現(xiàn)
- Python Pygame實(shí)戰(zhàn)之賽車(chē)游戲的實(shí)現(xiàn)
- Python?Pygame實(shí)戰(zhàn)之歡樂(lè)打地鼠游戲
- Python Pygame制作雪夜煙花景
- 基于python?的Pygame最小開(kāi)發(fā)框架
相關(guān)文章
C++和python實(shí)現(xiàn)阿姆斯特朗數(shù)字查找實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于C++和python實(shí)現(xiàn)阿姆斯特朗數(shù)字查找的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Django把SQLite數(shù)據(jù)庫(kù)轉(zhuǎn)換為Mysql數(shù)據(jù)庫(kù)的過(guò)程
之前我們默認(rèn)使用的是SQLite數(shù)據(jù)庫(kù),我們開(kāi)發(fā)完成之后,里面有許多數(shù)據(jù),如果我們想轉(zhuǎn)換成Mysql數(shù)據(jù)庫(kù),那我們先得把舊數(shù)據(jù)從SQLite導(dǎo)出,然后再導(dǎo)入到新的Mysql數(shù)據(jù)庫(kù)里去,這篇文章主要介紹了Django如何把SQLite數(shù)據(jù)庫(kù)轉(zhuǎn)換為Mysql數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-05-05
利用Python找出刪除自己微信的好友并將他們自動(dòng)化刪除
你是否有微信被刪了好友不自知,還傻傻的給對(duì)方發(fā)消息,結(jié)果出現(xiàn)了下圖中那尷尬的一幕的經(jīng)歷呢?其實(shí)我們可以用Python提前把他們找出來(lái)并自動(dòng)化刪除避免尷尬的2023-01-01
Python實(shí)現(xiàn)將wav轉(zhuǎn)amr,并轉(zhuǎn)換成hex數(shù)組
這篇文章主要介紹了Python實(shí)現(xiàn)將wav轉(zhuǎn)amr,并轉(zhuǎn)換成hex數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
python實(shí)現(xiàn)關(guān)閉第三方窗口的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)關(guān)閉第三方窗口的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
使用python裝飾器計(jì)算函數(shù)運(yùn)行時(shí)間的實(shí)例
下面小編就為大家分享一篇使用python裝飾器計(jì)算函數(shù)運(yùn)行時(shí)間的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Django實(shí)現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法
這篇文章主要介紹了Django實(shí)現(xiàn)靜態(tài)文件緩存到云服務(wù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08

