새해 복 많이 받 으 세 요!python 현란 한 불꽃 피 우기 효과 구현
6133 단어 python새해 복 많이 받 으 세 요.불꽃놀이
환경
Pycharm
모듈
1.tkinter:이 작은 프로젝트 의 주인공 은 python 그래 픽 모듈 입 니 다.또한 Python 3 는 이 모듈 을 자체 적 으로 가지 고 있어 서 따로 설치 할 필요 가 없습니다.자바 의 swing 그래 픽 모듈 과 같 습 니 다.
2.PIL:Python Imaging Library 는 Python 플랫폼 의 이미지 처리 표준 모듈 입 니 다.Python 3 에서 도 자체 적 으로 가 져 왔 습 니 다.이 항목 에서 배경 그림 가 져 오기 에 사 용 됩 니 다.
3.time:이 모듈 은 모두 가 낯 설 지 않 을 것 이 라 고 믿 습 니 다.불꽃놀이 의 피 어 나 고 떨 어 지 며 사라 지 는 시간 을 조절 하기 위해 가 져 옵 니 다.
4.random:난수 모듈,불꽃 랜 덤 좌표 점 생 성,랜 덤 피 어 나 는 속도,랜 덤 으로 사라 지 는 시간.
5.math:이 모듈 도 잘 알 고 있 을 것 입 니 다.불꽃 이 피 는 입 자 를 일정한 각도 로 흩 어 뜨리 는 것 이 목적 입 니 다.
효과
프로젝트 가 최종 적 으로 실현 되 는 효 과 는 위 와 같다.
코드
다음은 제 가 그 큰 신의 코드 를 배우 고 간단 한 주 해 를 추가 한 것 입 니 다.
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.5
#listof colors,can choose randomly or use as queue(FIFO
colors=['red','blue','yellow','white','green','orange','purple','seagreen','indigo','cornflowerblue']
'''
create a class for particles
particles are emitted almost randomly on the sky,
forming around( ) of circle(a star)before falling and getting removed from canvas
Attributes( ):
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# x
self.y=y# x
self.initial_speed=explosion_speed#
self.vx=vx# x
self.vy=vy# y
self.total=total#
self.age=0#
self.color=color#
self.cv=cv#
self.cid=self.cv.create_oval(x-size,y-size,x+size,y+size,fill=self.color)#create_oval() , x, y, x, y, , id
self.lifespan=lifespan#
def update(self,dt):# ,
self.age+=dt
#
if self.alive() and self.expand():# (2s) && (1.2s)
move_x=cos(radians(self.id*360/self.total))*self.initial_speed# x
move_y=sin(radians(self.id*360/self.total))*self.initial_speed# y
self.cv.move(self.cid, move_x, move_y)# id x y
self.vx=move_x/(float(dt)*1000)
#
elif self.alive():# , ,
move_x=cos(radians(self.id*360/self.total))#x
self.cv.move(self.cid,self.vx+move_x,self.vy+GRAVITY*dt)# y , v a
self.vy+=GRAVITY*dt# y
elif self.cid is not None:# ,
cv.delete(self.cid)#
self.cid=None
#
def expand(self):
return self.age<=1.2# 1.2s
#
def alive(self):#
return self.age<=self.lifespan
'''
:
“ ” , ( , )
'''
#
def simulate(cv):
t=time()#time() 1970 , 6
explode_points=[]# --
wait_time=randint(10,100)# int n,10<=n<=100
numb_explode=randint(6,10)# 6~10
#
for point in range(numb_explode):#
objects=[]#
x_cordi=randint(50,550)# x
y_cordi=randint(50,150)# y
speed=uniform(0.5,1.5)# float speed,0.5<=speed<1.5
size=uniform(0.5,3)# float size,0.5<=size<3
color=choice(colors)#choice() python , , ,
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,
vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))# ,
objects.append(r)#
explode_points.append(objects)#
total_time=.0# 0
# 1.8
while total_time<1.8:
sleep(0.01)# 0.01s
tnew=time()#
t,dt=tnew,tnew-t# , tnew-t
for point in explode_points:#
for item in point:#
item.update(dt)#
cv.update()#
total_time+=dt# while
root.after(wait_time,simulate,cv)# , , , ,
def close(*ignore):
#
global root
root.quit()
if __name__=="__main__":
root=tk.Tk()
cv=tk.Canvas(root,height=600,width=700)#
#
#cv.create_rectangle(0,0,600,600,fill="black")
#use a nice background image
image=Image.open("L:\PyCharm Community Edition 2018.2.2\Python_program\image.jpg")
photo=ImageTk.PhotoImage(image)
cv.create_image(0,0,image=photo,anchor='nw')#
cv.pack()# cv
root.protocol("WM_DELETE_WINDOW",close)
# 0.1s stimulate()
root.after(100,simulate,cv)# stimulate
root.mainloop()# root,
# python
마무리이 블 로 그 는 당분간 이렇다.기회 가 된다 면 다시 할 것 이지 만,가장 큰 가능성 은 기약 이 없 을 것 이다.먼저 항목 에 대해 다음 과 같이 수정 할 계획 입 니 다.
1.마우스 인 터 랙 션 기능 을 추가 하고 사용자 가 마우스 로 클릭 한 위치 에 불꽃 이 추가 로 피 어 납 니 다.
2.텍스트 그리 기 기능 을 추가 합 니 다.배경 그림 에 글자 가 숨겨 져 있 습 니 다.불꽃 이 피 면 글자 에 떨 어 지 는 입자 가 사라 지지 않 고 창 에 고정 되 어 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.