Microsoft Small Basic

Program Listing: cht656
' Challenge of the month August 2012 Fire works ver.2 by NaochanON

init()

While "true"
Launch()
Falling()
remake()
endwhile


Sub Falling
DR=20
t1=Clock.ElapsedMilliseconds
For L=1 To 50
If L<10 Then
r=1
Else
r=r-0.022
EndIf
If L=10 Then
Program.Delay(200)
EndIf
For j=1 To HR
For k=1 To HM
angle=math.GetRadians(360/HR*j)
X=Shapes.GetLeft(star[k][j])+DR*Math.Cos(angle)*k/HM*r
Y=Shapes.Gettop(star[k][j]) +DR*Math.sin(angle)*k/HM*r*r + Gravity*Math.Power(Clock.ElapsedMilliseconds-t1,2)/2/1000000
Shapes.Move(star[k][j],X,Y)
Shapes.Zoom(star[k][j],(40-L)/40,(40-L)/40)
EndFor
EndFor
Program.Delay(40)
EndFor
EndSub

sub Launch
'------------------------- Launch -------------------------------
Y=750
ddx= 100-math.GetRandomNumber(200) ' Launch direction
X=200*math.GetRandomNumber(3) +math.GetRandomNumber(200) ' Launch place
Shapes.Move(sc,X-15,Y)
Gravity=9.8
t0=Clock.ElapsedMilliseconds
For L=1 To 30
X=X+ddx/20
Y=Y-40 + Gravity*Math.Power(Clock.ElapsedMilliseconds-t0,2)/2/1000000
Shapes.Move(sc,X-15,Y) ' Launching
Shapes.Zoom(sc,1-L/25,1-L/25) ' Scale down
For j=1 To HR
For k=1 To HM
Shapes.Move(star[k][j],X,Y)
EndFor
EndFor
Program.Delay(80)
EndFor
Shapes.HideShape(SC)
EndSub

Sub init
GraphicsWindow.BackgroundColor="Black"
GraphicsWindow.Top=0
GraphicsWindow.Left=50
GraphicsWindow.Width=1200
GraphicsWindow.Height=700
'------------------------- Hanabi base -------------------------------
GraphicsWindow.BrushColor="Yellow"
sc=shapes.AddEllipse(40,40)
'------------------------- color Number-------------------------------
clr="1=white;2=Yellow;3=Red;4=Magenta;5=lightcyan;6=lightpink;7=Deeppink;8=lime;9=Aqua;10=Violet;"
clr=clr+"11=LightYellow;12=Lightgreen;13=Lightblue;14=Lavender;15=greenYellow"
'------------------------- Hanabi stars -------------------------------
HR=25 ' Number of hanabi 2725 ---
HM=5 ' Fireworks
For j=1 To HR
For k=1 To HM '
RND=Math.GetRandomNumber(15)
GraphicsWindow.BrushColor=clr[RND]
GraphicsWindow.PenColor=clr[RND]
star[k][j]=Shapes.AddText( Text.GetCharacter(2*16*16*16+7*16*16+2*16+5+k) ) ' star mark 2725 ---
Shapes.Move(star[k][j],500,900)
EndFor
EndFor
EndSub

Sub remake
For j=1 To HR
For k=1 To HM '
Shapes.Zoom(star[k][j],1,1)
EndFor
EndFor
Program.Delay(2000)
Shapes.showShape(SC)
EndSub