所感是对毕业季的感想,所现是代码的实现
所感
六月的风悄然吹过,啊,是炽热的风,和这风一起来的还有毕业的脚步,是的,我毕业了,我去年就毕业了,但今年这场毕业盛典或许不应该仅仅属于这一届毕业生,请允许我这位学长,没穿过学士服,没有毕业照,没有毕业典礼的一位学长,也蹭一蹭今年的毕业季,假装自己刚刚毕业。
我是一名大四的学生,论文已经提交了,马上就要毕业了,宿舍楼下的帐篷都支了起来,人们开始忙着邮寄自己的物品,大包小包,四年的青春竟是如此沉重,这还是丢弃和出售过后的成果,我也要整理好了自己的行李,还有舍友的物品,先去取学位证书和毕业证书吧,由于不小心被雨水浸泡还没拿到手的证书封皮居然已经发霉变形了,这就是我们的毕业季吗?疫情、霉运、凑不齐的舍友,合照上样式各异的服装和半数的同学。好在离开宿舍时没有热泪滚落,没有太多伤感,仿佛是一次寒暑假的离别,也或许是因为我和舍友一同离开的宿舍,少了在宿舍的互相道别,也就少了那一份伤感。
我是一名毕业生,调剂上岸了,每天有时间就做做导师给的任务,朴实无华且枯燥,刚毕业的那几天,我会时不时的翻翻毕业证书,那本毕业相册却很少打开,就这么毕业了吧,开始下一段旅途了。
我是一名研一的学生,趁着端午回了一趟母校,千里迢迢,还由于起晚误了飞机,多花了1000多块,飞机、地铁、火车、大巴,返校的路还是这么曲折,汽车站却是一副崭新模样,疫情的阴霾还未完全褪去,尤其是对于护城河来说,封校成了常态,我只能经由栅栏的缺口出入学校,校园倒没有大的变化,还是记忆中的模样。可惜假期太短,毕业典礼又太晚,回到现在的学校后,才在空间看到,这就是大鹏一日同风起,扶摇直上九万里吧。
所现
回到学校,不断的翻看空间、朋友圈,内心思绪万千,又恰巧看到了这次征文活动,那就借此机会为毕业的你们和自己放一场烟花吧。
绽放前烟花参考自己之前的博客turtle库绘制QQ表情“蹭一蹭” “惊鸿一现”部分
绽放效果参考博客Python制作烟花秀
2024-06-13 更新,增加代码注释并精简部分代码,整体实现代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Date: 2021/6/19 16:21:15
@Software: PyCharm
@Author: lazyn
"""
import time
import random
from turtle import *
# 绘制初始烟花线条的函数
def draw_firework(count, dis, ang):
"""
count:线条数量
dis:线条长度
ang:线条之间的角度
"""
for c in range(count):
forward(dis)
left(ang)
def draw(lis):
pensize(1) # 设置画笔粗细为 1
for t in range(repeat_num): # 循环 repeat_num 次绘制烟花线条
for li in lis: # 遍历每个烟花参数列表
x, y, col, dis, ang, add, count = li
# 上一个烟花线条绘制完毕后移动画笔到下一个烟花绘制的开始位置,每次循环向左移动 add 的一半
penup(), goto(x - t * add / 2, y), pendown()
color('black', col) # 设置画笔颜色为黑色,并设置填充颜色为传入的颜色
begin_fill() # 开始填充
setheading(0) # 设置方向为 0
draw_firework(count, t * add + init_length, ang) # 线条长度每轮循环增加 add,模拟烟花爆炸效果
end_fill() # 结束填充
update() # 全部烟花线条绘制完成后更新画面
time.sleep(0.015) # 暂停 0.015 秒
clear() # 清除画面
pensize(2) # 设置画笔粗细为 2
for t in range(repeat_num): # 再次进行 repeat_num 次循环绘制烟花爆炸后的点光影
for li in lis: # 遍历每个烟花参数列表
x, y, col, dis, ang, add, count = li # 获取参数
pencolor(col) # 设置画笔颜色
count = int(count / 4) # 计算爆炸点的数量,值越大点越密集
radius = dis / 2 - 10 + t * 2 # 计算爆炸点圆的半径
# 确定绘制圆的起始位置,爆炸线条中心点为(x+init_length/2,y),以此点为圆心绘制半径为dis/2-10+t*2的圆,可得绘制的起始点坐标
penup(), goto(x + init_length / 2 - radius, y), pendown()
setheading(-90) # 设置方向为-90
for i in range(count): # 循环绘制多个爆炸点
penup() # 抬笔
circle(radius, 360 / count - 1) # 绘制360 / count - 1度的圆弧,用于移动到下一个爆炸点位置
pendown() # 落笔
circle(radius, 1) # 落笔绘制1弧度的圆,作为爆炸点
update() # 更新画面
time.sleep(0.03) # 暂停 0.03 秒
clear() # 清除画面
def main(cols):
while True: # 无限循环
fires = random.randint(10, 15) # 生成随机的烟花数量
need_list = [] # 创建存储烟花参数的列表
for f in range(fires): # 循环生成每个烟花的参数
startx, starty = random.randint(-350, 350), random.randint(-100, 250) # 随机起始位置
ccol = random.choice(cols) # 随机选择颜色
dist = random.randint(init_length+20, init_length+50) # 随机线条长度
if dist <= 60: # 根据长度设置角度
angle = 171
else:
angle = random.choice([174, 175, 176])
add = (dist - init_length) / repeat_num # 计算每次循环增加的线条长度
count = int(360 / (180 - angle)) # 计算线条数量
need_list.append([startx, starty, ccol, dist, angle, add, count]) # 添加到列表
draw(need_list) # 绘制烟花
clear() # 清除画面
if __name__ == '__main__':
init_length = 20 # 初始线条长度
repeat_num = 10 # 循环次数
setup(810, 605) # 设置窗口大小
screensize(800, 600, 'black') # 设置画布大小及背景颜色
hideturtle() # 隐藏画笔
colors = ['red', 'blue', 'yellow', 'white',
'green', 'orange', 'purple', 'seagreen',
'indigo', 'cornflowerblue']
tracer(False) # 不跟踪画笔移动轨迹
main(colors)