《Python遊戲趣味程式設計》 第5章 飛翔的小鳥
圖書簡介可以看這裡:
本章我們將編寫飛翔的小鳥遊戲。小鳥會在空中下落,滑鼠點選後向上飛行一段距離;隨機位置的障礙物從右向左移動,玩家需控制小鳥穿過障礙物間的空隙得分。
首先我們學習圖片的匯入和顯示,實現背景、小鳥、障礙物的顯示;然後學習控制小鳥的下落與上升、障礙物的移動;最後學習遊戲失敗的判定與遊戲重置、得分的顯示。
本章案例最終程式碼一共58行,程式碼參看:配套資源\第5章\5-8。py,影片效果參看:配套資源\第5章\飛翔的小鳥。mp4。
import
pgzrun
# 匯入遊戲庫
import
random
# 匯入隨機庫
WIDTH
=
350
# 設定視窗的寬度
HEIGHT
=
600
# 設定視窗的高度
background
=
Actor
(
‘background’
)
# 匯入背景圖片
bird
=
Actor
(
‘bird’
)
# 匯入小鳥圖片
bird
。
x
=
50
# 設定小鳥的x座標
bird
。
y
=
HEIGHT
/
2
# 設定小鳥的y座標
bar_up
=
Actor
(
‘bar_up’
)
# 匯入障礙物上半部分圖片
bar_up
。
x
=
300
# 設定障礙物上半部分的x座標
bar_up
。
y
=
0
# 設定障礙物上半部分的y座標
bar_down
=
Actor
(
‘bar_down’
)
# 匯入障礙物下半部分圖片
bar_down
。
x
=
300
# 設定障礙物下半部分的x座標
bar_down
。
y
=
600
# 設定障礙物下半部分的y座標
score
=
0
# 遊戲得分
speed
=
1
# 遊戲速度,即障礙物向左移動的速度
def
draw
():
# 繪製模組,每幀重複執行
background
。
draw
()
# 繪製背景
bar_up
。
draw
()
# 繪製障礙物上半部分
bar_down
。
draw
()
# 繪製障礙物下半部分
bird
。
draw
()
# 繪製小鳥
screen
。
draw
。
text
(
str
(
score
),
(
30
,
30
),
fontsize
=
50
,
color
=
‘green’
)
def
update
():
# 更新模組,每幀重複操作
global
score
,
speed
bird
。
y
=
bird
。
y
+
2
# 小鳥y座標增加,即緩慢下落
bar_up
。
x
=
bar_up
。
x
-
speed
# 障礙物上半部分緩慢向左移動
bar_down
。
x
=
bar_down
。
x
-
speed
# 障礙物上半部分緩慢向左移動
# 當障礙物移動到最左邊時,可以讓其在右邊重新出現
if
bar_up
。
x
<
0
:
bar_up
。
x
=
WIDTH
bar_down
。
x
=
WIDTH
bar_up
。
y
=
random
。
randint
(
-
200
,
200
)
# 障礙物上半部分上下隨機出現
bar_down
。
y
=
600
+
bar_up
。
y
# 上、下部分的障礙物中間空擋大小固定
score
=
score
+
1
# 得分加1
if
(
score
%
5
==
0
):
# 如果得分增加了5分,就讓遊戲速度增加
speed
=
speed
+
1
# 如果小鳥碰到障礙物上半部分或下半部分,遊戲失敗
if
bird
。
colliderect
(
bar_up
)
or
bird
。
colliderect
(
bar_down
)
or
bird
。
y
<
0
or
bird
。
y
>
HEIGHT
:
(
‘遊戲失敗’
)
# 把得分清零、速度設為1,小鳥、障礙物的位置重新歸位
score
=
0
speed
=
1
bird
。
x
=
50
# 設定小鳥的x座標
bird
。
y
=
HEIGHT
/
2
# 設定小鳥的y座標
bar_up
。
x
=
WIDTH
# 設定障礙物上半部分的x座標
bar_up
。
y
=
0
# 設定障礙物上半部分的y座標
bar_down
。
x
=
WIDTH
# 設定障礙物下半部分的x座標
bar_down
。
y
=
600
# 設定障礙物下半部分的y座標
def
on_mouse_down
():
# 當滑鼠點選時執行
bird
。
y
=
bird
。
y
-
100
# 小鳥y座標減少,即上升一段距離
pgzrun
。
go
()
# 開始執行遊戲
分步驟程式碼、圖片素材、講解影片可以從非同步社群下載:
分步驟程式碼也可以直接從這裡下載:
這一章主要講解了圖片的匯入與顯示、位置的設定、碰撞檢測,以及文字的顯示等功能,學習了資料的型別轉換、整除與取餘運算子等知識點。應用變數、if語句、隨機等基礎語法,沒有使用for迴圈、列表,實現了飛翔的小鳥遊戲。
學習了中學物理的讀者,可以嘗試將小鳥設定為受重力作用下落,實現更自然的遊戲效果。讀者也可以參考本章的開發思路,嘗試設計並分步驟實現一個跳躍躲避障礙物的遊戲。