2022-11-14 00:08:58作者:大神
随着最近甜剧“点燃我温暖你”的热播,被网友称为冬季专用电子羽绒服。在第五集的剧情中,男主角李米一个人让C语言火了起来,你不得不佩服程序员的浪漫。大家都想解开李迅同款的爱情密码。接下来就要给优哈手游小编了。
I .可复制的代码共享
#夜晚,星月闪耀,我的梦会陪你入眠
随机导入
从数学导入正弦、余弦、圆周率、对数
来自tkinter import *
画布宽度= 640 #画布的宽度
CANVAS_HEIGHT = 480 #画布的高度
Canvas _ center _ x = canvas _ width/画布中心的2 # x轴坐标
Canvas _ center _ y = canvas _ height/画布中心的2 # Y轴坐标
IMAGE _ amplify = 11 #放大倍率
HEART_COLOR = "#ff2121" #心色,这是中国红。
def heart_function(t,shrink _ ratio:float = IMAGE _ amplify):
"""
“爱情函数发生器”
:param shrink_ratio:放大。
:param t:参数
:返回:坐标
"""
#基本功能
x = 16 * (sin(t) ** 3)
y =-(13 * cos(t)-5 * cos(2 * t)-2 * cos(3 * t)-cos(4 * t))
#放大
x *=收缩率
y *=收缩率
#移到画布的中心
x +=画布_中心_X
y +=画布_中心_Y
return int(x),int(y)
def scatter_inside(x,y,beta=0.15):
"""
随机内部扩散
:参数x:原始x
:参数y:原始y
:参数β:强度
:返回:新坐标
"""
ratio _ x =-beta * log(random . random())
ratio _ y =-beta * log(random . random())
dx =比率_x * (x -画布_中心_x)
dy = ratio_y * (y - CANVAS_CENTER_Y)
返回x - dx,y - dy
定义收缩(x,y,比率):
"""
摇动
:参数x:原始x
:参数y:原始y
:参数比率:比例
:返回:新坐标
"""
force =-1/(((x-canvas _ center _ x)* * 2+(y-canvas _ center _ y)* * 2)* * 0.6)#此参数...
dx =比率*力* (x - CANVAS_CENTER_X)
dy =比率*力* (y - CANVAS_CENTER_Y)
返回x - dx,y - dy
定义曲线(p):
"""
自定义曲线功能,调整打浆周期。
:param p:参数
:返回:正弦
"""
#你可以尝试改变其他动态函数来达到更强大的效果(贝塞尔?)
返回2 * (2 * sin(4 * p)) / (2 * pi)
班心:
"""
像爱情一样
"""
def __init__(self,generate_frame=20):
自我。_points = set() #原创爱情坐标集
自我。_ edge _ diffusion _ points = set () #边缘扩散效应点的坐标集
自我。_ center _ diffusion _ points = set()#中心扩散效应点坐标集
Self.all_points = {} #每帧动态点的坐标
自建(2000年)
self.random_halo = 1000
self.generate_frame =生成_帧
对于范围内的帧(generate_frame):
self.calc(框架)
定义构建(自身,编号):
#爱
for _ in范围(数字):
T = random.uniform(0,2 * pi) #随机地点造成爱情的缝隙。
x,y =心脏功能(t)
自我。_points.add((x,y))
#爱在内心蔓延
对于列表中的_x,_y(自身。_点):
for _ in范围(3):
x,y = scatter_inside(_x,_y,0.05)
自我。_edge_diffusion_points.add((x,y))
#爱再次蔓延
point_list = list(self。_点)
对于_在范围内(4000):
x,y = random.choice(点列表)
x,y = scatter_inside(x,y,0.17)
自我。_ center _ diffusion _ points . add((x,y))
@静态方法
定义计算位置(x,y,比率):
#调整缩放比例
force = 1/(((x-canvas _ center _ x)* * 2+(y-canvas _ center _ y)* * 2)* * 0.520)# magic参数
dx =比率*力*(X-CANVAS _ CENTER _ X)+random . randint(-1,1)
dy = ratio * force *(Y-CANVAS _ CENTER _ Y)+random . randint(-1,1)
返回x - dx,y - dy
定义计算(自身,生成_帧):
比率= 10 *曲线(generate _ frame/10 * pi) #平滑循环的缩放比率
halo_radius = int(4 + 6 * (1 +曲线(generate_frame / 10 * pi)))
halo _ number = int(3000+4000 * ABS(curve(generate _ frame/10 * pi)* * 2))
所有点数= []
#光环
Heart_halo_point = set() #光环的点坐标的集合
for _ in范围(光晕_编号):
T = random.uniform(0,2 * pi) #随机地点造成爱情的缝隙。
x,y =心脏_功能(t,shrink _ ratio = 11.6) #魔术参数
x,y = shrink(x,y,halo_radius)
如果(x,y)不在心脏晕圈点:
#处理新积分
heart_halo_point.add((x,y))
x += random.randint(-14,14)
y += random.randint(-14,14)
size = random.choice((1,2,2))
all_points.append((x,y,size))
#大纲
对于自我中的x,y。_点:
x,y = self.calc_position(x,y,ratio)
size = random.randint(1,3)
all_points.append((x,y,size))
#内容
对于自我中的x,y。_边缘_扩散_点:
x,y = self.calc_position(x,y,ratio)
size = random.randint(1,2)
all_points.append((x,y,size))
对于自我中的x,y。_center_diffusion_points:
x,y = self.calc_position(x,y,ratio)
size = random.randint(1,2)
all_points.append((x,y,size))
self . all _ points[生成帧] = all_points
def render(自身,render_canvas,render_frame):
对于x,y,size in self . all _ points[render _ frame % self . generate _ frame]:
render _ canvas . create _ rectangle(x,y,x + size,y + size,宽度=0,填充=HEART_COLOR)
def draw(main: Tk,render_canvas: Canvas,render_heart: Heart,render_frame=0):
render_canvas.delete('all ')
render_heart.render(渲染画布,渲染帧)
main.after(160,draw,main,render_canvas,render_heart,render_frame + 1)
if __name__ == '__main__ ':
Root = Tk() # a Tk
canvas = Canvas(root,bg='black ',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)
canvas.pack()
Heart = Heart() #心脏
画(根,画布,心)#开始画吧~
root.mainloop()