《Python遊戲趣味程式設計》 第6章 見縫插針
圖書簡介可以看這裡:
本章我們將編寫一個見縫插針的遊戲。按下空格鍵後發射一根針到圓盤上,所有發射的針跟著圓盤逆時針方向轉動;如果新發射的針碰到已有的針,遊戲結束。
首先我們進行圓盤與針圖片的顯示、針的轉動及旋轉中心的設定;其次定義列表儲存多根針的資訊,實現多根針的發射、轉動與失敗判斷;最後學習遊戲資訊的顯示、音效的新增。
本章案例最終程式碼一共49行,程式碼參看:配套資源\第6章\6-8。py,影片效果參看:配套資源\第6章\見縫插針。mp4。
import
pgzrun
# 匯入遊戲庫
TITLE
=
‘Python見縫插針 ——- by 童晶’
# 匯入初始位置針的圖片、設定錨點相對座標
startNeedle
=
Actor
(
‘needle’
,
anchor
=
(
170
+
50
,
1
))
startNeedle
。
x
=
200
# 設定針錨點的x座標
startNeedle
。
y
=
300
# 設定針錨點的y座標
needles
=
[]
# 儲存所有針的列表,開始為空
rotateSpeed
=
1
# 旋轉速度,預設是1,後面遊戲結束後改成0
score
=
0
# 遊戲得分
def
draw
():
# 繪製模組,每幀重複執行
screen
。
fill
(
‘white’
)
# 白色背景
startNeedle
。
draw
()
# 初始位置針的繪製
for
needle
in
needles
:
# 繪製列表中每根針
needle
。
draw
()
# 繪製針
screen
。
draw
。
filled_circle
((
400
,
300
),
80
,
‘red’
)
# 繪製圓盤
screen
。
draw
。
text
(
str
(
score
),
(
50
,
250
),
fontsize
=
50
,
color
=
‘green’
)
# 顯示遊戲得分
if
rotateSpeed
==
0
:
# 遊戲失敗
screen
。
draw
。
text
(
“Game Over!”
,
(
10
,
320
),
fontsize
=
35
,
color
=
‘red’
)
def
update
():
# 更新模組,每幀重複操作
for
needle
in
needles
:
# 對列表中每根針遍歷處理
needle
。
angle
=
needle
。
angle
+
rotateSpeed
# 針的角度增加,即慢慢旋轉
def
on_key_down
():
# 當按下任意鍵盤鍵時執行
global
rotateSpeed
,
score
if
rotateSpeed
>
0
:
# 播放音效
music
。
play_once
(
‘彈簧’
)
# 再新建一根針
newNeedle
=
Actor
(
‘needle’
,
anchor
=
(
170
+
50
,
1
))
newNeedle
。
x
=
400
# 設定針錨點的x座標
newNeedle
。
y
=
300
# 設定針錨點的y座標
for
needle
in
needles
:
if
newNeedle
。
colliderect
(
needle
):
# 新針和其他針碰撞,遊戲失敗
(
‘遊戲失敗’
)
rotateSpeed
=
0
# 遊戲失敗,針停止旋轉
music
。
play_once
(
‘溜走’
)
if
rotateSpeed
>
0
:
# 如果針還在旋轉
score
=
score
+
1
# 得分加1
needles
。
append
(
newNeedle
)
# 把新針加入列表中
pgzrun
。
go
()
# 開始執行遊戲
分步驟程式碼、圖片音效素材、講解影片可以從非同步社群下載:
分步驟程式碼也可以直接從這裡下載:
這一章主要講解了圖片旋轉的實現、多張圖片列表的使用、遊戲音效的播放等功能,學習了if-elif-else和input語句。應用if選擇判斷、for迴圈、列表等語法知識,實現了見縫插針遊戲。讀者可以在本章程式碼基礎上繼續改進:
1。 隨著遊戲的進行,針的旋轉速度越來越快,遊戲難度越來越大;
2。 中間顯示為第三章的同心圓,同心圓每被針射中一次,換一次隨機顏色;
3。 嘗試在畫面右邊新增一位玩家,實現雙人版的見縫插針遊戲。
讀者也可以參考本章的開發思路,嘗試設計並分步驟實現旋轉炮臺射擊氣球的小遊戲。