使用Python的turtle模組繪製美麗的櫻花樹

努力的小雨發表於2024-04-07

引言

Python的turtle模組是一個直觀的圖形化程式設計工具,讓使用者透過控制海龜在螢幕上的移動來繪製各種形狀和圖案。turtle模組的獨特之處在於其簡潔易懂的操作方式以及與使用者的互動性。使用者可以輕鬆地透過使用諸如前進、後退、左轉、右轉等基本命令,來編寫程式控制海龜的行動路徑,從而創造出豐富多彩的作品。就像是給海龜下達指令,讓它在螢幕上留下痕跡一樣。

在接下來的文章中,我將透過一個生動的例子——繪製一幅櫻花樹圖畫——來深入探討turtle模組的實用性。

瞭解turtle模組

在建立這幅生動的櫻花樹圖畫時,我們將會利用turtle模組的一系列主要功能,這些功能包括:

  1. 初始化和設定畫布
    • T.Turtle():建立一個新的海龜物件,用於繪製圖形。
    • T.Screen():獲取當前的畫布物件,並可以對其進行操作,比如設定背景顏色。
    • w.screensize(bg='wheat'):設定畫布的背景顏色為小麥色,為櫻花樹提供自然背景。
  2. 控制海龜的行為
    • t.hideturtle():隱藏海龜圖示,讓繪製更加乾淨。
    • t.speed(0):設定海龜的移動速度為最快,加快繪圖過程。
    • t.penup()t.pendown():控制海龜的筆是否接觸畫布,用於開始和結束繪製。
  3. 繪製圖形
    • t.forward(branch)t.backward(branch):讓海龜向前或向後移動,繪製樹枝。
    • t.right(20 * a)t.left(40 * a):控制海龜的轉向,用於繪製樹枝分叉。
    • t.color('lightcoral')t.color('sienna'):設定海龜筆的顏色,用於繪製不同顏色的櫻花樹枝。
  4. 遞迴繪製櫻花樹
    • Tree(branch, t):定義了一個遞迴函式,用於繪製櫻花樹的樹幹和分支。遞迴是程式設計中一種常見的技術,它可以簡化重複性的程式碼,並使得繪製複雜的結構(如樹木)變得簡單。
  5. 繪製櫻花花瓣
    • Petal(m, t):定義了一個函式,用於繪製多個櫻花花瓣。透過迴圈和隨機數生成,模擬櫻花瓣隨風飄落的效果。

實現程式碼

import turtle as T
import random

# 繪製櫻花樹的函式,引數為樹枝長度和繪圖海龜物件
def draw_tree(trunk_length, turtle_obj):
    if trunk_length > 3:
        # 根據樹枝長度決定顏色和粗細
        if 8 <= trunk_length <= 12:
            color = 'snow' if random.randint(0, 1) == 0 else 'lightcoral'
            turtle_obj.pensize(trunk_length / 3)
        elif trunk_length < 8:
            color = 'snow' if random.randint(0, 1) == 0 else 'lightcoral'
            turtle_obj.pensize(trunk_length / 2)
        else:
            color = 'sienna'
            turtle_obj.pensize(trunk_length / 10)
        turtle_obj.color(color)  # 設定顏色
        turtle_obj.forward(trunk_length)  # 向前畫樹枝
        angle_a = 20 * random.random()  # 隨機角度a
        turtle_obj.right(angle_a)  # 向右轉
        branch_reduction = 10 * random.random()  # 隨機減少量
        draw_tree(trunk_length - branch_reduction, turtle_obj)  # 遞迴畫子樹枝
        turtle_obj.left(2 * angle_a)  # 向左轉
        draw_tree(trunk_length - branch_reduction, turtle_obj)  # 遞迴畫子樹枝
        turtle_obj.right(angle_a)  # 迴轉角度a
        turtle_obj.penup()  # 提起筆
        turtle_obj.backward(trunk_length)  # 向後畫樹枝
        turtle_obj.pendown()  # 放下筆

# 繪製櫻花花瓣的函式,引數為花瓣數量和繪圖海龜物件
def draw_petals(petal_count, turtle_obj):
    for _ in range(petal_count):
        turtle_obj.penup()  # 提起筆
        distance = 200 - 400 * random.random()  # 隨機花瓣落下的距離
        turtle_obj.forward(distance)  # 向前移動
        turtle_obj.left(90)  # 轉向
        turtle_obj.forward(10 - 20 * random.random())  # 隨機花瓣大小
        turtle_obj.down()  # 放下筆
        turtle_obj.color('lightcoral')  # 設定花瓣顏色
        turtle_obj.begin_fill()  # 開始填充顏色
        turtle_obj.circle(1)  # 畫一個圓形花瓣
        turtle_obj.end_fill()  # 結束填充顏色
        turtle_obj.penup()  # 提起筆
        turtle_obj.backward(distance)  # 向後移動
        turtle_obj.right(90)  # 轉向

# 初始化繪圖環境
turtle_obj = T.Turtle()
turtle_screen = turtle_obj.getscreen()
turtle_screen.bgcolor("wheat")  # 設定背景顏色為小麥色
turtle_obj.hideturtle()  # 隱藏海龜圖示
turtle_obj.speed(0)  # 設定繪製速度為最快
turtle_obj.left(90)  # 轉向
turtle_obj.penup()  # 提起筆
turtle_obj.backward(150)  # 向後移動
turtle_obj.pendown()  # 放下筆
turtle_obj.color("sienna")  # 設定畫筆顏色為赭色

# 繪製櫻花樹和花瓣
draw_tree(60, turtle_obj)
draw_petals(200, turtle_obj)

# 點選視窗關閉程式
turtle_screen.exitonclick()

總結

透過本文的學習和實踐,我們掌握了使用Python的turtle模組來創作櫻花樹圖畫的技巧,這個過程中,我們深入瞭解了turtle模組的基本命令和遞迴等程式設計概念,這些都是構建更復雜專案的重要基礎。也希望讀者能夠將這些知識應用到自己的專案中。無論是繪製其他自然景物還是創造抽象藝術作品,都可以藉助turtle模組來實現。

相關文章