问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

简单的代码表白

发布网友 发布时间:2022-04-23 07:23

我来回答

4个回答

懂视网 时间:2022-04-07 11:26

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花,工作之余也可以随时让程序为自己放一场烟花秀。

python炫酷烟花表白源代码

这个有趣的小项目并不复杂,只需一点可视化技巧,100余行Python代码和程序库Tkinter,最后我们就能达到下面这个效果:

0.gif

学完本教程后,你也能做出这样的烟花秀。

整体概念梳理

我们的整个理念比较简单。

1.jpg

如上图示,我们这里通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果。粒子会发生“膨胀”,意思是它们会以恒速移动且相互之间的角度相等。这样就能让我们以一个向外膨胀的圆圈形式模拟出烟花绽放的画面。经过一定时间后,粒子会进入“自由落体”阶段,也就是由于重力因素它们开始坠落到地面,仿若绽放后熄灭的烟花。

(推荐学习:编程学习课程)

基本知识:用Python和Tkinter设计烟花

这里不再一股脑把数学知识全丢出来,我们边写代码边说理论。首先,确保你安装和导入了Tkinter,它是Python的标准 GUI 库,广泛应用于各种各样的项目和程序开发,在Python中使用 Tkinter 可以快速的创建 GUI 应用程序。

import tkinter as tk
from PIL import Image, ImageTk
from time import time, sleep
from random import choice, uniform, randint
from math import sin, cos, radians

除了Tkinter之外,为了能让界面有漂亮的背景,我们也导入PIL用于图像处理,以及导入其它一些包,比如time,random和math。它们能让我们更容易的控制烟花粒子的运动轨迹。

Tkinter应用的基本设置如下:

root = tk.Tk()

为了能初始化Tkinter,我们必须创建一个Tk()根部件(root widget),它是一个窗口,带有标题栏和由窗口管理器提供的其它装饰物。该根部件必须在我们创建其它小部件之前就创建完毕,而且只能有一个根部件。

w = tk.Label(root, text="Hello Tkinter!")

这一行代码包含了Label部件。该Label调用中的第一个参数就是父窗口的名字,即我们这里用的“根”。关键字参数“text”指明显示的文字内容。你也可以调用其它小部件:Button,Canvas等等。

w.pack()
root.mainloop()

接下来的这两行代码很重要。这里的打包方法是告诉Tkinter调整窗口大小以适应所用的小部件。窗口直到我们进入Tkinter事件循环,被root.mainloop()调用时才会出现。在我们关闭窗口前,脚本会一直在停留在事件循环。

将烟花绽放转译成代码

现在我们设计一个对象,表示烟花事件中的每个粒子。每个粒子都会有一些重要的属性,支配了它的外观和移动状况:大小,颜色,位置,速度等等。

'''
particles 类
粒子在空中随机生成随机,变成一个圈、下坠、消失
属性:
 - id: 粒子的id
 - x, y: 粒子的坐标
 - vx, vy: 在坐标的变化速度
 - total: 总数
 - age: 粒子存在的时长
 - color: 颜色
 - cv: 画布
 - lifespan: 最高存在时长
'''
class part:
 def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx = 0., vy = 0., size=2., color = 'red', lifespan = 2, **kwargs):
 self.id = idx
 self.x = x
 self.y = y
 self.initial_speed = explosion_speed
 self.vx = vx
 self.vy = vy
 self.total = total
 self.age = 0self.color = color
 self.cv = cv
 self.cid = self.cv.create_oval(
  x - size, y - size, x + size,
  y + size, fill=self.color)
 self.lifespan = lifespan

如果我们回过头想想最开始的想法,就会意识到必须确保每个烟花绽放的所有粒子必须经过3个不同的阶段,即“膨胀”“坠落”和“消失”。 所以我们向粒子类中再添加一些运动函数,如下所示:

def update(self, dt):
 # 粒子膨胀if self.alive() and self.expand():
 move_x = cos(radians(self.id*360/self.total))*self.initial_speed
 move_y = sin(radians(self.id*360/self.total))*self.initial_speed
 self.vx = move_x/(float(dt)*1000)
 self.vy = move_y/(float(dt)*1000)
 self.cv.move(self.cid, move_x, move_y)
 # 以自由落体坠落
 elif self.alive():
 move_x = cos(radians(self.id*360/self.total))
 # we technically don't need to update x, y because move will do the job
 self.cv.move(self.cid, self.vx + move_x, self.vy+GRAVITY*dt)
 self.vy += GRAVITY*dt
 # 如果粒子的生命周期已过,就将其移除
 elif self.cid is not None:
 cv.delete(self.cid)
 self.cid = None

当然,这也意味着我们必须定义每个粒子绽放多久、坠落多久。这部分需要我们多尝试一些参数,才能达到最佳视觉效果。

# 定义膨胀效果的时间帧
def expand (self):
 return self.age <= 1.2
# 检查粒子是否仍在生命周期内
def alive(self):
 return self.age <= self.lifespan

使用Tkinter模拟

现在我们将粒子的移动概念化,不过很明显,一个烟花不能只有一个粒子,一场烟花秀也不能只有一个烟花。我们下一步就是让Python和Tkinter以我们可控的方式向天上连续“发射”粒子。

到了这里,我们需要从操作一个粒子升级为在屏幕上展现多个烟花及每个烟花中的多个粒子。

我们的解决思路如下:创建一列列表,每个子列表是一个烟花,其包含一列粒子。每个列表中的例子有相同的x,y坐标、大小、颜色、初始速度。

numb_explode = randint(6,10)
# 为所有模拟烟花绽放的全部粒子创建一列列表
for point in range(numb_explode):
 objects = []
 x_cordi = randint(50,550)
 y_cordi = randint(50, 150) 
 size = uniform (0.5,3)
 color = choice(colors)
 explosion_speed = uniform(0.2, 1)
 total_particles = randint(10,50)
 for i in range(1,total_particles):
 r = part(cv, idx = i, total = total_particles, explosion_speed = explosion_speed, x = x_cordi, y = y_cordi, 
 color=color, size = size, lifespan = uniform(0.6,1.75))
 objects.append(r)
explode_points.append(objects)

我们下一步就是确保定期更新粒子的属性。这里我们设置让粒子每0.01秒更新它们的状态,在1.8秒之后停止更新(这意味着每个粒子的存在时间为1.6秒,其中1.2秒为“绽放”状态,0.4秒为“坠落”状态,0.2秒处于Tkinter将其完全移除前的边缘状态)。

total_time = .0
# 在1.8秒时间帧内保持更新
while total_time < 1.8:
 sleep(0.01)
 tnew = time()
 t, dt = tnew, tnew - t
 for point in explode_points:
 for part in point:
  part.update(dt)
 cv.update()
 total_time += dt

现在,我们只需将最后两个gist合并为一个能被Tkinter调用的函数,就叫它simulate()吧。该函数会展示所有的数据项,并根据我们设置的时间更新每个数据项的属性。在我们的主代码中,我们会用一个alarm处理模块after()调用此函数,after()会等待一定的时间,然后再调用函数。

我们这里设置让Tkinter等待100个单位(1秒钟)再调取simulate。

if __name__ == '__main__':
 root = tk.Tk()
 cv = tk.Canvas(root, height=600, width=600)
 # 绘制一个黑色背景
 cv.create_rectangle(0, 0, 600, 600, fill="black")
 cv.pack()
 root.protocol("WM_DELETE_WINDOW", close)
 # 在1秒后才开始调用stimulate()
 root.after(100, simulate, cv)
 root.mainloop()

好了,这样我们就用Python代码放了一场烟花秀:

1.gif

本文只一个简单版本,等进一步熟悉Tkinter后,还可以添加更多颜色更漂亮的背景照片,让代码为你绽放更美的烟花!

以下是全部代码:

import tkinter as tk
from PIL import Image, ImageTk
from time import time, sleep
from random import choice, uniform, randint
from math import sin, cos, radians
# 模拟重力
GRAVITY = 0.05
# 颜色选项(随机或者按顺序)
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue']
'''
particles 类
粒子在空中随机生成随机,变成一个圈、下坠、消失
属性:
 - id: 粒子的id
 - x, y: 粒子的坐标
 - vx, vy: 在坐标的变化速度
 - total: 总数
 - age: 粒子存在的时长
 - color: 颜色
 - cv: 画布
 - lifespan: 最高存在时长
'''
class Particle:
 def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx=0., vy=0., size=2., color='red', lifespan=2,
   **kwargs):
 self.id = idx
 self.x = x
 self.y = y
 self.initial_speed = explosion_speed
 self.vx = vx
 self.vy = vy
 self.total = total
 self.age = 0self.color = color
 self.cv = cv
 self.cid = self.cv.create_oval(
  x - size, y - size, x + size,
  y + size, fill=self.color)
 self.lifespan = lifespan
 def update(self, dt):
 self.age += dt
 # 粒子范围扩大
 if self.alive() and self.expand():
  move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speed
  move_y = sin(radians(self.id * 360 / self.total)) * self.initial_speed
  self.cv.move(self.cid, move_x, move_y)
  self.vx = move_x / (float(dt) * 1000)
 # 以自由落体坠落
 elif self.alive():
  move_x = cos(radians(self.id * 360 / self.total))
  # we technically don't need to update x, y because move will do the job
  self.cv.move(self.cid, self.vx + move_x, self.vy + GRAVITY * dt)
  self.vy += GRAVITY * dt
 # 移除超过最高时长的粒子
 elif self.cid is not None:
  cv.delete(self.cid)
  self.cid = None
 # 扩大的时间
 def expand (self):
 return self.age <= 1.2
 # 粒子是否在最高存在时长内
 def alive(self):
 return self.age <= self.lifespan
'''
循环调用保持不停
'''
def simulate(cv):
 t = time()
 explode_points = []
 wait_time = randint(10, 100)
 numb_explode = randint(6, 10)
 # 创建一个所有粒子同时扩大的二维列表
 for point in range(numb_explode):
 objects = []
 x_cordi = randint(50, 550)
 y_cordi = randint(50, 150)
 speed = uniform(0.5, 1.5)
 size = uniform(0.5, 3)
 color = choice(colors)
 explosion_speed = uniform(0.2, 1)
 total_particles = randint(10, 50)
 for i in range(1, total_particles):
  r = Particle(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
    vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))
  objects.append(r)
 explode_points.append(objects)
 total_time = .0
 # 1.8s内一直扩大
 while total_time < 1.8:
 sleep(0.01)
 tnew = time()
 t, dt = tnew, tnew - t
 for point in explode_points:
  for item in point:
  item.update(dt)
 cv.update()
 total_time += dt
 # 循环调用
 root.after(wait_time, simulate, cv)
def close(*ignore):
 """退出程序、关闭窗口"""
 global root
 root.quit()
if __name__ == '__main__':
 root = tk.Tk()
 cv = tk.Canvas(root, height=400, width=600)
 # 选一个好看的背景会让效果更惊艳!
 image = Image.open("./image.jpg")
 photo = ImageTk.PhotoImage(image)
 cv.create_image(0, 0, image=photo, anchor='nw')
 cv.pack()
 root.protocol("WM_DELETE_WINDOW", close)
 root.after(100, simulate, cv)
 root.mainloop()

众多python培训视频,尽在python学习网,欢迎在线学习!

热心网友 时间:2022-04-07 08:34

1、浏览器标签法

这个先用不到代码,但却十分简单实用的,首先早一步到办公室,或者趁表白对象不注意的时候在她的电脑上安装chrome浏览器,设置成默认的浏览器,把各项的同步功能打开就可以了。然后选择一个合适的时机,在你的电脑上登录账号,然后标签栏添加你想说的话,例如下图这样:

然后标签就自动同步到表白对象的浏览器上了。

2、两个按键组合成I LOVE U

这个简单的功能是利用的网页查找的功能,在网页中复制下这段文字,

然后crtrl+f,在输入框中输入9,然后回车,看下效果:

3、Python表白代码

心型和圆形椭圆的代码类似,都是由X,Y上的点构成的曲线,确定出一个表达式expression,然后就是两个for循环(for y in range;for x in range),然后逐行逐列的开始就行了。

当然有点太单调,我们可以这样操作一下,让他动起来,像这样

print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x0.05)2+(y0.1)2-1)3-(x0.05)2(y0.1)*3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))

当然还能替换表情,这个代码就不放了,需要的直接跟我要就行。

4、炫酷一点的

C语言诠释爱——为TA写下心中情,生成程序传给TA,TA点开程序就懂你。

这个开始的时候会展示出表白对象的名字,接着就是最重要的烟花部分,为了让烟花显得更加真实,需要附加重力效果和空气阻力效果,源代码图如下

如果需要源码的留下邮乡就可以了。

5、恶搞一点的

这个适合关系已经不错的那种了,看看效果

源码直接发

热心网友 时间:2022-04-07 09:52

代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。
中文名
代码
外文名
code
操作者
程序员
定义
开发工具支持的语言写的源文件
拼音
dài mǎ
快速
导航
计算机代码WEB标准
词语解释
供把资料和指示输入自动计算机或制表机的任何符号系统;亦指这种符号的记录(如靠打孔资料卡片或磁带上的受磁点)。
计算机代码
源代码(也称源程序),是指一系列人类可读的计算机语言指令。
源代码是相对目标代码和可执行代码而言的。 源代码就是用汇编语言和高级语言写出来的地代码。目标代码是指源代码经过编译程序产生的能被cpu直接识别二进制代码。可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。

热心网友 时间:2022-04-07 11:43

woaini
qq神秘代码有哪些

qq表白神秘代码有如下:1、发送u5728u4e0Ou8d7Nu5427(在一起)。2、发送mi manchi(会出现满屏小星星)。3、发送ohh(留在我身边)。4、发送ch will mit dir S wim(我想和你在一起)。5、发送Voce e meu bebe(你是我的宝贝)。6、发送 RUYDUAautrinuU(我只喜欢你)。7、发送 love at first ...

最新微信表白代码整挺好

"ohh"和"爱してる",简单却深情的表白,无需过多的言语,就已足够。而"Ich liebe dich"、"私から离れないで"、"Ik hou van jou",跨国语言的表白,展现了你的用心和包容。"너보다내마음을더설레게ᕕ...

微信表白代码

1、ohh:留在我身边。2、Mi manchi:我想你。3、manchi:想念你。4、lch will mit dir sein:我想和你一起。5、ich liebe dich:我爱你。以使用”我想和你一起“的代码”lch will mit dir sein“为例,具体操作使用步骤如下:工具/原料 vivoS10、OriginOS1.0、微信8.0.15。1、输入表白代...

表白句子暗语一句话表白暗语

4. 微信发送:lch will mit dir S wim(翻译:我想和你在一起)5. 微信发送:jag lskar dig(翻译:我会让你走的;重译:我爱你)6. 微信发送:ለዘላለም የእኔ እንድትሆን እǭ...

有什么好玩的表白代码?

表白代码大全可复制免费1 1.发送xoxO(会出现满屏亲亲)2.发送mi manchi(会出现满屏小星星)3.发送ohh(翻译:留在我身边)4.发送ch will mit dir S wim(翻译:我想和你在一起)5.发送Voce e meu bebe(翻译:你是我的宝贝)6.发送 RUYDUAautrinuU(翻译我只喜欢你)7.发送 love at first sight(...

微信10个表白代码,拯救你的七夕!

,温暖的称呼表白你的专属:"你是我的宝贝,我心中的唯一。6. 独一无二的爱:试试 "RUYDUAautrinuU",翻译出来就是 "我只喜欢你",简单而直接。7. 一见钟情的浪漫:发送 "love at first sight",让爱情的火花在瞬间照亮彼此的世界。8. 浪漫的星星雨:"missu" 这个代码,不仅传递思念,...

代码表白什么意思?

代码表白通常是指微信聊天中输入相对应字母代码,获得表白信息的操作,表白代码有以下5个:1、ohh:留在我身边 2、Mi manchi:我想你 3、manchi :想念你 4、lch will mit dir sein:我想和你一起 5、ich liebe dich:我爱你 以使用”我想和你一起“的代码”lch will mit dir sein“为例,...

微信七夕神秘表白代码与表情雨攻略

一、微信神秘隐藏表白代码:1. xoxo:发送后会出现满屏飞吻。2.我爱你:简单的三个字,却能触发特殊的表情雨。3.ohh:长按翻译,意为“留在我身边”。4.ilove:发送后会出现满屏的玫瑰花。5.开心:整个屏幕会出现一只小老鼠抱着爱心。6.么么哒、亲亲:发送后整个屏幕会出现一个亲吻的...

520的微信表白格式怎么发 关于520微信表白格式的办法

520到来了,想要给喜欢的人发微信表白图案要怎么操作呢?一起来看一下吧。1、520爱心格式20代码:/爱心/爱心/爱心 /爱心/爱心/爱心 /爱心/爱心/爱心/爱心 /爱心 /爱心 /爱心/爱心/爱心/爱心 /爱心/爱心/爱心 /爱心 /爱心/爱心 /爱心 /爱心 /爱心/爱心/爱心/爱心 /爱心/爱心/爱心 /爱心/爱心...

微信翻译代码我爱你怎么写 微信翻译表白代码大全

其实,关于我爱你的微信翻译很多,如果你想要更多表白的代码,不妨自己来创造代码吧!下面,小编来教教大家这些微信翻译代码是怎么弄出来的!方法如下:1、关注有道词典微信公众号 2、发送“ 加密:XXX ”给有道词典公众号,XXX代表你想加密的无论中文或者英文内容。一定要记得输入 加密:这3个...

简单表白代码 简单编程代码表白 简单bat表白代码大全 python表白代码大全简单 c语言简单表白代码 QQ的表白代码 java简短表白代码 怎么做表白代码 如何用代码表白
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
最近哪些软件里可以抢红包 做梦梦到自己腿软要跌倒,不是经常发生但是也发生过很多次了,这个不... 睡觉时经常梦到下楼梯要跌倒或有踩空的感觉是长什么病的征兆?_百度知 ... 什么红包软件抢红包最快最多? 微信不能辅助解除限制? 如何加入工作组··建立一个整体的局域网不就得了? 微信号怎么看 出50红包有没有人告诉我王者荣耀里面这里怎么样设置回大字体,用游戏键... 王者局内字体大小怎么改 电脑插上耳机后酷我音乐盒有声音,网页上的音乐没声音,昨天还好的,该怎... 宏碁笔记本电脑的蓝牙连接不上怎么办?成都售后维修在哪里 求一个示爱的小程序 C语言 我想给一个女生表白 怎么用c语言表白 宏碁电脑笔记本蓝牙怎么打开? 家里电路跳闸的原因以及怎么修复? 宏碁笔记本蓝牙搜不到设备问题? 为什么和家亲警告提醒不振动, 宏碁笔记本蓝牙连接不上? 和家亲看电视要钱吗 和家亲不用扫二维码能登上么 acer笔记本的蓝牙收索不到蓝牙设备。驱动打好了的,系统是win7,怎么办? 和家亲为什么显示和网关失去连接 宏基笔记本找不到蓝牙 中国移动和家亲内容是什么? 如何开启宏基笔记本电脑的蓝牙? 和家亲收费吗 为什么宏碁笔记本无法连接蓝牙?是怎么回事 移动和家亲网关如何设置? 小米电视绑定和家亲怎样看? 移动的和家亲监控如何在电脑上看到? 家中总是无缘无故跳闸,是怎么回事? 求一个用于表白的C语言或C++的程序,谢谢大家了 宏碁Aspire V3-551G win7下搜索不到蓝牙设备 求C语言编写的表白程序,要代码 家用电老是跳闸,试过把所有电器的插头都拔了.还是会跳闸. 如何用C语言编写程序,把&quot;我爱你&quot;循环520次? 笔记本蓝牙添加设备为什么搜索不到 家用电闸老自动跳闸,是什么原因? iPhone无线充电器充不进电了是怎么回事,前 怎么用C语言编写一个表白程序要求(在输入时先提示“我喜欢谁请输入她的名字”然后输入一个名字如果错误 谁给我写一个c语言表白代码。谢谢 家里跳闸推上去一会又跳下来的原因是什么? 表白用的c语言程序代码 下雨天家里电就跳闸是什么原因? 求一个C语言表白的代码 iPhone 8无线充电只能充到80%,怎么回事 求用c语言帮我写个程序,表白呜 要求:输入你最爱的人的名字,屏幕就会打印”xxx,我爱你”和一颗心 怎么用C语言表白,楼主先来 求一个用手机版C语言写出来的一朵玫瑰花(表白用的) 用C语言的爱情程序