用python的turtle,畫愛心,表白,求婚完整程式碼,海龜作圖創意

2020-10-30 14:00:40

當我們學了turtle後,就想嘗試為自己心裡喜歡的人畫一顆一顆愛心,想用程式碼逗自己的小豬豬女孩開心,表達自己的愛意,那麼福利來了,動動小手指,複製貼上即可,不過有些地方需要適當修改,快給自己心愛的女孩看看吧💖!!!

import turtle
import time

# 實現清屏
def clear_screen():
    turtle.penup()             #畫筆擡起
    turtle.goto(0,0)        #定位到(0,0)
    turtle.color('white')
    turtle.pensize(800)         #畫筆粗細
    turtle.pendown()           #畫筆落下
    turtle.setheading(0)        #設定朝向
    turtle.fd(300)       #前進
    turtle.bk(600)      #後退

# 初始化海龜的位置
def go_start(x, y, state):
    turtle.pendown() if state else turtle.penup()
    turtle.goto(x, y)

#畫線,state為真時海龜回到原點,為假時不回到原來的出發點
def draw_line(length, angle, state):
    turtle.pensize(1)
    turtle.pendown()
    turtle.setheading(angle)
    turtle.fd(length)
    turtle.bk(length) if state else turtle.penup()
    turtle.penup()

# 畫出發射愛心的小人
def draw_people(x, y):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.pensize(2)
    turtle.color('black')
    turtle.setheading(0)
    turtle.circle(35, 360)
    turtle.penup()
    turtle.pensize(3)
    turtle.setheading(90)
    turtle.fd(45)
    turtle.setheading(180)
    turtle.fd(20)
    turtle.setheading(0)
    turtle.fd(35)
    turtle.pendown()
    turtle.circle(4, 360)
    turtle.penup()
    turtle.goto(x, y)
    turtle.pensize(2)
    turtle.setheading(0)
    turtle.fd(20)
    turtle.setheading(90)
    turtle.fd(20)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.circle(5, 180)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(20)
    turtle.setheading(0)
    turtle.fd(35)
    turtle.setheading(60)
    turtle.fd(10)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(40)
    turtle.setheading(0)
    turtle.fd(35)
    turtle.setheading(-60)
    turtle.fd(10)
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(-90)
    turtle.pendown()
    turtle.fd(60)
    turtle.setheading(-135)
    turtle.fd(60)
    turtle.bk(60)
    turtle.setheading(-45)
    turtle.fd(30)
    turtle.setheading(-135)
    turtle.fd(35)
    turtle.penup()


# 畫愛心
def draw_heart(size):
    turtle.color('red', 'pink')
    turtle.pensize(2)
    turtle.pendown()
    turtle.setheading(150)
    turtle.begin_fill()
    turtle.fd(size)
    turtle.circle(size * -3.745, 45)
    turtle.circle(size * -1.431, 165)
    turtle.left(120)
    turtle.circle(size * -1.431, 165)
    turtle.circle(size * -3.745, 45)
    turtle.fd(size)
    turtle.end_fill()

# 畫箭羽
def draw_feather(size):
    angle = 30  # 箭的傾角
    feather_num = size // 6    # 羽毛的數量
    feather_length = size // 3     # 羽毛的長度
    feather_gap = size // 10     # 羽毛的間隔
    for i in range(feather_num):
        draw_line(feather_gap, angle + 180, False)  # 箭柄,不折返
        draw_line(feather_length, angle + 145, True)  # 羽翼,要折返
    draw_line(feather_length, angle + 145, False)
    draw_line(feather_num * feather_gap, angle, False)
    draw_line(feather_length, angle + 145 + 180, False)
    for i in range(feather_num):
        draw_line(feather_gap, angle + 180, False)   # 箭柄,不折返
        draw_line(feather_length, angle - 145, True)    # 羽翼,要折返
    draw_line(feather_length, angle - 145, False)
    draw_line(feather_num * feather_gap, angle, False)
    draw_line(feather_length, angle - 145 + 180, False)

# 畫一箭穿心,最後箭的頭沒有畫出來,用海龜來代替
def arrow_heart(x, y, size):
    go_start(x, y, False)
    draw_heart(size * 1.15)
    turtle.setheading(-150)
    turtle.penup()
    turtle.fd(size * 2.2)
    draw_heart(size)
    turtle.penup()
    turtle.setheading(150)
    turtle.fd(size * 2.2)
    turtle.color('black')
    draw_feather(size)
    turtle.pensize(4)
    turtle.setheading(30)
    turtle.pendown()
    turtle.fd(size * 2)
    turtle.penup()
    turtle.setheading(29)
    turtle.fd(size * 5.7)
    turtle.color('black')
    turtle.pensize(4)
    turtle.pendown()
    turtle.fd(size * 1.2)

#顯示倒數3,2,1
def draw_0(i):
    turtle.speed(0)
    turtle.penup()
    turtle.hideturtle()  # 隱藏箭頭顯示
    turtle.goto(-50, -100)
    turtle.color('red')
    write = turtle.write(i, font=('宋體', 200, 'normal'))
    time.sleep(1)

# 顯示文字
def draw_1():
    turtle.penup()
    turtle.hideturtle()    #隱藏箭頭顯示
    turtle.goto(-250, 0)
    turtle.color('red')
    write = turtle.write('臭豬豬,接招', font=('宋體', 60, 'normal'))
    time.sleep(2)

# 顯示發射愛心的小人兒
def draw_2():
    turtle.speed(3)
    draw_people(-250, 20)
    turtle.penup()
    turtle.goto(-150, -30)
    draw_heart(14)
    turtle.penup()
    turtle.goto(-20, -60)
    draw_heart(25)
    turtle.penup()
    turtle.goto(205, -100)
    draw_heart(43)
    turtle.hideturtle()
    time.sleep(2)

def draw_3():
    turtle.penup()
    turtle.hideturtle()  # 隱藏箭頭顯示
    turtle.goto(-220, 50)
    turtle.color('red')
    write = turtle.write('💕不離', font=('宋體', 60, 'normal'))
    turtle.penup()
    turtle.goto(0, -50)
    write = turtle.write('不棄💕', font=('宋體', 60, 'normal'))
    time.sleep(2)


# 顯示一箭穿心
def draw_4():
    turtle.speed(10)
    turtle.penup()
    turtle.goto(-210, -200)
    turtle.color('blue')
    turtle.pendown()
    turtle.write('YRB      CQZ', font=('wisdom', 50, 'normal'))
    turtle.speed(1)
    turtle.penup()
    turtle.color("red")
    turtle.goto(-31, -200)
    turtle.write('❤',font=('wisdom', 50, 'normal'))
    arrow_heart(20, -60, 51)
    turtle.showturtle()


number=[3,2,1]    #儲存顯示介面倒數數位1,2,3

if __name__ == '__main__':
    turtle.setup(900, 500)     #調畫布的尺寸
    for i in number:
        draw_0(i)
        clear_screen()
    draw_1()
    clear_screen()
    draw_2()
    clear_screen()
    draw_3()
    clear_screen()
    draw_4()
    turtle.done()

部分效果展示:
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述