不要給糖果制造麻煩,用Python繪制有趣的萬圣節(jié)南瓜怪物
今
日
雞
湯
關(guān)于萬圣節(jié)
萬圣節(jié)又稱諸圣節(jié),是每年11月1日的西方傳統(tǒng)節(jié)日。萬圣節(jié)前夕的10月31日是這個(gè)節(jié)日最熱鬧的時(shí)刻。在漢語中,萬圣節(jié)前夕經(jīng)常被用來(Halloween)被解讀為萬圣節(jié)(All Saints' Day)。
為了慶祝萬圣節(jié)的到來,孩子們會(huì)打扮成各種可愛的鬼魂,一個(gè)接一個(gè)地敲門,要求得到糖果,否則他們會(huì)制造麻煩。與此同時(shí),據(jù)說在這個(gè)晚上,各種各樣的鬼魂也會(huì)打扮成孩子們一起慶祝萬圣節(jié)的到來,人類會(huì)打扮成各種各樣的鬼魂,以使鬼魂更加和諧。
不知道什么時(shí)候,西方的節(jié)日一個(gè)個(gè)進(jìn)入了中國,比如情人節(jié)、圣誕節(jié)、感恩節(jié)、萬圣節(jié)...對(duì)于那些整天只知道上網(wǎng)的大學(xué)生來說,萬圣節(jié)的熟悉自然來自于游戲!比如wow:
魔獸世界
再或者MapleStory:
冒險(xiǎn)島
無論是魔獸世界帖子的發(fā)布時(shí)間,還是這個(gè)老式的2D冒險(xiǎn)島游戲,都代表著我們80后的時(shí)代已經(jīng)過去…
萬圣節(jié)和Python
最近因?yàn)楣ぷ髅?,?huì)轉(zhuǎn)載一些大佬的優(yōu)秀文章。今天,我有一些時(shí)間想寫點(diǎn)什么??斓饺f圣節(jié)了。既然我們堅(jiān)持python的學(xué)習(xí)態(tài)度,不如用Python畫一個(gè)萬圣節(jié)標(biāo)志。------南瓜怪吧!
提到python制圖,難免會(huì)提到turtle模塊,小海龜就是python中最熱門的制圖模塊,雖然它的作用無法與專業(yè)的制圖工具相比,但還是可以畫出一些簡(jiǎn)筆畫。之所以說turtle只能畫一些簡(jiǎn)筆畫,主要是因?yàn)閷W(xué)習(xí)技巧太淺薄,無法用它來做出高大的作品。另外一個(gè)原因當(dāng)然是我在制圖方面沒有天賦,從小藝術(shù)就不及格?。〉菫榱嘶貞?yīng)情況,還是咬緊牙關(guān)去編碼吧!
模塊turtle
首先,python的turtle庫還是小甲魚的。【Python零基礎(chǔ)入門學(xué)習(xí)】我已經(jīng)很久沒用了,有點(diǎn)生疏。讓我們帶你回顧一下模塊的使用。如果你想努力學(xué)習(xí)這個(gè)數(shù)據(jù)庫,建議去官網(wǎng)仔細(xì)看看相關(guān)內(nèi)容:https://docs.python.org/3.7/library/turtle.html但是如果你只是像我一樣從娛樂開始,你只需要幾分鐘就可以開始繪畫。在這里,我為大家整理了一些常用的方法:
參數(shù) |
表明 |
turtle.setup(width,height,startx,starty) |
起點(diǎn)坐標(biāo):與屏幕的坐標(biāo)相比,左上角默認(rèn)位于屏幕中央。 |
turtle.bgpic('xxx.png') |
將背景圖片添加到畫板上(記得使用png,jpg不支持) |
turtle.begin_fill() |
準(zhǔn)備開始添加圖形 |
turtle.end_fill() |
添充完成 |
turtle.goto(x,y) |
把烏龜帶到坐標(biāo)位置 絕對(duì)坐標(biāo) |
turtle.bk(d) |
海龜?shù)雇?海龜坐標(biāo) |
turtle.fd(d) |
海龜前行 |
turtle.circle(r,extent,steps) |
extent范圍(360為一圈),setps感覺空虛,表示正圓,數(shù)字表示邊數(shù)。 |
turtle.seth(angle) |
烏龜變成了絕對(duì)的坐標(biāo) |
turtle.left(angle) |
左轉(zhuǎn) |
turtle.right(angle) |
右轉(zhuǎn) |
penup() |
抬起畫筆 |
pendown() |
落下畫筆 |
pencolor() |
筆的顏色 |
pensize() |
筆的大小 |
turtle.colormode(mode) |
改變RGB模式,mode=1.0小數(shù)值,mode=255整數(shù)值 RGB顏色,例如white的RGB總值為:255.255.255,修改數(shù)值可改變顏色。 |
turtle.done() |
畫完后不要關(guān)窗 |
以上這些內(nèi)容,已經(jīng)完全夠大家強(qiáng)裝13了…
百鳥朝鳳圖
中國每天晚上的新聞聯(lián)播節(jié)目結(jié)束時(shí),總會(huì)播放主持人收到稿件的場(chǎng)景。為了告訴觀眾朋友,主持人說新(段)聞(子)已經(jīng)寫好了!既然要畫南瓜怪,就得先打草稿!
每個(gè)人都記得星爺唐伯虎點(diǎn)秋香中國,祝枝山一對(duì)百鳥向鳳圖(小雞吃米圖)至今給人留下深刻印象。所以今天,讓IT界的王伯虎給你帶來以下畫軸,名字:這南瓜有點(diǎn)冷
不知這幅畫會(huì)吸引多少粉絲來取關(guān),沒辦法他們一定是嫉妒我的才華!
祝枝山在IT界
實(shí)現(xiàn)turtle代碼代碼
第一,為了達(dá)到遮蓋畫功拙劣的效果,我們應(yīng)該在制圖之前,先選擇一幅略顯美觀的背景圖,比如:
背景圖南瓜怪
因?yàn)槟瞎喜皇钦龍A,所以我們應(yīng)該畫橢圓來達(dá)到效果。在我剛剛學(xué)習(xí)的內(nèi)容中,有一個(gè)turtle.circle(r,extent,steps)方法,其中steps參數(shù)值得我們重點(diǎn)分析,首先要看一段代碼:
1# -*- coding: utf-8 -*-
2# @Author : 王翔
3# @微信號(hào) : King_Uranus
4# @公眾號(hào) : Python清風(fēng)
5# @GitHub : https://github.com/BreezePython
6# @Date : 2019/10/30 22:31
7# @Software : PyCharm
8# @version :Python 3.7.3
9# @File : circle.py
10
11import turtle as t
12
13for i in range(3, 10, 2):
14 t.circle(100, steps=i)
15 t.left(90)
16
17t.circle(100, steps=30)
18
19for i in range(30): # 重復(fù)執(zhí)行i次
20 t.forward(20.93) # 移動(dòng)x個(gè)單位
21 t.left(12) # 左轉(zhuǎn)y度
22
23t.done()
效果如下:
steps參數(shù)在circle中
事實(shí)上,steps參數(shù)可以理解為多邊形的邊數(shù)和邊數(shù),所以邊數(shù)越多(30邊形),在我們眼里,圖形是否趨近和圓潤(rùn)?然后拆分思考,具體的實(shí)現(xiàn)能不能理解為畫筆畫一條直線,然后轉(zhuǎn)動(dòng)視角,再畫一條直線,這樣往復(fù),最后轉(zhuǎn)360度,形成一個(gè)圖形。同樣如下:
有些朋友會(huì)問1.74是從哪里來的?C = 2πr = 628628/360 = 1.7444… 所以每個(gè)度的邊長(zhǎng)是1.74。
1import turtle as t
2
3for i in range(360): # 重復(fù)執(zhí)行i次
4 t.forward(1.74) # 移動(dòng)x個(gè)單位
5 t.left(1) # 偏移弧度
6
7t.circle(100)
圓繪圖分析
知道了這一點(diǎn),下來就要考慮怎么畫橢圓了。之所以是圓,是因?yàn)槊窟叾家粯樱匀绻窟叾疾灰粯?,?huì)不會(huì)造成橢圓效果?現(xiàn)在我們用這種方式畫南瓜形狀:
1import turtle as t
2
3t.speed(10)
4t.pensize(6)
5t.hideturtle()
6t.screensize()
7t.bgcolor('black')
8t.bgpic('dark_night.png')
9t.color('#CF5E1A', '#CF5E1A')
10
11# 繪制南瓜
12t.penup()
13t.goto(250, 30)
14t.pendown()
15t.seth(90)
16t.begin_fill()
17for j in range(25):
18 t.fd(j)
19 t.left(3.6)
20for j in range(25, 0, -1):
21 t.fd(j)
22 t.left(3.6)
23t.seth(-90)
24t.circle(254, 180)
25t.end_fill()
26
27t.done()
南瓜外形
南瓜把兒比較簡(jiǎn)單,只需將畫筆調(diào)粗,然后畫一段弧度即可。雙眼處理方法與南瓜頂蓋相似,不再贅述。
最后效果
最后效果圖
總體代碼:
1# -*- coding: utf-8 -*-
2# @Author : 王翔
3# @WeChat : King_Uranus
4# @公眾號(hào) : Python清風(fēng)
5# @GitHub : https://github.com/BreezePython
6# @Date : 2019/10/29 22:30
7# @Software : PyCharm
8# @version :Python 3.7.3
9# @File : PumpkinMonster.py
10
11
12import turtle as t
13
14
15def init():
16 # 初始化
17 t.bgpic('dark_night.png')
18 t.screensize(500, 500, bg='white')
19 t.speed(10)
20 t.hideturtle()
21 t.bgcolor('black')
22 t.bgpic('dark_night.png')
23
24
25def outline():
26 # 畫出南瓜的輪廓
27 t.color('#CF5E1A', '#CF5E1A')
28 t.penup()
29 t.goto(250, 30)
30 t.pendown()
31 t.seth(90)
32 t.begin_fill()
33 for j in range(25):
34 t.fd(j)
35 t.left(3.6)
36 for j in range(25, 0, -1):
37 t.fd(j)
38 t.left(3.6)
39 t.seth(-90)
40 t.circle(254, 180)
41 t.end_fill()
42
43
44def tail():
45 # 繪制南瓜枝
46 t.penup()
47 t.goto(0, 180)
48 t.pendown()
49 t.color(#2E3C01')
50 t.seth(100)
51 t.pensize(25)
52 t.circle(60, 100)
53
54
55def eyes(args):
56 # 雙眼
57 for items in args:
58 position, angle, direction = items
59 t.pensize(6)
60 t.penup()
61 t.goto(position, 0)
62 t.pendown()
63 t.color(#4C180D', #4C180D'
64 t.begin_fill()
65 t.seth(angle)
66 for j in range(55):
67 t.fd(3)
68 if direction:
69 t.left(3) # 左轉(zhuǎn)3度
70 else:
71 t.right(3) # 左轉(zhuǎn)3度
72 t.goto(position, 0)
73 t.end_fill()
74
75
76def nose():
77 # 鼻子
78 t.penup()
79 t.goto(0, 0)
80 t.seth(180)
81 t.pendown()
82 t.begin_fill()
83 t.circle(50, steps=3)
84 t.end_fill()
85
86
87def mouth():
88 # 嘴巴
89 t.color('#F9D503', #F9D503'
90 t.pensize(6)
91 t.penup()
92 t.penup()
93 t.goto(-150, -100)
94 t.pendown()
95 t.begin_fill()
96 t.seth(-30)
97 t.fd(100)
98 t.left(90)
99 t.fd(30)
100 t.right(90)
101 t.fd(60)
102 t.left(60)
103 t.fd(60)
104 t.right(90)
105 t.fd(30)
106 t.left(90)
107 t.fd(100)
108 t.end_fill()
109 t.done()
110
111
112if __name__ == '__main__':
113 init()
114 outline()
115 tail()
116 eyes_items = [(-60, 230, 0), (60, -50, 1)]
117 eyes(eyes_items)
118 nose()
119 mouth()
120 t.done()
END
本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com

