Microsoft Small Basic

Program Listing:
Embed this in your website
' Challenge of the month December 2012 by NaochanON
' Draw a Christmas tree

GUI()

While "true"
  showstarH2()
  Program.Delay(1000)
  showstarH1()
  Program.Delay(1000)
  blinking()
  Program.Delay(1000)
  showstarV2()
  Program.Delay(1000)
  showstarV1()
  Program.Delay(1000)
endwhile

Sub snowing
  NN=NN+1
  Shapes.Move(snow1[NN],Math.GetRandomNumber(1000),-(100+Math.GetRandomNumber(300)))
  Shapes.Move(snow2[NN],Math.GetRandomNumber(1000),-(100+Math.GetRandomNumber(300)))
  ZM=(5+Math.GetRandomNumber(20))/10
  Shapes.Zoom(snow1[NN],ZM,ZM)
  Shapes.Zoom(snow2[NN],ZM,ZM)
  Shapes.Animate(snow1[NN],Shapes.GetLeft(snow1[NN]),700-Math.GetRandomNumber(250),2000+Math.GetRandomNumber(2000))
  Shapes.Animate(snow2[NN],Shapes.GetLeft(snow2[NN]),700-Math.GetRandomNumber(150),2000+Math.GetRandomNumber(2000))
  If NN>SN Then
    NN=0
  EndIf
EndSub

Sub showstarH1
  For i=pitch To 1 Step -1
    For j=1 To 20
      For k=1 to M
        Shapes.SetOpacity(star1[K][j][i],100)
        Shapes.SetOpacity(star2[K][j][i],0)
      EndFor
    EndFor
    snowing()
  EndFor
EndSub

Sub showstarH2
  For i=1 To pitch
    For j=1 To 20
      For k=1 to M
        Shapes.SetOpacity(star1[K][j][i],0)
        Shapes.SetOpacity(star2[K][j][i],100)
      EndFor
    EndFor
    snowing()
  EndFor
EndSub

Sub showstarV1
  For j=20 To 1 Step -1
    For i=1 To pitch
      For k=1 to M
        Shapes.SetOpacity(star1[K][j][i],100)
        Shapes.SetOpacity(star2[K][j][i],0)
      EndFor
    EndFor
    snowing()
  EndFor
EndSub

Sub showstarV2
  For k=1 to M
    For j=1 To 20
      For i=1 To pitch
        Shapes.SetOpacity(star1[K][j][i],0)
        Shapes.SetOpacity(star2[K][j][i],100)
      EndFor
    EndFor
    snowing()
  EndFor
EndSub

Sub blinking
  For i=1 To pitch
    For j=1 To 20
      For k=1 to M
        PCNT=2-Math.GetRandomNumber(2)     ' 1 or 0
        Shapes.SetOpacity(star1[K][j][i],100*PCNT)
        Shapes.SetOpacity(star2[K][j][i],100*(1-PCNT))
      EndFor
    EndFor
    snowing()
  EndFor
EndSub

Sub GUI
  GraphicsWindow.Hide()
  GraphicsWindow.Width=1000
  GraphicsWindow.Height=700
  GraphicsWindow.Top=10
  GraphicsWindow.Left=50
  GraphicsWindow.BackgroundColor="Black"
  GraphicsWindow.BrushColor="Lightcyan"
  GraphicsWindow.PenColor="Lightcyan"
  '-------------------- Snow back -----------------------------------
  SN=1000
  For L=1 To SN
    snow1[L]= Shapes.AddText("*")
    Shapes.Move(snow1[L],100,-100)
  endfor
  '-------------------------------------------------------------------------
  M=4
  For k=1 To M
    '-------------------- Position -----------------------------------
    X0=30 +(150+Math.GetRandomNumber(100))*(k-1)  ' left position
    Top=20+Math.GetRandomNumber(120)              ' tree top y-position
    Xw=200 +Math.GetRandomNumber(50)              ' tree width
    Height=300+Math.GetRandomNumber(100)          ' tree height
    XC=Xw/2+X0                                    ' tree top x-position 8center)
    Y0=Top+Height                                 ' tree bottom
    Pitch=12                                      ' light number
    '-------------------- Tree ---------------------------------------
    GraphicsWindow.BrushColor="saddlebrown"
    GraphicsWindow.PenColor="saddlebrown"
    tree1[K]=Shapes.AddTriangle(0,Height+90,60,Height+90,30,0)
    Shapes.Move(tree1[K],xc-30+3,top)
    GraphicsWindow.BrushColor="Darkgreen"
    GraphicsWindow.PenColor="Darkgreen"
    tree2[K]=Shapes.AddTriangle(0,Height,Xw-10,Height,Xw/2,0)
    Shapes.Move(tree2[K],x0+3,top)
    '-------------------- star Light ---------------------------------------
    For j=1 To pitch
      For i=1 To pitch
        y=Y0-(height/Pitch)*i
        dx0=Xw/Pitch*(j-1)
        x=x0+dx0+((Xw-2*dx0)/2/Pitch)*i
        GraphicsWindow.BrushColor="Yellow"
        GraphicsWindow.PenColor="yellow"
        star1[K][j][i]=Shapes.AddText("★")
        GraphicsWindow.BrushColor="cyan"
        GraphicsWindow.PenColor="cyan"
        star2[K][j][i]=Shapes.AddText("*")
        Shapes.Move(star1[K][j][i],x,y)
        Shapes.Move(star2[K][j][i],x,y)
        Shapes.SetOpacity(star2[K][j][i],0)
      EndFor
    EndFor
    '-------------------------------------------------------------------------
  endfor
  '-------------------- Snow Front -----------------------------------
  GraphicsWindow.BrushColor="Lightcyan"
  GraphicsWindow.PenColor="Lightcyan"
  For L=1 To SN
    snow2[L]= Shapes.AddText("*")
    Shapes.Move(snow2[L],100,-100)
  endfor
  '-------------------------------------------------------------------------
  GraphicsWindow.Show()
EndSub

Copyright (c) Microsoft Corporation. All rights reserved.