python-turtle-畫雪花-2種方法及效果的詳解


1.方法一:

代碼:

#python3.8
#xuguojun
#2020.1.30
#導出模塊
import turtle as t
import random as r
#定義畫雪
def drawsnow(): 
    t.ht()  #隱藏筆頭,ht=hideturtle
    t.pensize(2)  #定義筆頭大小
    for i in range(50): #50,其實畫49朵雪花 
        t.pencolor("white") #定義畫筆顏色為白色,其實就是雪花為白色
        t.pu() #提筆,pu=penup
        t.setx(r.randint(-350,350)) #定義x坐標,隨機從-350到350之間選擇
        t.sety(r.randint(1,350)) #定義y坐標,注意雪花一般在地上不會落下,所以定義是從1開始
        t.pd() #落筆,pd=pendown
        dens = 6 #雪花瓣數設為6 
        snowsize = r.randint(2,12) #定義雪花大小
        for j in range(dens): #就是6,那就是畫5次,也就是一個雪花五角星
            #t.forward(int(snowsize))  #int()取整數
            t.fd(int(snowsize))
            t.backward(int(snowsize))
            #t.bd(int(snowsize))  #注意沒有bd=backward,但有fd=forward,小bug
            t.right(int(360/dens))  #轉動角度
            
#畫地面線:
def drawgroud(): 
    t.ht() #隱藏畫筆,t.hideturtle() 
    for i in range(r.randint(10,15)): #隨機畫幾條地面線,但在10和15之間
    #for i in range(10): #每次操作只畫10條地面線
        x=r.randint(-400,350) 
        y=r.randint(-280,-1) 
        t.pencolor("white") 
        t.pu() #提筆pu=penup
        t.goto(x,y) #去這個坐標
        t.pd() #落筆pd=pendown
        t.fd(r.randint(40,100))  #fd=forward向前畫大小,隨機從40~100選

t.setup(800,600,200,200)#窗口大小和位置
t.tracer(True)   #雪花和背景繪制的過程,true=就是慢慢看它畫雪
t.bgcolor("lightpink") #lightpink=輕粉色,天藍色lightblue=#B0E0E6
t.speed(0.1) #畫筆的速度
drawsnow() #執行畫雪
drawgroud() #執行畫地面線
t.done() #完成
View Code

 

效果圖:

2.方法二:

代碼:

#python3.8
#xuguojun
#2020.1.30
#導出模塊,這樣導出比代碼較簡潔,但是注意r和后面RGB的r,所以我改為d代替R(r)
import turtle as t
import random as r
#繪制雪花
s=30 #定義30個
def snow(s):
    t.ht()  #ht=hideturtle,隱藏畫筆和軌跡
    t.speed(500) #設置畫筆的速度,快
    t.pensize(2) #設置筆頭大小
    for i in range(s):
        d = r.random() #隨機定義顏色
        g = r.random()
        b = r.random()
        t.pencolor(d, g, b) #隨機顏色定義,畫筆的顏色,注意這里本來是rgb,但是r定義過random,所以用d代替
        t.pu() #pu=penup,提筆
        t.goto(r.randint(-350, 350), r.randint(1, 270)) #坐標和x和y值隨機取值及范圍
        t.pd() #pd=pendown,落筆
        dens = r.randint(8, 12) #隨機定義雪花的花瓣數
        snowsize = r.randint(10, 14) #隨機定義雪花的大小
        for _ in range(dens):
            t.forward(snowsize)  # 向當前畫筆方向移動snowsize像素長度
            t.backward(snowsize)  # 向當前畫筆相反方向移動snowsize像素長度
            t.right(360 / dens)  # 順時針移動360 / dens度

#繪制地面線
g=50 #定義50條
def ground(g):
    t.ht() #ht=hideturtle,隱藏畫筆和軌跡
    t.speed(500) #畫筆的速度
    for i in range(g):
        t.pensize(r.randint(5, 10)) #隨機畫筆大小,從5~10選
        x = r.randint(-400, 350) #x坐標軸的隨機從-400到350選
        y = r.randint(-280, -1) 
        d = -y / 280 #注意這里的r要該d
        g = -y / 280 #定義隨機數dgb,與y隨機數掛鈎
        b = -y / 280
        t.pencolor(d, g, b) #定義顏色,r改為d,因為r在模塊導出時定義random的
        t.penup()  #pu=penup,提筆
        t.goto(x, y)  # 讓畫筆移動到此位置
        t.pendown()  # pd=pendown,落筆
        t.forward(r.randint(40, 100))  # 眼當前畫筆方向向前移動40~100距離,fd=forward

#-----熟悉以下2中方法,啟動畫畫------
# 方法一:主函數法
def main():
    t.setup(800, 600, 500, 0) #窗口大小和位置,x=500,y=0,代表坐標
    t.bgcolor("black") #背景顏色為黑色
    snow(s) #代表數量
    ground(g) #代表數量
    t.mainloop() #循環掛起
 
main()

#方法二 簡潔法
#將方法一,注釋掉,去掉下面的注釋,啟動方法二,即可

'''
t.setup(800, 600, 500, 0) #窗口大小和位置,x=500,y=0,代表坐標
t.bgcolor("black") #背景顏色為黑色
snow(s) #代表數量
ground(g) #代表數量
t.done() #如果沒有這個,結束后自動關閉窗口,有了,就不關閉。
'''
View Code

 

效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM