聖誕節即將到了,所以這回通過turtle模塊來編寫一個表白的小程序
開發時間:2019-12-15
開發工具:Sublime
開發模塊:turtle
這里用到了turtle庫的相關知識,如果不熟悉可以看我之前的博客:
首先,我們需要來創建一個函數來承載所有初始化數據,包括畫布的大小,畫筆的尺寸、顏色、還有畫筆的移動速度
以演示圖為例子,設置了一個800*600大小的畫布,紅色畫筆寬為5,速度為10
代碼如下所示:
def initdata(): 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循環來繪制,通過不斷偏轉方向的小線段組成
代碼如下:
def hart_arc(): for i in range(200): t.right(1) t.forward(2)
現在我們開始繪制圖形draw()
首先表白總要有表白者和被表白者吧,所以我們先創建name和sign來存儲名字
之后通過調用初始化函數來獲取相關信息
最后就可以操縱畫筆開始繪制。
先將畫筆移動到(0,-180)的位置,也就是愛心的下部尖端,這就用到了剛剛創建的移動函數,
之后控制畫筆調整方向,移動224的距離繪制完成前面的愛心下部的右側邊
然后繪制愛心上半部分,調用hart_arc()繪制了愛心上半部分左側,
然后調整方向,畫筆向左偏轉120度,再繪制另一個半圓
最后畫筆返回初始位置,畫好了第一個愛心,將其填充為粉色。
同理可畫第二個愛心,到最后來一個“一箭雙❤”就可以了
繪制完成之后,我們就要輸出剛剛記載的兩個人名了
這需要用到write()函數
代碼如下:
def draw(): 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")
這樣表白的代碼就制作完成了
感謝大家支持,總體代碼如下:
import turtle as t import time def initdata(): t.setup(800,600) t.pencolor('red') t.pensize(5) t.speed(10) def move_pen(x,y): t.hideturtle() t.up() t.goto(x,y) t.down() t.showturtle() def hart_arc(): for i in range(200): t.right(1) t.forward(2) def draw(): 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") def main(): draw() time.sleep(5) if __name__ == '__main__': main()