聖誕節即将到了,是以這回通過turtle子產品來編寫一個表白的小程式

開發時間:2019-12-15
開發工具:Sublime
開發子產品:turtle
這裡用到了turtle庫的相關知識,如果不熟悉可以看我之前的部落格:
首先,我們需要來建立一個函數來承載所有初始化資料,包括畫布的大小,畫筆的尺寸、顔色、還有畫筆的移動速度
以示範圖為例子,設定了一個800*600大小的畫布,紅色畫筆寬為5,速度為10
代碼如下所示:
definitdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10)
設定好相關屬性後,就可以開始作畫了
首先畫筆位于正中央,若想移動畫筆将會在畫布上留下痕迹,也就是畫上了線條,
但是有些線條,畫作本身并不需要,這就需要做到讓畫筆移動的同時,畫布不留痕迹
需要用到up()和down();兩個函數,如直譯一般作用為擡起畫筆和放下畫筆
是以操作為,擡起畫筆——移動到指定地方——放下畫筆
代碼如下所示:
ef move_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle()
注意:hideturtle()和showturtle()為隐藏畫筆和顯示畫筆。對畫作本身毫無影響
繪制示範圖中,最難的部分在哪裡?
一定是愛心上半部分的兩個半圓,是以為友善,我們單獨講這一部分提出來做一個繪制半圓的函數
在turtle庫中并沒有繪制曲線的函數,最接近的也隻有畫圓了。
不過我們可以通過割圓法來繪制,也就是将這一段圓弧視為一個邊長很短的多邊形
是以我們通過for循環來繪制,通過不斷偏轉方向的小線段組成
代碼如下:
defhart_arc():for i in range(200):
t.right(1)
t.forward(2)
現在我們開始繪制圖形draw()
首先表白總要有表白者和被表白者吧,是以我們先建立name和sign來存儲名字
之後通過調用初始化函數來擷取相關資訊
最後就可以操縱畫筆開始繪制。
先将畫筆移動到(0,-180)的位置,也就是愛心的下部尖端,這就用到了剛剛建立的移動函數,
之後控制畫筆調整方向,移動224的距離繪制完成前面的愛心下部的右側邊
然後繪制愛心上半部分,調用hart_arc()繪制了愛心上半部分左側,
然後調整方向,畫筆向左偏轉120度,再繪制另一個半圓
最後畫筆傳回初始位置,畫好了第一個愛心,将其填充為粉色。
同理可畫第二個愛心,到最後來一個“一箭雙❤”就可以了
繪制完成之後,我們就要輸出剛剛記載的兩個人名了
這需要用到write()函數
代碼如下:
defdraw():
name=input("請輸入表白姓名:")
sign=input("請輸入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")
這樣表白的代碼就制作完成了
感謝大家支援,總體代碼如下:
importturtle as timporttimedefinitdata():
t.setup(800,600)
t.pencolor('red')
t.pensize(5)
t.speed(10)defmove_pen(x,y):
t.hideturtle()
t.up()
t.goto(x,y)
t.down()
t.showturtle()defhart_arc():for i in range(200):
t.right(1)
t.forward(2)defdraw():
name=input("請輸入表白姓名:")
sign=input("請輸入你的大名:")
initdata()
move_pen(0,-180)
t.left(140)
t.fillcolor("pink")
t.begin_fill()
t.forward(224)
hart_arc()
t.left(120)
hart_arc()
t.forward(224)
t.end_fill()
move_pen(x=70, y=160)
t.left(185)
t.circle(-110,185)
t.forward(50)
move_pen(-180,-180)
t.left(180)
t.forward(600)
move_pen(0,50)
t.hideturtle()
t.color('#CD5C5C', 'red')
t.write(name, font=('Arial', 20, 'bold'), align="center")
t.color('red', 'pink')
time.sleep(2)
move_pen(220, -180)
t.hideturtle()
t.write(sign, font=('Arial', 20), align="center")defmain():
draw()
time.sleep(5)if __name__ == '__main__':
main()