python飛機大戰系列文章(按順序)
(一)通過pygame 將自己的圖像添加到遊戲中
(二)通過pygame讓遊戲人物 動起來
(三)通過pygame處理用戶的鼠標鍵盤操作(事件和監聽
(四)詳解pygame中的精靈和精靈組
(五)通過pygame搭建遊戲框架
(六)通過pygame讓遊戲背景圖像實現交替滾動
(七)通過pygame來設置飛機大戰中 敵機 的速度、位置等
(八)通過pygame來操控遊戲人物的移動
(九)通過pygame使遊戲人物發射子彈
(十)通過pygame來進行碰撞檢測
遊戲框架的搭建
要搭建一個遊戲的框架,首先要明確主程序的職責
明確主程序的職責
由之前的案例可以得知,一個遊戲的主程序的職責可以分成兩個部分
- 遊戲初始化
- 遊戲循環
現在我們根據明確的職責,設計PlaneGame類如下:
明確文件職責
plane_main:
①封裝主遊戲類
②創建遊戲對象
③啓動遊戲
plane_sprites:
①封裝遊戲中所有需要使用的精靈子類
②提供遊戲的相關工具
【注意:開發中如果遇到固定數值的時候(比如本例的屏幕大小和每秒刷新幀率),最好不要直接使用固定數值,而是使用常量,常量的命名規則爲所有的字母都使用大寫,單詞與單詞之間使用下劃線連接,如果需要調整值,只需要修改常量的定義就可以實現統一修改】
代碼
那麼現在大體可以得到一個簡單的框架(代碼還未完全)
其中,plane_sprites的內容爲:
import pygame
#屏幕大小的常量
SCREEN_RECT = pygame.Rect(0,0,480,700)
#刷新的幀率的常量
FRAME_PER_SEC = 60
class GameSprite(pygame.sprite.Sprite):
"""飛機大戰遊戲精靈"""
def __init__(self, image_name, speed=1):
#調用父類的初始化方法
super().__init__()
#定義對象屬性
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self):
#在屏幕垂直方向上移動
self.rect.y += self.speed
plane_main的內容爲:
import pygame
from plane_sprites import *
class PlaneGame(object):
"""飛機大戰主遊戲"""
def __init__(self):
print("遊戲初始化")
#創建遊戲窗口
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
#創建遊戲的時鐘
self.clock = pygame.time.Clock()
#調用私有方法,精靈和精靈組的創建
self.__create_sprites()
def __create_sprites(self):
pass
def start_game(self):
print("遊戲開始")
while True:
#設置刷新幀率
self.clock.tick(FRAME_PER_SEC)
#事件監聽
self.__event_handler()
#碰撞檢測
self.__check_collide()
#更新/繪製精靈組
self.__update_sprites()
#更新顯示
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
#判斷是否退出遊戲
if event.type == pygame.QUIT:
PlaneGame.__game_over()
def __check_collide(self):
pass
def __update_sprites(self):
pass
#沒有使用對象屬性和類屬性,所以定義爲靜態方法
@staticmethod
def __game_over():
print("遊戲結束")
pygame.quit()
exit()
if __name__ == '__main__':
#創建遊戲對象
game = PlaneGame()
#啓動遊戲
game.start_game()