微信公众号里的小网站怎么做的html网页表格制作
微信公众号里的小网站怎么做的,html网页表格制作,长春网页制作,百度指数分析报告案例文章目录 前言效果图#xff08;动态#xff09;完整代码代码讲解总结寄语 前言
烟花是一种庆祝、欢庆或庆典活动中常见的美丽表现#xff0c;它们以多彩的光芒和炫丽的形状为人们带来欢乐和惊喜。在这个项目中#xff0c;我们将使用Python编程语言创建一个简单而有趣的程… 文章目录 前言效果图动态完整代码代码讲解总结寄语 前言
烟花是一种庆祝、欢庆或庆典活动中常见的美丽表现它们以多彩的光芒和炫丽的形状为人们带来欢乐和惊喜。在这个项目中我们将使用Python编程语言创建一个简单而有趣的程序实现在屏幕上绘制出圆圈烟花的效果。
利用Python的图形库例如pygame、turtle等在屏幕上绘制出圆形烟花的效果。实现烟花的动态效果使其在屏幕上以一种生动活泼的方式展现。考虑添加一些额外的特效例如烟花爆炸后的颜色变化、尾迹效果等以提升视觉效果。
实现步骤
导入所需的图形库例如pygame。初始化屏幕并设置窗口大小。设计一个函数用于绘制烟花的圆形效果。在主程序中调用绘制烟花的函数并在屏幕上显示出烟花效果。考虑添加烟花的动态效果例如烟花上升、爆炸等过程。优化程序增加一些额外的特效提高烟花的美观程度。
效果图动态 完整代码
# -*- coding: utf-8 -*-import math, random,time
import threading
import tkinter as tk
import re
#import uuidFireworks[]
maxFireworks8
height,width600,600class firework(object):def __init__(self,color,speed,width,height):#uiduuid.uuid1()self.radiusrandom.randint(2,4) #粒子半径为2~4像素self.colorcolor #粒子颜色self.speedspeed #speed是1.5-3.5秒self.status0 #在烟花未爆炸的情况下status0爆炸后status1当status100时烟花的生命期终止self.nParticlerandom.randint(20,30) #粒子数量self.center[random.randint(0,width-1),random.randint(0,height-1)] #烟花随机中心坐标self.oneParticle[] #原始粒子坐标100%状态时self.rotThetarandom.uniform(0,2*math.pi) #椭圆平面旋转角#椭圆参数方程xa*cos(theta),yb*sin(theta)#ellipsePara[a,b]self.ellipsePara[random.randint(30,40),random.randint(20,30)] theta2*math.pi/self.nParticlefor i in range(self.nParticle):trandom.uniform(-1.0/16,1.0/16) #产生一个 [-1/16,1/16) 的随机数x,yself.ellipsePara[0]*math.cos(theta*it), self.ellipsePara[1]*math.sin(theta*it) #椭圆参数方程xx,yyx*math.cos(self.rotTheta)-y*math.sin(self.rotTheta), y*math.cos(self.rotTheta)x*math.sin(self.rotTheta) #平面旋转方程self.oneParticle.append([xx,yy])self.curParticleself.oneParticle[0:] #当前粒子坐标self.threadthreading.Thread(targetself.extend) #建立线程对象def extend(self): #粒子群状态变化函数线程for i in range(100):self.status1 #更新状态标识self.curParticle[[one[0]*self.status/100, one[1]*self.status/100] for one in self.oneParticle] #更新粒子群坐标time.sleep(self.speed/50)def explode(self):self.thread.setDaemon(True) #把现程设为守护线程self.thread.start() #启动线程def __repr__(self):return (color:{color}\n speed:{speed}\nnumber of particle: {np}\ncenter:[{cx} , {cy}]\nellipse:a{ea} , b{eb}\nparticle:\n{p}\n).format(colorself.color,speedself.speed,npself.nParticle,cxself.center[0],cyself.center[1],pstr(self.oneParticle),eaself.ellipsePara[0],ebself.ellipsePara[1])def colorChange(fire):rgbre.findall(r(.{2}),fire.color[1:])csfire.statusflambda x,c: hex(int(int(x,16)*(100-c)/30))[2:] #当粒子寿命到70%时颜色开始线性衰减if cs70:ccr,ccg,ccbf(rgb[0],cs),f(rgb[1],cs),f(rgb[2],cs)else:ccr,ccg,ccbrgb[0],rgb[1],rgb[2]return #{0:02}{1:02}{2:02}.format(ccr,ccg,ccb)def appendFirework(n1): #递归生成烟花对象if nmaxFireworks or len(Fireworks)maxFireworks:passelif n1:cl#{0:06}.format(hex(int(random.randint(0,16777215)))[2:]) # 产生一个0~167772150xFFFFFF的随机数作为随机颜色afirework(cl,random.uniform(1.5,3.5),width,height)Fireworks.append( {particle:a,points:[]} ) #建立粒子显示列表‘particle’为一个烟花对象‘points’为每一个粒子显示时的对象变量集a.explode()else:appendFirework()appendFirework(n-1)def show(c):for p in Fireworks: #每次刷新显示先把已有的所以粒子全部删除for pp in p[points]:c.delete(pp)for p in Fireworks: #根据每个烟花对象计算其中每个粒子的显示对象onePp[particle]if oneP.status100: #状态标识为100说明烟花寿命结束Fireworks.remove(p) #移出当前烟花appendFirework() #新增一个烟花continueelse:li[[int(cp[0]*2)oneP.center[0],int(cp[1]*2)oneP.center[1]] for cp in oneP.curParticle] #把中心为原点的椭圆平移到随机圆心坐标上colorcolorChange(oneP) #根据烟花当前状态计算当前颜色for pp in li:p[points].append(c.create_oval(pp[0]-oneP.radius, pp[1]-oneP.radius, pp[0]oneP.radius, pp[1]oneP.radius, fillcolor)) #绘制烟花每个粒子root.after(50, show,c) #回调每50ms刷新一次if __name____main__:appendFirework(maxFireworks)root tk.Tk()cv tk.Canvas(root, heightheight, widthwidth)cv.create_rectangle(0, 0, width, height, fillblack)cv.pack()root.after(50, show,cv)root.mainloop()import pygame
import sys
import random# 初始化pygame
pygame.init()# 设置窗口大小
screen_width, screen_height 800, 600
screen pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption(Circle Fireworks)# 定义烟花绘制函数
def draw_firework(x, y, color):pygame.draw.circle(screen, color, (x, y), 10)# 主程序
def main():clock pygame.time.Clock()while True:for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()sys.exit()# 清空屏幕screen.fill((0, 0, 0))# 生成随机位置和颜色的烟花firework_x random.randint(50, screen_width - 50)firework_y random.randint(50, screen_height - 50)firework_color (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))# 绘制烟花draw_firework(firework_x, firework_y, firework_color)# 更新显示pygame.display.flip()# 控制帧率clock.tick(30)if __name__ __main__:main()
代码讲解
这段代码实现了一个简单的烟花动画效果使用了Python的tkinter库进行图形界面的展示。以下是代码的主要解析 导入模块 import math, random, time
import threading
import tkinter as tk
import re导入了所需的模块包括数学计算、随机数生成、线程、图形界面和正则表达式等。 全局变量定义 Fireworks []
maxFireworks 8
height, width 600, 600定义了全局变量包括烟花列表、最大烟花数量、画布的高度和宽度。 烟花类 firework 的定义 class firework(object):# ... 详细的初始化和方法定义在这里定义了烟花类包括烟花的初始化、状态变化线程extend、爆炸方法explode以及__repr__方法用于对象的字符串表示。 颜色变化函数 colorChange def colorChange(fire):# ... 根据粒子状态计算颜色根据粒子状态计算颜色当粒子寿命到达70%时颜色开始线性衰减。 烟花生成函数 appendFirework def appendFirework(n1):# ... 递归生成烟花对象的函数递归生成烟花对象其中包括设置烟花的颜色、速度、初始坐标等信息并启动烟花的爆炸线程。 显示函数 show def show(c):# ... 每次刷新画布绘制烟花粒子每次刷新画布绘制烟花粒子包括更新烟花状态、颜色和位置信息。 主程序入口 if __name____main__:# ... 初始化烟花创建tkinter窗口并启动刷新循环初始化烟花创建 tkinter 窗口启动刷新循环每50毫秒刷新一次画布。
总体而言这段代码通过 tkinter 创建了一个简单的窗口然后在窗口中显示了多个烟花的效果通过线程和定时器实现了烟花的动画效果。
总结
这段代码实现了一个简单但趣味十足的烟花动画效果结合了多线程和图形界面编程的知识。以下是一些总结和心得 多线程应用 通过使用 Python 中的 threading 模块实现了烟花粒子的状态变化extend方法和动画效果。这种方式使得程序能够同时执行多个任务提高了程序的响应性和并发性。 图形界面编程 使用 tkinter 创建了一个简单的窗口通过画布 Canvas 实现了动画的显示。这种方式使得程序能够在图形界面中展示烟花效果增加了用户的可视化体验。 数学和物理模型 通过使用数学中的椭圆参数方程和平面旋转方程创建了烟花的粒子坐标。这种数学模型使得烟花的运动轨迹更加真实和有趣。 动画效果的控制 通过控制粒子的状态和颜色实现了烟花的生命周期和颜色变化效果。这种设计使得烟花的表现更加生动和多样化。 递归的使用 通过递归方式生成烟花对象实现了多个烟花的同时展示。这种递归生成对象的方式使得程序结构清晰并方便了对烟花的管理和扩展。
总的来说这个项目不仅展示了 Python 在图形界面编程和多线程方面的应用还充分体现了程序设计中数学和物理模型的运用。通过这个项目可以更深入地理解多线程编程、图形界面设计以及数学模型在计算机图形学中的应用。
寄语
在学习和编程的旅途中不断挑战自己、探索新领域是非常重要的。记住每一行代码都是一个学习的机会每一个bug都是一个成长的机会。保持好奇心保持对知识的渴望永远保持学习的心态。
无论面对怎样的难题和挑战都相信自己的能力相信坚持不懈的努力最终会收获成功。同时与他人合作、分享经验共同进步是团队中不可或缺的一部分。
编程是一门艺术创造力是其中的灵魂。勇敢地去创造、去尝试让你的代码成为一种表达方式传递你的思想和激情。最重要的是享受编程的过程享受解决问题的乐趣。
愿你的代码能够改变世界愿你的探索之路越走越宽愿你的每一个项目都充满创意和成就。加油前程似锦
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86876.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!