Advertisement
phjoe

Meteor 2

Jan 10th, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import appuifw as A
  2. import graphics as G
  3. import math
  4. import random
  5.  
  6. def h2r(h,s,v):
  7.  if s==0.0: return v,v,v
  8.  i=int(h*6.0)
  9.  f=(h*6.0)-i
  10.  p=v*(1.0-s)
  11.  q=v*(1.0-s*f)
  12.  t=v*(1.0-s*(1.0-f))
  13.  if i%6==0:return v,t,p
  14.  if i==1:return q,v,p
  15.  if i==2:return p,v,t
  16.  if i==3:return p,q,v
  17.  if i==4:return t,p,v
  18.  if i==5:return v,p,q
  19.  
  20. def gen(n=256):
  21.  hsv=[(x*0.9/n,0.9,0.9) for x in xrange(n)]
  22.  rgb=map(lambda x: tuple(map(lambda x:int(x*255), h2r(*x))),hsv)
  23.  return rgb
  24.  
  25. class Meteor(object):
  26.  def __init__(self,x,y,z,c):
  27.   self.p=[0,0,600]
  28.   self.x=x
  29.   self.y=y
  30.   self.z=z
  31.   self.c=c
  32.   self.AX=self.AY=self.AZ=0
  33.  
  34.  def update(self,g):
  35.   cx,cy,sz,dist=W/2,H/2,8,120
  36.   sinx=math.sin(self.AX*math.pi/180)
  37.   cosx=math.cos(self.AX*math.pi/180)
  38.   siny=math.sin(self.AY*math.pi/180)
  39.   cosy=math.cos(self.AY*math.pi/180)
  40.   sinz=math.sin(self.AZ*math.pi/180)
  41.   cosz=math.cos(self.AZ*math.pi/180)
  42.  
  43.   ZX=self.x*cosz-self.y*sinz-self.x
  44.   ZY=self.y*sinz + self.y*cosz - self.y
  45.   YX=(self.x+ZX)*cosy - self.z*siny - (self.x+ZX)
  46.   YZ=(self.x+ZX) * siny+self.z * cosy-self.z
  47.   XY=(self.y+ZY)*cosx - (self.z+YZ)*sinx - (self.y+ZY)
  48.   XZ=(self.y+ZY)*sinx + (self.z+YZ)*cosx - (self.z+YZ)
  49.   pp=(self.z+self.p[2]+(XZ+YZ))/dist
  50.   if pp < 0.01:pp=0.01
  51.   dx=(self.x+self.p[0]+(YX+ZX))/pp
  52.   dy=(self.y+self.p[1]+(ZY+XY))/pp
  53.   g.point((cx+dx,cy+dy),self.c,width=sz/pp)
  54.   self.p[2]-=5
  55.  
  56.  
  57.  
  58. class App:
  59.  def __init__(self):
  60.   self.run=0
  61.   A.app.screen='full'
  62.   self.c = A.Canvas(redraw_callback=self.redraw,event_callback=None)
  63.   A.app.body=self.c
  64.   A.app.menu=[]
  65.   A.app.exit_key_handler = self.stop
  66.  
  67.  def stop(self):
  68.   self.run=0
  69.  
  70.  def redraw(self,x):
  71.   if bg:
  72.    self.c.blit(bg)
  73.  
  74.  def play(self):
  75.   self.run=1
  76.   timer,step=0,2
  77.   while self.run:
  78.    timer+=1
  79.    if timer>step:
  80.     meteor.append( Meteor(rand(-100,100),rand(-100,100),rand(-40,40),cho(color)))
  81.     timer=0
  82.  
  83.    bg.clear(0x222)
  84.    for m in meteor:
  85.     if m.p[2]<0:
  86.      meteor.remove(m)
  87.     m.update(bg)
  88.    #bg.text((5,H-8),u'Total: %d' %len(meteor),0xfff)
  89.    self.redraw(0)
  90.    A.e32.ao_sleep(1e-08)
  91.    A.e32.reset_inactivity()
  92.  
  93. W,H=G.sysinfo.display_pixels()
  94. bg=G.Image.new((W,H))
  95. rand,cho=random.randrange,random.choice
  96. color=gen(256)
  97.  
  98. meteor=[Meteor(rand(-80,80),rand(-80,80),rand(-40,40),cho(color) )]
  99. ap=App()
  100. ap.play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement