天天看點

轉載:python中的pygame編寫飛機大戰(一)遊戲架構搭建

作者:還在琢磨 

來源:CSDN 

原文:https://blog.csdn.net/mbl114/article/details/78074742 

版權聲明:本文為部落客原創文章,轉載請附上博文連結

家裡孩子在學python,用了其中的pygame來教學。也想和他一起學,搜了很多文章,感覺作者“還在琢磨”寫得條理清晰,由淺入深,又加上了OOP的思想,便于後期維護及修改。就把他的代碼再學習一邊,擴充了一些功能。最終效果如下:

轉載:python中的pygame編寫飛機大戰(一)遊戲架構搭建

簡單的遊戲實作流程應該是:

1. 計算遊戲中元素的坐标。也就是遊戲每重新整理一次,遊戲中的元素,例如子彈坐标、 英雄飛機、敵人飛機的坐标計算等等;

2. 計算出了遊戲中的元素,飛機或者子彈的坐标,那麼就需要将飛機和子彈的圖檔繪制到這個坐标的位置;

3. 處理事件,遊戲進行過程中,玩家會通過鍵盤或者滑鼠點選、拖動、甚至關閉視窗等都屬于事件,當玩家有這些操作的時候,我們要對玩家的操作做出響應。比如,如果玩家點選了視窗右上角的X按鈕,我們就要停止遊戲并且關閉視窗結束程式,如果玩家按下w鍵,我們就讓飛機向上移動等等。

4. 碰撞檢測。這個遊戲核心邏輯,我們發出子彈,就要判斷子彈是否和敵人飛機碰到一起,如果碰到一起我們就要消失子彈,并且消失飛機,在碰撞坐标處播放動畫。如果敵人子彈擊中我們,也是類似思路。碰撞檢測我們主要通過判斷兩張圖檔的矩形是否相交。

5. 重新整理視窗。這個最為簡單,直接調用pygame.display.update()即可。

下面我們搭建流程代碼如下,這裡我們建立GameScene類,用于顯示視窗,并負責遊戲的核心邏輯及場景中各個遊戲元素的管理:

import pygame
 
 
# 主場景
class MainScene(object):
    # 初始化主場景
    def __init__(self):
        # 場景尺寸
        self.mSize = (512, 768)
        # 場景對象
        self.mScene = pygame.display.set_mode([self.mSize[0], self.mSize[1]])
        # 設定标題
        pygame.display.set_caption("飛機大戰-v1.0")
 
 
    # 繪制
    def draw_elements(self):
        pass
 
    # 動作
    def action_elements(self):
        pass
 
    # 處理事件
    def handle_event(self):
        pass
 
    # 碰撞檢測
    def detect_conlision(self):
        pass
 
    # 主循環,主要處理各種事件
    def run_scene(self):
 
        while True:
            # 計算元素坐标
            self.action_elements()
            # 繪制元素圖檔
            self.draw_elements()
            # 處理事件
            self.handle_event()
            # 碰撞檢測
            self.detect_conlision()
            # 重新整理顯示
            pygame.display.update()
 
 
# 入口函數
if __name__ == "__main__":
    # 建立主場景
    mainScene = MainScene()
    # 開始遊戲
    mainScene.run_scene()
           

架構流程中的涉及到的功能函數,例如繪制、計算坐标等并沒有填寫内容,我們在以後具體添加功能中,再去實作。遊戲中需要用到的各種功能基本完備了,以後的代碼就是往這個架構裡填寫東西。我很喜歡這種風格,從架構到細部。一點一點學,一點一點填寫、測試。

繼續閱讀