通過創(chuàng)建視頻游戲來學習 Python
使用我們的新電子書中的分步說明,以有趣的方式了解 Python。
Python 是目前最流行的程序設計語言之一。不管是為了工作還是娛樂為目的學習 Python,它都是一門功能強大且非常有用的編程語言。你可以創(chuàng)建應用程序來幫助你完成日常任務,創(chuàng)建你和朋友們喜歡玩的游戲,創(chuàng)建用于處理數據的腳本,創(chuàng)建用于生成或分析信息的應用程序等等。
無論你計劃使用程序設計語言做什么,我們都認為通過創(chuàng)建游戲來學習比通過處理數字或變換字符串來學習更為有趣。然而,如果你完全是一個編程的新手,當你能看到代碼在視頻游戲等熟悉的環(huán)境中工作時,你會更容易理解為什么要用代碼做某事。
你可能不會選擇 Python 作為最好的編程語言(每個人對此都有自己的答案),但它不是一門令人恐懼的編程語言。 Python 可以使用很多關鍵字(例如 is
和 is not
)代替符號(例如 =
和 !=
)。它還能管理許多低級任務,因此你通常不必擔心數據類型和垃圾收集之類的事情。通常,這意味著你馬上就可以開始編寫代碼,而不會像在 C 或 Java 那樣的復雜編程語言面前遇到挫折。
為了幫助你學習 Python,我們編寫了一本電子書,教你如何使用 Python 創(chuàng)建平臺類視頻游戲。在制作視頻游戲的同時逐步通過課程學習 Python。另外一個好處是,你還將學習編程邏輯、語法、運算符等更多的內容。你可以在學習過程中立即看到結果,因此你學到的所有內容都會得到及時鞏固。
一分鐘上手 Python
Python 是一種用途廣泛的編程語言,這意味著它(與大多數語言一樣)提供了函數來對數字和字符做處理的“簡單技巧”。Linux 操作系統(tǒng)用戶已經安裝了 Python。 Mac 操作系統(tǒng)用戶使用的是較舊版本的 Python,但是你可以從 Python.org 網站 安裝最新版本。Windows 操作系統(tǒng)用戶可以從這篇 在 Windows 上安裝 Python 的文章中學習如何安裝 Python。
安裝完成后,你可以啟動交互式 Python Shell 進行算術運算:
$ python3
>>> 5+6
11
>>> 11/2
5.5
>>> 11//2
5
>>> 11%2
1
從該示例可以了解,需要一些特殊的符號,但學過數學的人都最熟悉不過了。也許你不喜歡數字,而更喜歡字母:
$ python3
>>> string = "hello world"
>>> print(string)
hello world
>>> print(string.upper())
HELLO WORLD
>>> print(string[0])
h
>>> print(string[1])
e
>>> print(string[2])
l
>>> print(string[3])
l
>>> print(string[4])
o
同樣,相對地說基礎的任務有特殊的符號表示法,但是即使沒有說明,你也可能已經發(fā)現(xiàn) [0]
和 [1]
符號表示法是將數據“切片”并且利用 print
函數將其中的數據顯示在屏幕上。
五分鐘用上 Pygame
如果你只想使用 Python 來創(chuàng)建一個視頻游戲或任何超越基本計算的項目,這可能需要投入大量的學習、努力和時間。幸運的是,Python 誕生已有二十年了,開發(fā)者已經開發(fā)了代碼庫來幫助你(相對)輕松地完成典型的程序壯舉。Pygame 是一套用于創(chuàng)建視頻游戲的代碼模塊。它 不是唯一的這種類庫,但是它是最古老的(不論好壞),因此在線上有很多文檔和示例。
首先學習 推薦的 Python 虛擬環(huán)境工作流程:
$ python3 -m venv mycode/venv
$ cd mycode
$ source ./venv/bin/activate
(venv)$
進入虛擬環(huán)境后,可以安全地將 Pygame 安裝到項目文件夾中:
(venv)$ echo "pygame" >> requirements.txt
(venv)$ python -m pip install -r requirements.txt
[...] Installing collected packages: pygame
Successfully installed pygame-x.y.z
現(xiàn)在你已經安裝了 Pygame,就可以創(chuàng)建一個簡單的演示應用程序。它比你想象的要容易。Python 可以進行所謂的面向對象編程(OOP),這是一個漂亮的計算機科學術語,用于描述當代碼結構化時,就像你在使用代碼創(chuàng)建物理對象一樣。然而,程序員并沒有受到迷惑。他們知道在編寫代碼時并不是真的在制造物理對象,但是這樣有助于想象,因為這樣你就可以了解編程世界的局限性。
例如,如果你被困在一個荒島上并想要一杯咖啡,那么你就必須收集一些黏土,做一個杯子,然后烘烤它。如果你足夠聰明,先創(chuàng)建一個模具,以便每當需要另一個杯子時,都可以從模板中快速創(chuàng)建一個新杯子。即使每個杯子都來自相同的模板,它們在物理上也是獨立的:如果一個杯子破裂,你還會有另一個杯子。你可以通過添加顏色或蝕刻使每個咖啡杯顯得獨一無二。
在 Pygame 和許多編程任務中,你都會使用類似的邏輯。在定義之前,它不會出現(xiàn)在你的編程項目中。下面是如何在 Python 和 Pygame 程序中讓咖啡杯出現(xiàn)。
使用 Pygame 進行面向對象編程
創(chuàng)建一個名為 main.py
的文件,并輸入以下代碼用以啟動 Pygame 模塊,并使用 Pygame 模板創(chuàng)建一個窗口:
import pygame
pygame.init()
screen = pygame.display.set_mode((960,720))
就像你可能在現(xiàn)實生活中使用模板來創(chuàng)建對象一樣,你也可以使用 Pygame 提供的模板來創(chuàng)建一個妖精(這是 Pygame 的視覺游戲對象術語)。在面向對象的編程中,class
表示對象的模板。在你的文檔中輸入以下代碼:
class Cup(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
# image
img = pygame.image.load('coffeecup.png').convert()
self.image = img
# volume
self.rect = self.image.get_rect()
self.rect.x = 10
self.rect.y = 10
該代碼塊使用 Pygame 的 sprite
模板設計一個咖啡杯子妖精。由于 self.image
的存在,你的咖啡杯妖精有一個圖像,而 self.rect
則賦予了它體積(寬度和高度)。這些是 Pygame 期望妖精擁有的屬性,但是如果你要創(chuàng)建一個可玩的視頻游戲,則可以為其指定任何其他所需的屬性,例如健康點和得分。
到目前為止,你所要做的就是創(chuàng)建一個窗口和一個用于咖啡杯的 模板 。你的游戲實際上還沒有一個杯子。
你的代碼的最后一部分必須使用模板來生成杯子并將其添加到游戲世界中。如你所知,計算機運行速度非???,因此從技術上講,你到目前為止創(chuàng)建的代碼只會運行一毫秒左右。編寫圖形計算機應用程序時,無論計算機是否認為已完成規(guī)定的任務,都必須強制其保持打開狀態(tài)。程序員使用 無限循環(huán) 來執(zhí)行此操作,該循環(huán)在 Python 中由 while True
語句表示(True
始終為真,因此循環(huán)永遠不會結束)。
無限循環(huán)可以確保你的應用程序保持打開狀態(tài)足夠長的時間,以使計算機用戶可以查看和使用該應用程序:
cup = Cup()
while True:
pygame.display.update()
screen.blit(cup.image, cup.rect)
此代碼示例從模板 Cup
創(chuàng)建杯子,然后使用 Pygame 函數更新顯示。最后,使用 Pygame 的 blit
函數在其邊框內繪制杯子的圖像。
獲取圖形
在成功運行代碼之前,你需要為咖啡杯準備一個圖形。你可以在 FreeSVG.org 上找到許多 公用創(chuàng)作 咖啡杯圖形。我用了 這個。將圖形保存在項目目錄中,并將其命名為 coffeecup.png
。
運行游戲
啟動應用程序:
(venv)$ python ./main.py
Pygame 中的咖啡杯