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