在個人這系列的第一篇文章 中, 我已經講解如何使用 Python 建立一個簡單的、基於文本的骰子游戲。此次,我將展現如何使用 Python 模塊 Pygame 來建立一個圖形化遊戲。它將須要幾篇文章才能來獲得一個確實作成一些東西的遊戲,可是到這系列的結尾,你將更好地理解如何查找和學習新的 Python 模塊和如何從其基礎上構建一個應用程序。python
在開始前,你必須安裝 Pygame。linux
有幾種方法來安裝 Python 模塊,可是最通用的兩個是:redis
兩個方法都工做的很好,而且每個都有它本身的一套優點。若是你是在 Linux 或 BSD 上開發,能夠利用你的發行版的軟件存儲庫來自動和及時地更新。app
然而,使用 Python 的內置軟件包管理器能夠給予你控制更新模塊時間的能力。並且,它不是特定於操做系統的,這意味着,即便當你不是在你經常使用的開發機器上時,你也可使用它。pip 的其它的優點是容許本地安裝模塊,若是你沒有正在使用的計算機的管理權限,這是有用的。函數
若是 Python 和 Python3 都安裝在你的系統上,你想使用的命令極可能是 pip3,它用來區分 Python 2.x 的 pip 的命令。若是你不肯定,先嚐試 pip3。oop
pip 命令有些像大多數 Linux 軟件包管理器同樣工做。你可使用 search 搜索 Python 模塊,而後使用 install 安裝它們。若是你沒有你正在使用的計算機的管理權限來安裝軟件,你可使用 --user 選項來僅僅安裝模塊到你的家目錄。學習
$ pip3 search pygame [...] Pygame (1.9.3) - Python Game Development sge-pygame (1.5) - A 2-D game engine for Python pygame_camera (0.1.1) - A Camera lib for PyGame pygame_cffi (0.2.1) - A cffi-based SDL wrapper that copies the pygame API. [...] $ pip3 install Pygame --user
Pygame 是一個 Python 模塊,這意味着它僅僅是一套可使用在你的 Python 程序中的庫。換句話說,它不是一個像 IDLE 或 Ninja-IDE 同樣可讓你啓動的程序。動畫
一個電子遊戲須要一個背景設定:故事發生的地點。在 Python 中,有兩種不一樣的方法來建立你的故事背景:ui
你的背景僅是一張圖片或一種顏色。你的電子遊戲人物不能與在背景中的東西相互做用,所以,不要在後面放置一些過重要的東西。它僅僅是設置裝飾。this
要開始一個新的 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 = 960 worldy = 720
在腳本中使用 Pygame 引擎前,你須要一些基本的設置。你必須設置幀頻,啓動它的內部時鐘,而後開始 (init)Pygame 。
fps = 40 # 幀頻 ani = 4 # 動畫循環 clock = pygame.time.Clock() pygame.init()
如今你能夠設置你的背景。
在你繼續前,打開一個圖形應用程序,爲你的遊戲世界建立一個背景。在你的工程目錄中的 images 文件夾內部保存它爲 stage.png 。
這裏有一些你可使用的自由圖形應用程序。
你的圖像沒必要很複雜,你能夠之後回去更改它。一旦有了它,在你文件的 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 鍵。
在這系列的 下一篇文章 中,我將向你演示,如何增強你當前空空如也的遊戲世界,因此,繼續學習並建立一些將要使用的圖形!