Python怎么实现带雪花的圣诞树效果
Admin 2022-05-23 群英技术资讯 436 次浏览
圣诞节风波
马上不就到圣诞节了嘛,我看到朋友圈里很多小伙伴再纷纷炫耀自己收到的专属圣诞树,也有小伙伴私信我,说还没有自己的圣诞树!!!
作为我的粉丝朋友们,我不允许大家还没有专属于自己的圣诞树!我要让大家收到最特别最美丽的圣诞树,于是…冒着…期末挂科…的风险…我重拾了自己失传已久的海龟画图: 海龟画图全解-值得你一看!(这篇文章写了很久了,是一些海龟画图最基础的操作,不太了解的小伙伴们可以拿这篇文章来快速入门海龟画图!)
终于…经过…昨天…一个晚上…的艰苦…奋斗,我觉得我又行了!
从最底层开始,我一步一步完善代码设计出了:圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树! 话不多说,先看效果:
哎嘿嘿,是不是非常的nice呀!看到这先别着急,为了我的期末成绩着想,是不是得先给我来个一键三连呀!!!
接下来让我们慢慢来聊,请大家前排就坐,爆米花自取哟
需要用到的模块:
import turtle as t import random import pygame import threading import time import tkinter as tk
这是我们要用到的一些基础库,没有安装的小伙伴们可以安装一下,要求编译器是Python3的环境。
画主体树的部分看似有些麻烦,但只要你把其中的几个循环看明白了就行了,无非就是几个函数重复控制画笔移动!
t.screensize(bg='black') # 定义背景颜色,可以自己换颜色 def loving_heart(r): l = 2 * r t.left(45) t.forward(l) t.circle(r, 180) t.right(90) t.circle(r, 180) t.forward(l) # 树函数(递归) def tree(d, s): if d <= 0: return t.forward(s) tree(d - 1, s * .8) t.right(120) tree(d - 3, s * .5) t.right(120) tree(d - 3, s * .5) t.right(120) t.backward(s) # 回退函数 # 画爱心部分 t.penup() t.goto(0, 200) # 设置起点位置 t.pendown() t.pencolor('red') # 设置画笔颜色 t.color('red') t.begin_fill() # 对图形进行填充 loving_heart(20) # 执行画爱心函数 t.end_fill() # 画树部分 n = 100 t.speed(0) # t.Turtle().screen.delay(0) t.right(225) t.color("dark green") t.backward(n * 4.8) tree(15, n) t.backward(n / 5)
在这里我使用了random函数,通过判断条件控制了两种颜色,大家也可以加入更多的颜色进行绘制落叶:
if random.randint(1, 2) == 1: t.color('tomato') else: t.color('wheat')
也可以使其变成不同的形状,也没必要全是圆形,时间问题我就没改,大家感兴趣可以再改一下,也可以使落叶在圣诞树上,不用全在圣诞树下:t.circle(4)
# 绘制落叶 for i in range(200): a = 200 - 400 * random.random() b = 10 - 20 * random.random() t.speed(0) t.up() t.forward(b) t.left(90) t.forward(a) t.down() if random.randint(1, 2) == 1: t.color('tomato') else: t.color('wheat') t.circle(4) t.up() t.backward(a) t.right(90) t.backward(b)
这里我做了很详细的介绍,大家可以参考这个来具体看,还是很好看的:
# 绘制雪花 def drawsnow(): # 定义画雪花的方法 t.speed(0) t.ht() # 隐藏笔头,ht=hideturtle t.pensize(2) # 定义笔头大小 for i in range(200): # 画多少雪花 t.pencolor("white") # 定义画笔颜色为白色,其实就是雪花为白色 t.pu() # 提笔,pu=penup t.setx(random.randint(-350, 350)) # 定义x坐标,随机从-350到350之间选择 t.sety(random.randint(-100, 350)) # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始 t.pd() # 落笔,pd=pendown dens = 6 # 雪花瓣数设为6 snowsize = random.randint(1, 10) # 定义雪花大小 for j in range(dens): # 就是6,那就是画5次,也就是一个雪花五角星 # t.forward(int(snowsize)) #int()取整数 t.fd(int(snowsize)) t.backward(int(snowsize)) # t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug t.right(int(360 / dens)) # 转动角度 drawsnow()
这里使用Pygame模块中的mixer来控制音乐的播放,需要导入本地音乐路径,然后就可以啦!这样会使整个的绘制过程更加浪漫有趣!
file=r'薛之谦 - 迟迟.mp3' # 音乐的路径 pygame.mixer.init() # 初始化 track = pygame.mixer.music.load(file) # 加载音乐文件 pygame.mixer.music.play() # 开始播放音乐
这里使用了tkinter模块来进行小弹窗的绘制,最后是用for循环来实现弹窗的重复性和随机性,这也是我觉得最大的创新之处吧!惊喜重重,满满心意与浪漫,哈哈哈。
# 弹窗制作 def dow(): window = tk.Tk() width = window.winfo_screenwidth() height = window.winfo_screenheight() a = random.randrange(0, width) b = random.randrange(0, height) window.title('圣诞节快乐') window.geometry("200x50" + "+" + str(a) + "+" + str(b)) tk.Label(window, text='圣诞节快乐!', # 标签的文字 bg='pink', # 背景颜色 font=('..', 17), # 字体和字体大小 width=18, height=2 # 标签长宽 ).pack() # 固定窗口位置 window.mainloop() threads = [] for i in range(100): # 需要的弹框数量 t = threading.Thread(target=dow) threads.append(t) time.sleep(0.01) threads[i].start()
最后我又简单的加上了自己的署名,算是对自己产权的一种保护吧。虽然没啥用,你们也肯定会给我去掉,但我不管,这就是一种仪式感嗷!
# 写下署名 t.color("red") # 填充颜色 t.up() # 抬笔 t.goto(170,-200) t.down() # 落笔 t.write("Created:是Dream呀", font=("宋体", 18, "normal")) t.ht() # t.done() t.hideturtle()
源码来喽:
import turtle as t import random import pygame import threading import time import tkinter as tk file=r'薛之谦 - 迟迟.mp3' # 音乐的路径 pygame.mixer.init() # 初始化 track = pygame.mixer.music.load(file) # 加载音乐文件 pygame.mixer.music.play() # 开始播放音乐 t.screensize(bg='black') # 定义背景颜色,可以自己换颜色 def loving_heart(r): l = 2 * r t.left(45) t.forward(l) t.circle(r, 180) t.right(90) t.circle(r, 180) t.forward(l) # 树函数(递归) def tree(d, s): if d <= 0: return t.forward(s) tree(d - 1, s * .8) t.right(120) tree(d - 3, s * .5) t.right(120) tree(d - 3, s * .5) t.right(120) t.backward(s) # 回退函数 # 画爱心部分 t.penup() t.goto(0, 200) # 设置起点位置 t.pendown() t.pencolor('red') # 设置画笔颜色 t.color('red') t.begin_fill() # 对图形进行填充 loving_heart(20) # 执行画爱心函数 t.end_fill() # 画树部分 n = 100 t.speed(0) # t.Turtle().screen.delay(0) t.right(225) t.color("dark green") t.backward(n * 4.8) tree(15, n) t.backward(n / 5) # 绘制落叶 for i in range(200): a = 200 - 400 * random.random() b = 10 - 20 * random.random() t.speed(0) t.up() t.forward(b) t.left(90) t.forward(a) t.down() if random.randint(1, 2) == 1: t.color('tomato') else: t.color('wheat') t.circle(4) t.up() t.backward(a) t.right(90) t.backward(b) # 绘制雪花 def drawsnow(): # 定义画雪花的方法 t.speed(0) t.ht() # 隐藏笔头,ht=hideturtle t.pensize(2) # 定义笔头大小 for i in range(200): # 画多少雪花 t.pencolor("white") # 定义画笔颜色为白色,其实就是雪花为白色 t.pu() # 提笔,pu=penup t.setx(random.randint(-350, 350)) # 定义x坐标,随机从-350到350之间选择 t.sety(random.randint(-100, 350)) # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始 t.pd() # 落笔,pd=pendown dens = 6 # 雪花瓣数设为6 snowsize = random.randint(1, 10) # 定义雪花大小 for j in range(dens): # 就是6,那就是画5次,也就是一个雪花五角星 # t.forward(int(snowsize)) #int()取整数 t.fd(int(snowsize)) t.backward(int(snowsize)) # t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug t.right(int(360 / dens)) # 转动角度 drawsnow() # 写下署名 t.color("red") # 填充颜色 t.up() # 抬笔 t.goto(170,-200) t.down() # 落笔 t.write("Created:是Dream呀", font=("宋体", 18, "normal")) t.ht() # t.done() t.hideturtle() time.sleep(2) # 弹窗制作 def dow(): window = tk.Tk() width = window.winfo_screenwidth() height = window.winfo_screenheight() a = random.randrange(0, width) b = random.randrange(0, height) window.title('圣诞节快乐') window.geometry("200x50" + "+" + str(a) + "+" + str(b)) tk.Label(window, text='圣诞节快乐!', # 标签的文字 bg='pink', # 背景颜色 font=('..', 17), # 字体和字体大小 width=18, height=2 # 标签长宽 ).pack() # 固定窗口位置 window.mainloop() threads = [] for i in range(100): # 需要的弹框数量 t = threading.Thread(target=dow) threads.append(t) time.sleep(0.01) threads[i].start()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(HSV)的视觉均衡。
这篇文章主要介绍了9个提高 Python 编程的小技巧,下文分享python编程技巧,需要的小伙伴可以参考一下,希望对你的学习有所帮助
我们在使用python做接口测试的时候,会需要python的单元测试框架,在python中单元测试框架很多unittest、pytest、nose等,这篇文章就给介绍一下python的单元测试框中pytest和unittest区别是什么,接下来我们一起看看吧。
大家好,本篇文章主要讲的是Python OpenCV读取视频报错的问题解决,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
本篇文章给大家带来了关于Python的相关知识,将为大家简单介绍一下Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码,下面一起来看一下,希望对大家有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008