1. 程式人生 > 其它 >又是櫻花盛開的季節,使用小烏龜來畫一顆櫻花樹吧

又是櫻花盛開的季節,使用小烏龜來畫一顆櫻花樹吧

【閱讀全文】

後唐李煜曾說道,櫻花落盡春將困,鞦韆架下歸時。漏暗斜月遲遲,花在枝。櫻花落盡的時候春天也將過去了,鞦韆架下歸去時。天上的斜月姍姍來遲,花還在枝頭。

關於python畫圖相關的,我們一直使用的是turtle來畫,用專業的非標準庫來做專業的事兒。將需要使用到的內建庫或者非標準庫全部都匯入到當前的程式碼塊中。

from time import sleep  # 用於控制程式執行時的阻塞停頓
from turtle import *  # 繪圖相關介面
import random  # 生成隨機數

設定全域性需要初始化的物件,以及相關的全域性引數設定,這樣就不用在後面每畫一筆進行設定了。
但是畫布上面有一個箭頭一直無法消除,有知道的大佬煩請留言說一下解決辦法,感激不盡!

tle = Turtle()  # 初始化小烏龜畫筆物件
tle.hideturtle()  # 全域性隱藏畫筆
tle.clear()  # 清除螢幕
tle.speed(0)  # 設定畫筆速度為0,也就是最快的畫筆速度
scr = Screen()  # 初始化螢幕物件
getscreen().tracer(30, 0)  # 返回一個TurtleScreen類的繪圖物件,並開啟繪畫,加速繪畫過程
scr.screensize(bg='white')  # 設定背景顏色

開始繪製,設定開始時的畫筆相關的屬性或引數。

tle.left(90)
tle.up()
tle.backward(150)
tle.down()
tle.color('sienna')

接下來是編寫兩個函式,一個是用於生成樹枝/樹幹並在對應的樹枝旁邊畫上櫻花。另一個則是在櫻花樹的地上鋪滿掉落的櫻花,這樣的思路來源於CSDN部落格平臺,向大佬遞茶!

編寫畫櫻花樹的樹枝/樹幹部分/樹枝櫻花的函式draw_branch_flower。

def draw_branch_flower(len):
    '''
    繪製樹枝/花函式
    :param len: 樹枝長度
    :return:
    '''
    sleep(0.0005)
    if len > 3:
        if 8 <= len <= 12:
            if random.randint(0, 2) == 0:
                tle.color('snow')
            else:
                tle.color('lightcoral')
            tle.pensize(len / 3)
        elif len < 8:
            if random.randint(0, 1) == 0:
                tle.color('snow')
            else:
                tle.color('lightcoral')
            tle.pensize(len / 2)
        else:
            tle.color('sienna')
            tle.pensize(len / 10)
        tle.forward(len)
        a = 1.5 * random.random()
        tle.right(20 * a)
        b = 1.5 * random.random()
        draw_branch_flower(len - 10 * b)
        tle.left(40 * a)
        draw_branch_flower(len - 10 * b)
        tle.right(20 * a)
        tle.up()
        tle.backward(len)
        tle.down()

編寫畫櫻花樹旁邊的地上的花瓣函式draw_ground_flower。

def draw_ground_flower(flower_num):
    '''
    繪製地上掉落的花瓣
    :param flower_num: 花瓣數量
    :return:
    '''
    for i in range(flower_num):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        tle.up()
        tle.forward(b)
        tle.left(90)
        tle.forward(a)
        tle.down()
        tle.color('lightcoral')
        tle.circle(1)
        tle.up()
        tle.backward(a)
        tle.right(90)
        tle.backward(b)

呼叫櫻花樹相關的繪圖函式,快速完成繪圖過程。

draw_branch_flower(60)
draw_ground_flower(200)

使用exitonclick函式保持在繪畫完成時,視窗不會直接關閉。

scr.exitonclick()

以上就是櫻花樹的全部繪製過程了,完整的程式碼塊檔案請在公眾號內回覆'1001'獲取,直接執行即可。

【往期精彩】

Python 讀取PDF檔案為文字字元並轉換為音訊...

python 獲取最新房價資訊-以北京房價為例

辦公自動化:Image圖片轉換成PDF文件儲存...

python做一個微型美顏圖片處理器,十行程式碼即可完成...

用python做一個文字翻譯器,自動將中文翻譯成英文,超方便的!

小王,給這2000個客戶發一下節日祝福的郵件...

python 一行命令開啟網路間的檔案共享...

PyQt5 批量刪除 Excel 重複資料,多個檔案、自定義重複項一鍵刪除...

再見XShell,這款國人開源的終端命令列工具更nice!

python 表情包下載器,輕鬆下載上萬個表情包、鬥圖不用愁...

Python 自動清理電腦垃圾檔案,一鍵啟動即可...

有了jmespath,處理python中的json資料就變成了一種享受...