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