520你准备表白了么?
春暖花开,万物复苏,五一小长假已经结束了,接着迎来的就是重要的520表白日了,今天就给大家带来一个表白的爱心设计实现,给你的表白增加更多成功的可能性
设计爱心
既然是心,那就要做的生动,这样才真实,足够用心,才能感动对方。
- 心的颜色是红的,太红了有点影响美观,选择淡一点的粉红,然后做一个放射性的效果;
- 心的跳动时由小变大的,那就需要设计类似的动画;
- 设计居中显示我们要说的话。
好了,那么开始吧。
首先创建一个for_love.py的文件:
初始化显示的大小:
CANVAS_WIDTH = 640CANVAS_HEIGHT = 480CANVAS_CENTER_X = CANVAS_WIDTH / 2CANVAS_CENTER_Y = CANVAS_HEIGHT / 2IMAGE_ENLARGE = 11# 设置心的颜色HEART_COLOR = "#FF99CC"
定义居中显示:
def center_window(root, width, height): screenwidth = root.winfo_screenwidth() # 获取显示屏宽度
screenheight = root.winfo_screenheight() # 获取显示屏高度
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) /
2, (screenheight - height) / 2) # 设置窗口居中参数
root.geometry(size) # 让窗口居中显示
实现心的跳动效果:
def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE): x = 16 * (sin(t) ** 3)
y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))
# 放大
x *= shrink_ratio y *= shrink_ratio # 移到画布中央
x += CANVAS_CENTER_X
y += CANVAS_CENTER_Y
return int(x), int(y)
def scatter_inside(x, y, beta=0.15): ratio_x = - beta * log(random.random())
ratio_y = - beta * log(random.random())
dx = ratio_x * (x - CANVAS_CENTER_X)
dy = ratio_y * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
def shrink(x, y, ratio): force = -1 / (((x - CANVAS_CENTER_X) ** 2 +
(y - CANVAS_CENTER_Y) ** 2) ** 0.6)
dx = ratio * force * (x - CANVAS_CENTER_X)
dy = ratio * force * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
爱心的放射效果:
# 爱心内扩散
for _x, _y in list(self._points):
for _ in range(3): x, y = scatter_inside(_x, _y, 0.05)
self._edge_diffusion_points.add((x, y))
# 爱心内再次扩散
point_list = list(self._points)
for _ in range(4000): x, y = random.choice(point_list)
x, y = scatter_inside(x, y, 0.17)
self._center_diffusion_points.add((x, y))
光环,轮廓:
# 光环
heart_halo_point = set()
for _ in range(halo_number):
t = random.uniform(0, 2 * pi)
x, y = heart_function(t, shrink_ratio=11.6)
x, y = shrink(x, y, halo_radius)
if (x, y) not in heart_halo_point: 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))
# 轮廓
for x, y in self._points: x, y = self.calc_position(x, y, ratio)
size = random.randint(1, 3)
all_points.append((x, y, size))
好了,把相关内容组合后:
root = Tk()
root.title("For Love")
center_window(root, CANVAS_WIDTH, CANVAS_HEIGHT) # 窗口居中显示
canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
canvas.pack()
heart = Heart()
draw(root, canvas, heart)
Label(root, text="I love you", bg="black", fg="#FF99CC", font="Helvetic 20 bold").place(
relx=.5, rely=.5, anchor=CENTER)
root.mainloop()
运行后看看效果吧。
颜色和内容,可以自己去修改。
能不能成功就靠自己了,我只能帮你们到这里了,哈哈,希望天下所有有情人终成眷属。
需要游戏素材,和完整代码的,关注公众号大嗨无量,回复:520获取,长期有效。
转载自:https://juejin.cn/post/7365848711509835803