Python遊戲和動畫——Pygame模組
學習程式設計,如果只是簡單的敲程式碼,雖然也能看到程式執行的一些效果,但也會覺得枯燥乏味。
我們前面介紹了海龜繪圖,這樣學起來也是很有趣的,透過簡單的程式碼,可以在螢幕上繪製想要的圖形。
這裡開始介紹使用Python庫Pygame來編寫遊戲和動畫,用程式碼來編寫屬於自己的遊戲,想想就是特別有成就感,學習程式設計也會變得非常有趣。
Pygame是一個開源的Python模組,可以用於2D遊戲製作,包含對影象、聲音、影片、事件、碰撞等的支援。Pygame建立在SDL的基礎上,SDL是一套跨平臺的多媒體開發庫,用C語言實現,被廣泛的應用於遊戲、模擬器、播放器等的開發。
Pygame讓遊戲開發者不再被底層語言束縛,可以更多的關注遊戲的功能和邏輯。
安裝Pygame
Windows使用pip命令進行安裝
pip3
install
pygame
安裝成功
>>>
import
pygame
pygame
1。9
。
4
Hello
from
the
pygame
community。
https
:
//
www
。
pygame
。
org
/
contribute
。
html
匯入Pygame模組
import
pygame
我們在使用Pygame設計一款遊戲或動畫的時候,需要包括三個部分:
一、初始設定
首先需要匯入模組,建立遊戲螢幕,然後初始化一些重要的變數
二、遊戲迴圈
遊戲迴圈使用while迴圈,使遊戲持續更新螢幕和處理事件,除非使用者退出程式,否則就會一直執行
三、退出程式
當用戶想要停止程式的時候,使用一種方式來結束程式
Pygame視窗座標系統
我們在學習turtle繪圖的時候,認識了一個笛卡爾座標系,原點(0,0)位於螢幕的中心並且越向螢幕上方,y座標的值就越大。
這裡我們有一個新的座標系統,Pygame視窗的左上角是原點(0,0),越往右x的值越來越大,x為正值,負值在螢幕的左邊;同樣越往下,y座標的值也越來越大,y座標的負值在視窗的上方,也是位於螢幕的外面。
繪製一個圓
import
pygame
# 初始設定
pygame
。
init
()
# 初始化pygame
screen
=
pygame
。
display
。
set_mode
((
800
,
600
))
# Pygame視窗
pygame
。
display
。
set_caption
(
“Pygame繪製圖形”
)
# 標題
keep_going
=
True
RED
=
(
255
,
0
,
0
)
# 紅色,使用RGB顏色
radius
=
20
# 半徑
# 遊戲迴圈
while
keep_going
:
for
event
in
pygame
。
event
。
get
():
# 遍歷事件
if
event
。
type
==
pygame
。
QUIT
:
# 退出事件
keep_going
=
False
pygame
。
draw
。
circle
(
screen
,
RED
,(
200
,
300
),
radius
)
pygame
。
display
。
update
()
# 重新整理螢幕
# 退出程式
pygame
。
quit
()
第一步:初始設定
import
pygame
# 初始設定
pygame
。
init
()
# 初始化pygame
screen
=
pygame
。
display
。
set_mode
((
800
,
600
))
# Pygame視窗
pygame
。
display
。
set_caption
(
“Pygame繪製圖形”
)
# 標題
keep_going
=
True
# 迴圈變數標值
RED
=
(
255
,
0
,
0
)
# 紅色,使用RGB顏色
radius
=
20
# 半徑
這裡我們首先匯入了pygame模組,然後在使用pygame。init()對其進行初始化。pygame。display。set_mode((800,600))建立了一個800*600畫素的顯示視窗,儲存到變數screen中,以後的程式中就可以直接呼叫變數screen即可。
pygame。display。set_caption(“Pygame繪製圖形”)給螢幕視窗新增一個標題。
在Pygame中建立的遊戲視窗,或者載入到視窗的圖形都稱為Surface。Surface screen即顯示視窗,是繪製其他所有圖形的主要視窗。
我們定義了一個布林型別的標誌,來控制程式的持續執行,想要暫停,只需要改變keep_going的值為False。
定義了一個顏色常量RED,用於設定RGB三色值(255,0,0),第一個值代表紅色R,第二個值代表綠色G,第三個值代表藍色B,每一個值的範圍都是從0~255。
還在程式開始設定了圓的半徑,變數radius = 20
第二步:遊戲迴圈
# 遊戲迴圈
while
keep_going
:
for
event
in
pygame
。
event
。
get
():
# 遍歷事件
if
event
。
type
==
pygame
。
QUIT
:
# 退出事件
keep_going
=
False
pygame
。
draw
。
circle
(
screen
,
RED
,(
200
,
300
),
radius
)
pygame
。
display
。
update
()
# 重新整理螢幕
while keep_going:如果keep_going為True遊戲一直持續進行,持續執行Pygame視窗,直到使用者選擇退出。
for event in pygame。event。get():這裡使用for迴圈遍歷Pygame中的所有事件,if event。type == pygame。QUIT:如果使用者按下關閉按鈕,退出程式,這樣變數keep_going變為False,遊戲結束。
遊戲持續進行的時候,即使用者沒有觸發關閉視窗的事件。我們開始在Pygame視窗繪製其他Surface影象,pygame。draw。circle(screen,RED,(200,300),radius)在螢幕視窗(200,300)位置上繪製半徑為20的,填充顏色為RED的圓。
第一個引數screen,指定要在那個Surface上繪製圖形。pygame。draw除了可以繪製圓(circle),還可以繪製矩形、線段等形狀。
最後:遊戲結束
# 退出程式
pygame
。
quit
()
當用戶退出遊戲的時候,呼叫這段程式碼,清楚所有的設定,關閉螢幕視窗。
載入圖片
import
pygame
# 初始化設定
pygame
。
init
()
screen
=
pygame
。
display
。
set_mode
((
800
,
600
))
pygame
。
display
。
set_caption
(
“載入圖片”
)
keep_going
=
True
pic
=
pygame
。
image
。
load
(
“logo_lofi。png”
)
# 圖片載入
# 遊戲迴圈
while
keep_going
:
for
event
in
pygame
。
event
。
get
():
# 迴圈遍歷事件
if
event
。
type
==
pygame
。
QUIT
:
keep_going
=
False
screen
。
blit
(
pic
,(
100
,
100
))
# 在Surface上繪製圖片
pygame
。
display
。
update
()
# 遊戲退出
pygame
。
quit
()
這一次並不是繪製一個圓,而是將我們儲存的圖片載入到Surface螢幕上。注意圖片儲存的位置和我們。py檔案在同一個目錄下。
pic = pygame。image。load(“logo_lofi。png”)從一個檔案載入影象,儲存到變數pic中,在以後的程式中透過pic來引用這個圖片。
將圖片繪製到Surface螢幕上並且更新繪製視窗,確保所有內容出現在螢幕上。
screen
。
blit
(
pic
,(
100
,
100
))
# 在Surface上繪製圖片
pygame
。
display
。
update
()
blit()方法將我們從檔案中載入的圖片pic繪製到screen螢幕的(100,100)位置上。
這裡簡單介紹如何使用Pygame繪製圖形和載入圖片到Surface螢幕上。建立一個Pygame遊戲或動畫的三個步驟。後面的內容會詳細介紹如何使用此模組來建立一款屬於自己的遊戲。
謝謝大家的關注與支援,有不足的地方歡迎指正。
更多內容可以關注微信公眾號【陪孩子一起學程式設計】