使用 Python 和 Pygame 模組構建一個遊戲框架

2019-05-13 21:51:00

這系列的第一篇通過建立一個簡單的骰子遊戲來探究 Python。現在是來從零製作你自己的遊戲的時間。

在我的 中, 我已經講解如何使用 Python 建立一個簡單的、基於文字的骰子遊戲。這次,我將展示如何使用 Python 模組 Pygame 來建立一個圖形化遊戲。它將需要幾篇文章才能來得到一個確實做成一些東西的遊戲,但是到這系列的結尾,你將更好地理解如何查詢和學習新的 Python 模組和如何從其基礎上構建一個應用程式。

在開始前,你必須安裝 Pygame

安裝新的 Python 模組

有幾種方法來安裝 Python 模組,但是最通用的兩個是:

  • 從你的發行版的軟體儲存庫
  • 使用 Python 的軟體包管理器 pip

兩個方法都工作的很好,並且每一個都有它自己的一套優勢。如果你是在 Linux 或 BSD 上開發,可以利用你的發行版的軟體儲存庫來自動和及時地更新。

然而,使用 Python 的內建軟體包管理器可以給予你控制更新模組時間的能力。而且,它不是特定於作業系統的,這意味著,即使當你不是在你常用的開發機器上時,你也可以使用它。pip 的其它的優勢是允許本地安裝模組,如果你沒有正在使用的計算機的管理許可權,這是有用的。

使用 pip

如果 Python 和 Python3 都安裝在你的系統上,你想使用的命令很可能是 pip3,它用來區分 Python 2.x 的 pip 的命令。如果你不確定,先嘗試 pip3

pip 命令有些像大多數 Linux 軟體包管理器一樣工作。你可以使用 search 搜尋 Python 模組,然後使用 install 安裝它們。如果你沒有你正在使用的計算機的管理許可權來安裝軟體,你可以使用 --user 選項來僅僅安裝模組到你的家目錄。

$ pip3 search pygame[...]Pygame (1.9.3)                 - Python Game Developmentsge-pygame (1.5)               - A 2-D game engine for Pythonpygame_camera (0.1.1)          - A Camera lib for PyGamepygame_cffi (0.2.1)            - A cffi-based SDL wrapper that copies the pygame API.[...]$ pip3 install Pygame --user

Pygame 是一個 Python 模組,這意味著它僅僅是一套可以使用在你的 Python 程式中的庫。換句話說,它不是一個像 IDLENinja-IDE 一樣可以讓你啟動的程式。

Pygame 新手入門

一個電子遊戲需要一個背景設定:故事發生的地點。在 Python 中,有兩種不同的方法來建立你的故事背景:

  • 設定一種背景顏色
  • 設定一張背景圖片

你的背景僅是一張圖片或一種顏色。你的電子遊戲人物不能與在背景中的東西相互作用,因此,不要在後面放置一些太重要的東西。它僅僅是設定裝飾。

設定你的 Pygame 指令碼

要開始一個新的 Pygame 工程,先在計算機上建立一個資料夾。遊戲的全部檔案被放在這個目錄中。在你的工程資料夾內部保持所需要的所有的檔案來執行遊戲是極其重要的。

一個 Python 指令碼以檔案型別、你的姓名,和你想使用的許可證開始。使用一個開放原始碼許可證,以便你的朋友可以改善你的遊戲並與你一起分享他們的更改:

#!/usr/bin/env python3# by Seth Kenlon## GPLv3# This program is free software: you can redistribute it and/or# modify it under the terms of the GNU General Public License as# published by the Free Software Foundation, either version 3 of the# License, or (at your option) any later version.## This program is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU# General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program.  If not, see <http://www.gnu.org/licenses/>.

然後,你告訴 Python 你想使用的模組。一些模組是常見的 Python 庫,當然,你想包括一個你剛剛安裝的 Pygame 模組。

import pygame  # 載入 pygame 關鍵字import sys     # 讓 python 使用你的檔案系統import os      # 幫助 python 識別你的作業系統

由於你將用這個指令碼檔案做很多工作,在檔案中分成段落是有幫助的,以便你知道在哪裡放程式碼。你可以使用塊注釋來做這些,這些註釋僅在看你的原始檔程式碼時是可見的。在你的程式碼中建立三個塊。

'''Objects'''# 在這裡放置 Python 類和函數'''Setup'''# 在這裡放置一次性的執行程式碼'''Main Loop'''# 在這裡放置遊戲的迴圈程式碼指令

接下來,為你的遊戲設定視窗大小。注意,不是每一個人都有大計算機螢幕,所以,最好使用一個適合大多數人的計算機的螢幕大小。

這裡有一個方法來切換全螢幕模式,很多現代電子遊戲都會這樣做,但是,由於你剛剛開始,簡單起見僅設定一個大小即可。

'''Setup'''worldx = 960worldy = 720

在指令碼中使用 Pygame 引擎前,你需要一些基本的設定。你必須設定幀頻,啟動它的內部時鐘,然後開始 (init)Pygame 。

fps   = 40  # 幀頻ani   = 4   # 動畫迴圈clock = pygame.time.Clock()pygame.init()

現在你可以設定你的背景。

設定背景

在你繼續前,開啟一個圖形應用程式,為你的遊戲世界建立一個背景。在你的工程目錄中的 images 資料夾內部儲存它為 stage.png

這裡有一些你可以使用的自由圖形應用程式。

  • Krita 是一個專業級繪圖素材模擬器,它可以被用於建立漂亮的圖片。如果你對建立電子遊戲藝術作品非常感興趣,你甚至可以購買一系列的遊戲藝術作品教學
  • Pinta 是一個基本的,易於學習的繪圖應用程式。
  • Inkscape 是一個向量圖形應用程式。使用它來繪製形狀、線、樣條曲線和貝塞爾曲線。

你的影象不必很複雜,你可以以後回去更改它。一旦有了它,在你檔案的 Setup 部分新增這些程式碼:

world    = pygame.display.set_mode([worldx,worldy])backdrop = pygame.image.load(os.path.join('images','stage.png').convert())backdropbox = world.get_rect()

如果你僅僅用一種顏色來填充你的遊戲的背景,你需要做的就是:

world = pygame.display.set_mode([worldx,worldy])

你也必須定義顏色以使用。在你的 Setup 部分,使用紅、綠、藍 (RGB) 的值來建立一些顏色的定義。

'''Setup'''BLUE  = (25,25,200)BLACK = (23,23,23 )WHITE = (254,254,254)

至此,你理論上可以啟動你的遊戲了。問題是,它可能僅持續了一毫秒。

為證明這一點,儲存你的檔案為 your-name_game.py(用你真實的名稱替換 your-name)。然後啟動你的遊戲。

如果你正在使用 IDLE,通過選擇來自 “Run” 選單的 “Run Module” 來執行你的遊戲。

如果你正在使用 Ninja,在左側按鈕條中單擊 “Run file” 按鈕。

你也可以直接從一個 Unix 終端或一個 Windows 命令提示字元中執行一個 Python 指令碼。

$ python3 ./your-name_game.py

如果你正在使用 Windows,使用這命令:

py.exe your-name_game.py

啟動它,不過不要期望很多,因為你的遊戲現在僅僅持續幾毫秒。你可以在下一部分中修復它。

迴圈

除非另有說明,一個 Python 指令碼執行一次並僅一次。近來計算機的執行速度是非常快的,所以你的 Python 指令碼執行時間會少於 1 秒鐘。

為強制你的遊戲來處於足夠長的開啟和活躍狀態來讓人看到它(更不要說玩它),使用一個 while 迴圈。為使你的遊戲儲存開啟,你可以設定一個變數為一些值,然後告訴一個 while 迴圈只要變數保持未更改則一直儲存迴圈。

這經常被稱為一個“主迴圈”,你可以使用術語 main 作為你的變數。在你的 Setup 部分的任意位置新增程式碼:

main = True

在主迴圈期間,使用 Pygame 關鍵字來檢查鍵盤上的按鍵是否已經被按下或釋放。新增這些程式碼到你的主迴圈部分:

'''Main loop'''while main == True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            pygame.quit(); sys.exit()            main = False        if event.type == pygame.KEYDOWN:            if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False

也是在你的迴圈中,重新整理你世界的背景。

如果你使用一個圖片作為背景:

world.blit(backdrop, backdropbox)

如果你使用一種顏色作為背景:

world.fill(BLUE)

最後,告訴 Pygame 來重新重新整理螢幕上的所有內容,並推進遊戲的內部時鐘。

    pygame.display.flip()    clock.tick(fps)

儲存你的檔案,再次執行它來檢視你曾經建立的最無趣的遊戲。

退出遊戲,在你的鍵盤上按 q 鍵。

在這系列的 下一篇文章 中,我將向你演示,如何加強你當前空空如也的遊戲世界,所以,繼續學習並建立一些將要使用的圖形!