Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import appuifw as A
- import graphics as G
- import math
- import random
- def h2r(h,s,v):
- if s==0.0: return v,v,v
- i=int(h*6.0)
- f=(h*6.0)-i
- p=v*(1.0-s)
- q=v*(1.0-s*f)
- t=v*(1.0-s*(1.0-f))
- if i%6==0:return v,t,p
- if i==1:return q,v,p
- if i==2:return p,v,t
- if i==3:return p,q,v
- if i==4:return t,p,v
- if i==5:return v,p,q
- def gen(n=256):
- hsv=[(x*0.9/n,0.9,0.9) for x in xrange(n)]
- rgb=map(lambda x: tuple(map(lambda x:int(x*255), h2r(*x))),hsv)
- return rgb
- class Meteor(object):
- def __init__(self,x,y,z,c):
- self.p=[0,0,600]
- self.x=x
- self.y=y
- self.z=z
- self.c=c
- self.AX=self.AY=self.AZ=0
- def update(self,g):
- cx,cy,sz,dist=W/2,H/2,8,120
- sinx=math.sin(self.AX*math.pi/180)
- cosx=math.cos(self.AX*math.pi/180)
- siny=math.sin(self.AY*math.pi/180)
- cosy=math.cos(self.AY*math.pi/180)
- sinz=math.sin(self.AZ*math.pi/180)
- cosz=math.cos(self.AZ*math.pi/180)
- ZX=self.x*cosz-self.y*sinz-self.x
- ZY=self.y*sinz + self.y*cosz - self.y
- YX=(self.x+ZX)*cosy - self.z*siny - (self.x+ZX)
- YZ=(self.x+ZX) * siny+self.z * cosy-self.z
- XY=(self.y+ZY)*cosx - (self.z+YZ)*sinx - (self.y+ZY)
- XZ=(self.y+ZY)*sinx + (self.z+YZ)*cosx - (self.z+YZ)
- pp=(self.z+self.p[2]+(XZ+YZ))/dist
- if pp < 0.01:pp=0.01
- dx=(self.x+self.p[0]+(YX+ZX))/pp
- dy=(self.y+self.p[1]+(ZY+XY))/pp
- g.point((cx+dx,cy+dy),self.c,width=sz/pp)
- self.p[2]-=5
- class App:
- def __init__(self):
- self.run=0
- A.app.screen='full'
- self.c = A.Canvas(redraw_callback=self.redraw,event_callback=None)
- A.app.body=self.c
- A.app.menu=[]
- A.app.exit_key_handler = self.stop
- def stop(self):
- self.run=0
- def redraw(self,x):
- if bg:
- self.c.blit(bg)
- def play(self):
- self.run=1
- timer,step=0,2
- while self.run:
- timer+=1
- if timer>step:
- meteor.append( Meteor(rand(-100,100),rand(-100,100),rand(-40,40),cho(color)))
- timer=0
- bg.clear(0x222)
- for m in meteor:
- if m.p[2]<0:
- meteor.remove(m)
- m.update(bg)
- #bg.text((5,H-8),u'Total: %d' %len(meteor),0xfff)
- self.redraw(0)
- A.e32.ao_sleep(1e-08)
- A.e32.reset_inactivity()
- W,H=G.sysinfo.display_pixels()
- bg=G.Image.new((W,H))
- rand,cho=random.randrange,random.choice
- color=gen(256)
- meteor=[Meteor(rand(-80,80),rand(-80,80),rand(-40,40),cho(color) )]
- ap=App()
- ap.play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement