python turtle 繪製創意梅花

"""
author:魏振東
data:2019.10.25
func:繪製創意圖形
"""

from turtle import *
from random import *

#畫雪花
def drawSnow():
    hideturtle()
    pensize(2)
    for i in range(20):
        pencolor("white")
        penup()
        setx(randint(-640,640))
        sety(randint(-400,400))
        pendown()
        dens=randint(8,12)
        snowsize=randint(10,14)
        for j in range(dens):
            forward(snowsize)
            backward(snowsize)
            right(360/dens)
# 位移函數
def gotopos(x, y):
    up()
    goto(x, y)
    down()
    ht()

def apply_rules(path, rules):
    L = [_ for _ in path]
    for i in range(len(L)):
        symbol = L[i]
        if symbol == 'F':
            L[i] = rules[symbol]
        if symbol == 'X':
            L[i] = rules[symbol]
    path = ''.join(L)
    return path


def draw_path(path):
    posList, angleList = [], []
    for symbol in path:
        if symbol == 'F':
            forward(length)
        elif symbol == '+':
            left(angle)
        elif symbol == '-':
            rt(angle)
        elif symbol == '[':
            posList.append(pos())
            angleList.append(heading())
        elif symbol == 'a':
            pensize(3)
            color("black")
        elif symbol == 'b':
            pensize(2)
            color("black")
        elif symbol == 'c':
            pensize(2)
            color("black")
        elif symbol == ']':
            up()
            home()
            goto(posList.pop())
            left(angleList.pop())
            down()

# 寫字
def writez(x, y, str_, size=56, font="華文行楷"):
    gotopos(x, y)
    write(str_, font=(font, size))

# 畫布
setup(1280, 800)
speed(5)
bgcolor("Silver")

# 題字
color("black")
writez(-213, -210, "梅", 196)
writez(-50, 100, "宋")
writez(80, 20, "王")
writez(33, -30, "安", 62)
writez(-18, -95, "石", 78)

# 寫詩
color("black")
s = "牆角數枝梅"
s2 = "凌寒獨自開"
s3 = "遙知不是雪"
s4 = "爲有暗香來"
for i in range(len(s)):
    writez(560, 350 - i * 50, s[i], 36)
for i in range(len(s2)):
    writez(510, 320 - i * 50, s2[i], 36)
for i in range(len(s3)):
    writez(460, 290 - i * 50, s3[i], 36)
for i in range(len(s4)):
    writez(410, 260 - i * 50, s4[i], 36)

# 畫雪
drawSnow()

# 畫梅
gotopos(249, -26)
speed(0)
gotopos(-650, -100)
length = 6
path = 'F'
angle = 27
rules = {
    'F': 'aFF[b-F++F][c+F--F]c++F--F',
    'X': 'aFF+[b+F]+[c-F]'
}
for _ in range(4):
    path = apply_rules(path, rules)
draw_path(path)
done()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章