系列文章
序號 | 直達鏈接 |
---|---|
Tkinter | |
1 | Python李峋同款可寫字版跳動的愛心 |
2 | Python跳動的雙愛心 |
3 | Python藍色跳動的愛心 |
4 | Python動漫煙花 |
5 | Python粒子煙花 |
Turtle | |
1 | Python滿屏飄字 |
2 | Python藍色流星雨 |
3 | Python金色流星雨 |
4 | Python漂浮愛心 |
5 | Python愛心光波① |
6 | Python愛心光波② |
7 | Python滿天繁星 |
8 | Python五彩氣球 |
9 | Python白色飄雪 |
10 | Python七彩花朵 |
11 | Python 3D星空 |
12 | Python大雪紛飛 |
13 | Python一閃一閃亮星星 |
14 | Python愛心泡泡 |
15 | Python愛心射線 |
16 | Python圣誕禮物 |
17 | Python禮物圣誕樹 |
18 | Python浪漫星空 |
19 | Python飛舞蝙蝠 |
20 | Python萬圣禮物 |
21 | Python藍色飄雪 |
Pygame | |
1 | Python跨年煙花 |
2 | Python炫酷煙花 |
3 | Python黑客帝國字母雨 |
敬請期待…… |
寫在前面
Python繪制七彩花朵動畫的完整代碼。
技術需求
-
Turtle 圖形庫:
- 利用
turtle
模塊實現圖形繪制與動畫控制。作為 Python 的標準圖形化編程庫,turtle
提供了直觀的繪圖功能。 - 通過
Pen
類創建畫筆對象,靈活調整其位置、顏色、方向和路徑,以繪制花朵及其動態效果。
- 利用
-
隨機數生成:
- 借助
random
模塊生成隨機數,使花朵的位置、顏色、大小及運動速度等屬性隨機化,提升動畫的多樣性和趣味性。 random.randint()
和random.uniform()
分別用于生成整數和浮點數,確保花朵屬性的隨機分配。
- 借助
-
數學函數:
- 運用
math
模塊中的sin()
函數,模擬花朵的左右擺動。借助正弦波,實現花朵在水平方向上的周期性運動,營造自然漂浮的效果。
- 運用
-
面向對象編程(OOP):
- 定義
Flower
類,每朵花均為該類的實例。此類包含花朵的屬性(如位置、顏色、大小)和方法(如移動、繪制),賦予每個花朵獨立的行為和狀態。
- 定義
-
動畫與畫面更新:
- 使用
tu.tracer(0)
和tu.update()
調節動畫更新頻率,消除畫面閃爍,確保動畫流暢。 - 在每次畫面更新前調用
t.clear()
清除先前內容,實現動態變化效果。
- 使用
-
無限循環與事件驅動:
- 采用
while True
實現無限循環,持續更新和繪制花朵,保證動畫連續運行。 tu.mainloop()
啟動主事件循環,維持圖形窗口開啟狀態,直至用戶關閉窗口。
- 采用
完整代碼
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red','skyblue','orange','yellow','lime','pink','violet']
class Flower(): #每個花朵(花朵類)def __init__(self):self.r = ra.randint(8,12) #花朵的半徑self.x = ra.randint(-1000,1000) #花朵的橫坐標self.y = ra.randint(-500,500) #花朵的縱坐標self.f = ra.uniform(-3.14,3.14) #花朵左右移動呈正弦函數self.speed = ra.randint(5,10) #花朵移動速度self.color = ra.choice(colors) #花朵的顏色self.outline = 1 #花朵的外框大小(可不要)def move(self): #花朵移動函數if self.y >= -500: #當花朵還在畫布中時self.y -= self.speed #設置上下移動速度self.x += self.speed * math.sin(self.f) #設置左右移動速度self.f += 0.1 #可以理解成標志,改變左右移動的方向else: #當花朵漂出了畫布時,重新生成一個花朵self.r = ra.randint(8,12)self.x = ra.randint(-1000,1000)self.y = 500self.f = ra.uniform(-3.14,3.14)self.speed = ra.randint(5,10)self.color = ra.choice(colors)self.outline = 1
……
代碼分析
這段代碼利用 Python 的 Turtle 圖形庫和隨機模塊,通過定義一個花朵類來模擬屏幕上隨機漂浮的花朵。核心在于主循環中隨機生成花朵的位置、顏色、大小及運動方式,使花朵呈現出自由飄動的效果。以下是代碼的詳細分析。
1. 模塊導入與初始設置
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
turtle
模塊用于圖形繪制和動畫,此處別名為tu
。random
模塊生成隨機數,支持花朵的隨機生成與運動。math
模塊提供數學函數,如正弦函數 (math.sin
) 控制花朵的左右移動。tu.setup(1.0, 1.0)
設置畫布為全屏模式。t = tu.Pen()
創建 Pen 對象用于繪圖,t.ht()
隱藏畫筆箭頭。colors
列表存儲花朵可能的顏色,供隨機選擇。
2. 花朵類(Flower)
花朵類是動畫的核心,描述每朵花的屬性和行為。
2.1 構造方法(__init__
)
class Flower:def __init__(self):self.r = ra.randint(8, 12) # 花朵半徑self.x = ra.randint(-1000, 1000) # 橫坐標self.y = ra.randint(-500, 500) # 縱坐標self.f = ra.uniform(-3.14, 3.14) # 左右移動角度self.speed = ra.randint(5, 10) # 移動速度self.color = ra.choice(colors) # 顏色self.outline = 1 # 外框大小
self.r
設定花朵半徑,范圍 8 至 12。self.x
和self.y
分別設定橫縱坐標,范圍分別為 -1000 至 1000 和 -500 至 500。self.f
決定左右搖動程度,范圍 -π 至 π。self.speed
設定移動速度,范圍 5 至 10。self.color
隨機選擇顏色。self.outline
固定外框大小為 1。
2.2 移動方法(move
)
該方法更新花朵坐標,通過正弦函數實現水平波動運動。
self.y -= self.speed
實現向下移動。self.x += self.speed * math.sin(self.f)
通過正弦函數實現周期性左右擺動。self.f += 0.1
更新方向,改變擺動周期。- 若
self.y < -500
,表示花朵移出畫布,重新生成并重置縱坐標為 500。
2.3 繪制方法(draw
)
控制是否繪制路徑,移動到初始位置,設置方向和顏色,填充形狀,繪制花瓣。
t.penup()
和t.pendown()
控制繪制路徑。t.goto(self.x, self.y)
移動至初始位置。t.setheading(self.x)
設置方向。t.color(self.color)
設置顏色。t.begin_fill()
和t.end_fill()
填充形狀。for i in range(5):
循環繪制花瓣,使用t.circle(self.r, extent=144)
繪制圓弧形花瓣,形成花朵整體形態。
3. 主程序
Flowers
列表存儲所有花朵對象。for i in range(100):
循環創建 100 個花朵對象。tu.bgcolor('black')
設置背景色為黑色,突出花朵顏色。
4. 動畫循環
tu.tracer(0)
禁用自動更新,避免閃爍,提高效率。t.clear()
清除舊圖形。for i in range(50):
控制每幀 50 朵花的移動和繪制。Flowers[i].move()
和Flowers[i].draw()
分別移動和繪制花朵。tu.update()
更新畫面顯示花朵。
5. 事件循環
tu.mainloop()
啟動主事件循環,持續顯示窗口并響應輸入。
6. 總結
此代碼通過隨機生成、運動和繪制花朵,實現了動態漂浮效果。每次運行時花朵表現不同,結合 turtle
庫和 random
模塊,展示了 Python 在圖形和動畫編程中的能力。
寫在后面
我是一只有趣的兔子,感謝你的喜歡!