欢迎加入我们卧虎藏龙的python讨论qq群:729683466
●导 语?●
好久没有发过“画画”的推文了
正好中秋节快到了
那就画一个“中秋赏月图”吧
代码及相关资源获取
1:关注“python趣味爱好者”公众号,回复“中秋赏月图”获取源代码。
2:加入群聊:729683466。在群文件中下载源代码以及相关资料。
效果演示
ss


往期精选
python小游戏之《躲避太空垃圾》
python爬取《鹿鼎记》小说
?🛠
开发工具
python3.6.4,第三方库:turtle,time
讲解部分
一:turtle简介
turtle是一个非常常见的模块,作用就是画画,如果水平高的朋友可以用turtle去开发一些轻量级的游戏,只是这个turtle模块似乎没有那种载入声音的函数,所以,如果想写游戏,最好还是用pygame,毕竟人家上来就是专业团队。

不过,说到画画,那么turtle才是专业团队,pygame只能靠边站。不知道大家有没有在电脑上画过画,就是电脑自带的画画工具。基本的要素就是抬起笔,放下笔,修改笔的颜色,或者在一个封闭空间里面填充颜色之类的。
而turtle就是用代码控制这些抬起笔,放下笔的操作。
二:如何画画
一幅中秋赏月图,是由好几个元素组成的,分别是金黄色的月亮,流动的云彩,蓝色的背景,下方的山脉和一首诗。我们把画这几个元素的代码打包成不同的函数,在main中直接调用即可,这样简单清晰,容易理解。
我们用最简单的话月亮的函数举例子。
def draw_moon():
turtle.color(BC)
turtle.fillcolor('Gold')
turtle.penup()
turtle.goto(-150, 0)
turtle.pendown()
turtle.begin_fill()
turtle.circle(110)
turtle.end_fill()
首先,把画笔的颜色修改成BC,把填充颜色修改成"Gold",之后抬起笔,代码就是
turtle.penup()
再去把笔移动到指定的位置,由于这时候笔是离开画布的,所以不会在画布上生成任何痕迹。
turtle.goto(-150, 0)
到达指定位置后,放下笔,开始画画,用一个画圆圈的函数画,然后画出来以后填充成金色。这样,一个月亮就画出来了。
另一个比较重要的函数,就是用turtle在画布上写字。代码如下:
def draw_words():
# 明月出天山,苍茫云海间.长风几万里,吹度玉门关。
turtle.penup()
turtle.pencolor('Yellow1')
turtle.goto(400, -150)
turtle.write("明\n月\n出\n天\n山\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(300, -150)
turtle.write("苍\n茫\n云\n海\n间\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(200, -150)
turtle.write("长\n风\n几\n万\n里\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(100, -150)
turtle.write("吹\n度\n玉\n门\n关\n", align="center", font=("STXingkai", 50, "bold"))
和画图案一样,首先要做的就是设置画笔的颜色,然后用turtle.goto()到达要写字的位置,然后调用最终要的这个函数
turtle.write("明\n月\n出\n天\n山\n", align="center", font=("STXingkai", 50, "bold"))
其中需要设置字体,字号之类的参数。尤其要注意换行符的使用,因为我们要写的字是纵向排版的。
三:主函数
在主函数中,需要将这几个自定义额画画的小函数组合起来,就可以连接成一幅“中秋赏月图”。
def main():
draw_init()
draw_moon()
draw_cloud()
draw_mountain()
????draw_words()
代码相当浅显易懂,相信稍微有点python基础的同学都能看懂。
四:完整代码
# -*- coding: utf-8 -*-
import turtle
import time
BC = 'DodgerBlue4'
def draw_moon():
turtle.color(BC)
turtle.fillcolor('Gold')
turtle.penup()
turtle.goto(-150, 0)
turtle.pendown()
turtle.begin_fill()
turtle.circle(110)
turtle.end_fill()
def draw_words():
# 明月出天山,苍茫云海间.长风几万里,吹度玉门关。
turtle.penup()
turtle.pencolor('Yellow1')
turtle.goto(400, -150)
turtle.write("明\n月\n出\n天\n山\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(300, -150)
turtle.write("苍\n茫\n云\n海\n间\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(200, -150)
turtle.write("长\n风\n几\n万\n里\n", align="center", font=("STXingkai", 50, "bold"))
time.sleep(1)
turtle.goto(100, -150)
turtle.write("吹\n度\n玉\n门\n关\n", align="center", font=("STXingkai", 50, "bold"))
def draw_mountain():
turtle.fillcolor('grey21')
turtle.pencolor('grey31')
turtle.pensize(4)
turtle.penup()
turtle.goto(-500, -250)
turtle.begin_fill()
turtle.pendown()
turtle.left(15)
turtle.forward(400)
turtle.right(30)
turtle.forward(200)
turtle.left(40)
turtle.forward(300)
turtle.right(50)
turtle.forward(300)
turtle.goto(500, -300)
turtle.goto(-500, -300)
turtle.end_fill()
def draw_cloud():
step = 0.5 # 画弧时的步长
angle = 1 # 每次改变的角度
disize = 0.2 # 每次增加或减少的线宽
psize = 5 # 初始线宽
turtle.pencolor('WhiteSmoke')
turtle.pencolor('Gainsboro')
turtle.pensize(psize)
turtle.penup()
turtle.goto(-500, 200)
turtle.pendown()
turtle.forward(250)
for i in range(90):
psize += disize
turtle.pensize(psize)
turtle.right(angle)
turtle.forward(step)
for i in range(90):
psize -= disize
turtle.pensize(psize)
turtle.right(angle)
turtle.forward(step)
turtle.forward(100)
for i in range(90):
psize += disize
turtle.pensize(psize)
turtle.left(angle)
turtle.forward(step)
for i in range(90):
psize -= disize
turtle.pensize(psize)
turtle.left(angle)
turtle.forward(step)
turtle.forward(600)
def draw_init():
turtle.setup(1000, 600)
# turtle.colormode(255) # 设置GBK颜色范围为0-255
turtle.bgcolor(BC)
turtle.speed(10) # 设置画笔速度为10
def main():
draw_init()
draw_moon()
draw_cloud()
draw_mountain()
draw_words()
turtle.exitonclick() #点击才关闭画画窗口
if __name__ == '__main__':
main()
作者|齐
编辑|齐
感谢大家观看
有钱的老板可打赏一下小编哦
扫描二维码
关注我们
QQ群:729683466
???
参考来源
代码来源:github