5 func randomBetween(minvalue,maxvalue#) => math.random()*(maxvalue-minvalue)+minvalue
8 green=Image.load "image/green_ball.png",
9 love=Image.load "image/love_ball.png",
10 mars=Image.load "image/3.png"
13 class Blob @{attribute, rename="good", virtual}
15 const minsize, maxsize:=40,80
16 const minspeed,maxspeed:=6,40
20 func randomcolor()=>math.random()*maxcolor
23 field img:Image=images[
24 math.random()>0.6 ? "love"
25 | math.random()>0.5 ? "mars"
29 field r:=randomcolor()
30 field g:=randomcolor()
31 field b:=randomcolor()
36 field size:=randomBetween(minsize,maxsize)
63 method draw() @{limit=-1}
68 setScale(s/img.getWidth(),s/img.getHeight())
76 class OvalBlob extends Blob
91 field startTime, totalTime#=0,0
99 totalTime=MilliSecs()-startTime+1
103 ::get => math.floor(frameCount/totalTime*1000)
108 global fpsCounter:= new FPSCounter()
114 local blobs:Blob[]={}
116 local b:=new OvalBlob()
117 b.xs=math.cos(i/50*math.pi)*2
118 b.ys=math.sin(i/50*math.pi)*2
125 while not KeyHit(27) do
126 setClsColor(80,50,180)
129 setBlend(Blend.alpha)
134 local a1:=math.atan2(my-oy,mx-ox)
135 local d:=((my-oy)^2+(mx-ox)^2)/60000
138 for i= 1, math.random()*6 do
139 falling=(falling ) % maxcount + 1
140 local a:=(math.random()-0.5)*3.14/20+a1
141 local s:=randomBetween(Blob.minspeed,Blob.maxspeed)*d
142 local b1:=blobs[falling]
143 b1.(x,y,xs,ys) =ox,oy, math.cos(a)* s ,math.sin(a)* s
151 setColor(255,255,255)
160 drawRect(0,500,800,100)
161 drawText("fps:"..fpsCounter.fps,0,0)
162 drawText("mem:"..collectgarbage("count"),0,20)
163 flip(MouseDown(2)? 0 | -1)