Microsoft Small Basic

Program Listing:
Embed this in your website
' Challenge of the Month - August 2015 Draw a Shark by NaochanON

GUI()

While "true"
  NN=NN+1
  If Math.Remainder(NN,15)=0 then
    ddy=3- Math.GetRandomNumber(6)
  endif
  '-------------------------------------------------------------------------------------------------------------------------
  MaxLeft=0
  For j= 1 To NMB
    Shapes.Move( Sardine[j],Shapes.GetLeft(Sardine[j])-5,Shapes.GetTop(Sardine[j])+ddy)
    If Shapes.GetTop(Sardine[j])<80 then
      Shapes.Move( Sardine[j],Shapes.GetLeft(Sardine[j])-5,80+math.GetRandomNumber(30))
    endif
  endfor
  '-------------------------------------------------------------------------------------------------------------------------
  For i = 1 To Array.GetItemCount(Shark)
    If Shapes.GetTop(SHP[1])<80 then
      ddy=0
    endif
    Shapes.Move(SHP[i],Shapes.GetLeft(SHP[i])-5,Shapes.GetTop(SHP[i])+ddy+1)
  EndFor
  If ddy>0 then
    For ii=10 to 13
      Shapes.Rotate(SHP[ii],15)
    endfor
  Else
    For ii=10 to 13
      Shapes.Rotate(SHP[ii],-5)
    endfor
  endif
  If Shapes.GetLeft(SHP[1])<-200 Then
    Sardine_Right()
    shark_Right()
  EndIf
  '-------------------------------------------------------------------------------------------------------------------------
  bbl_Move()
  Program.Delay(15)
endwhile

Sub GUI
  GraphicsWindow.BackgroundColor="Lightcyan"
  GraphicsWindow.width=1200
  GraphicsWindow.height=700
  GraphicsWindow.Top=0
  GraphicsWindow.Left=0
  '-------------------------------------------------------------------------------------------------------------------------
  GraphicsWindow.BrushColor="Blue"
  GraphicsWindow.PenColor="blue"
  GraphicsWindow.PenWidth=2
  For i=5 To 1 Step -1
    sblue[i]= Shapes.AddRectangle(1400,42*i)          ' stripe
    y=y+i
    Shapes.Move(sblue[i],0,720-42*y)
    Shapes.SetOpacity(sblue[i],15*i)
  EndFor
  '-------------------------------------------------------------------------------------------------------------------------
  GraphicsWindow.BrushColor="White"
  GraphicsWindow.PenColor="White"
  GraphicsWindow.PenWidth=3
  For k=1 To 5
    For L=1 To 6
      By[k][L]=800
      sbbl[k][L]=Shapes.AddEllipse(L+4,L+4)               ' bubbles
      bx[k][L]=250*(K-1)+30*Math.GetRandomNumber(L)
      Shapes.Move(sbbl[k][L],bx[k][L],By[k][L])
    EndFor
  EndFor
  '-------------------------------------------------------------------------------------------------------------------------
  GraphicsWindow.BrushColor="Blue"
  GraphicsWindow.PenColor="Blue"
  NMB=80
  For j=1 To NMB
    w= 15+math.GetRandomNumber(10)
    Sardine[j]=Shapes.AddEllipse(w,w*0.2)         ' Sardines
  EndFor
  Sardine_Right()
  '-------------------------------------------------------------------------------------------------------------------------
  Shark[1] = "fn=rc;x=353;y=87;w=43;h=34;angle=25;bc=#2792C3;pc#2792C3;pw=2;"    ' fin-1
  Shark[2] = "fn=rc;x=273;y=192;w=43;h=34;angle=-20;bc=#2792C3;pc#2792C3;pw=2;"  ' fin -2
  Shark[3] = "fn=rc;x=353;y=172;w=43;h=34;angle=-30;bc=#2792C3;pc#2792C3;pw=2;"  ' fin-3
  Shark[4] = "fn=el;x=64;y=80;w=352;h=130;bc=#A0D8EF;pc#2792C3;pw=2;"            ' body white
  Shark[5] =  "fn=el;x=70;y=83;w=342;h=100;bc=#2792C3;pc#2792C3;pw=2;"           ' body navy
  Shark[6] = "fn=tr;x=0;y=82;x1=0;y1=60;x2=95;y2=25;x3=80;y3=90;angle=0;bc=#2792C3;pc=#2792C3;pw=2;"  ' Head
  Shark[7] = "fn=el;x=33;y=130;w=16;h=12;bc=#FFEA00;pc#2792C3;pw=2;"              ' eye
  Shark[8] = "fn=ln;x=36;y=128;x1=0;y1=0;x2=8;y2=14;pc=#222C3A;bc=#FFFFF3;pw=2;"  ' eye
  Shark[9] = "fn=tr;x=170;y=0;x1=68;y1=0;x2=0;y2=89;x3=85;y3=89;angle=0;bc=#2792C3;pc=#2792C3;pw=2;"      ' Dorsal fin
  Shark[10] = "fn=tr;x=400;y=70;x1=140;y1=0;x2=0;y2=78;x3=58;y3=78;angle=0;bc=#2792C3;pc=#2792C3;pw=2;"   ' upperCaudal fin
  Shark[11] = "fn=tr;x=440;y=70;x1=100;y1=0;x2=0;y2=78;x3=28;y3=78;angle=0;bc=#A0D8EF;pc#A0D8EF;pw=2;"    ' Caudal fin white
  Shark[12] = "fn=tr;x=400;y=148;x1=0;y1=0;x2=70;y2=0;x3=95;y3=50;angle=0;bc=#A0D8EF;pc#2792C3;pw=2;"     ' underCaudal fin
  Shark[13] = "fn=tr;x=135;y=160;x1=0;y1=20;x2=50;y2=0;x3=66;y3=122;angle=0;bc=#2992C3;pc#2792C3;pw=2;"   ' Pelvic fin
  Shark[14] = "fn=tr;x=30;y=148;x1=0;y1=5;x2=40;y2=0;x3=10;y3=10;angle=0;bc=#A0D8EF;pc#2792C3;pw=2;"      ' mouth
  Shark[15] = "fn=tr;x=356;y=94;x1=0;y1=0;x2=80;y2=46;x3=0;y3=75;angle=0;bc=#2792C3;pc=#2792C3;pw=2;"     ' tail
  s=0.5 ' 0.4+ (2-math.GetRandomNumber(4))*0.1
  For i = 1 To Array.GetItemCount(Shark)
    GraphicsWindow.Penwidth = Shark[i]["pw"]*s
    GraphicsWindow.PenColor = Shark[i]["pc"]
    GraphicsWindow.BrushColor = Shark[i]["bc"]
    If Shark[i]["fn"] = "rc" Then
      SHP[i] = shapes.Addrectangle(Shark[i]["w"]*s, Shark[i]["h"]*s)
    ElseIf Shark[i]["fn"] = "el" Then
      SHP[i] = shapes.Addellipse(Shark[i]["w"]*s, Shark[i]["h"]*s)
    ElseIf Shark[i]["fn"] = "tr" Then
      SHP[i]= Shapes.Addtriangle(Shark[i]["x1"]*s, Shark[i]["y1"]*s, Shark[i]["x2"]*s, Shark[i]["y2"]*s, Shark[i]["x3"]*s, Shark[i]["y3"]*s)
    ElseIf Shark[i]["fn"] = "ln" Then
      SHP[i]= Shapes.AddLine(Shark[i]["x1"]*s, Shark[i]["y1"]*s, Shark[i]["x2"]*s, Shark[i]["y2"]*s)
    EndIf
    shapes.Move(SHP[i], Shark[i]["x"]*s, Shark[i]["y"]*s)
    If Text.IsSubText("rc:el:tr", Shark[i]["fn"]) And Shark[i]["angle"] <> 0 Then
      Shapes.Rotate(SHP[i], Shark[i]["angle"])
    EndIf
    pos[i]["X"]=Shapes.GetLeft(SHP[i])
    pos[i]["Y"]=Shapes.Gettop(SHP[i])
  EndFor
  shark_Right()
EndSub

Sub Sardine_Right
  Rposy=100+Math.GetRandomNumber(200)
  For j=1 To NMB
    R=20+math.GetRandomNumber(150)
    X=1250+R*math.Cos(math.GetRadians(j*3.6))
    Y=R*math.sin(math.GetRadians(j*3.6))*0.2
    Shapes.Move( Sardine[j],X,Y+Rposy)
  EndFor
EndSub

Sub shark_Right
  dx= 100+Math.GetRandomNumber(500)
  dy=50+Math.GetRandomNumber(200)
  For i = 1 To Array.GetItemCount(Shark)
    Shapes.Move(SHP[i],1300+dx+pos[i]["X"],100+dy+pos[i]["Y"])
  EndFor
EndSub

Sub bbl_Move
  For k=1 To 5
    For L=1 To 6
      bdy[k][L]=Math.GetRandomNumber(5)
      By[k][L]=By[k][L]-bdy[k][L]
      Shapes.Move(sbbl[k][L],bx[k][L],By[k][L])      ' bubble go up
      If By[k][L]<100 Then
        By[k][L]=720
        Shapes.Move(sbbl[k][L],bx[k][L],By[k][L])   ' new place
      EndIf
    EndFor
  EndFor
EndSub

Copyright (c) Microsoft Corporation. All rights reserved.