Microsoft Small Basic

Program Listing: XXG848-1
' Lady Bug
' Version 0.2.1
' Copyright © 2020 Nonki Takahashi. The MIT License.
' Last update 2020-08-19
' Program ID XXG848-1

Init()

angle = 0
pw = 6
pc = "Black"
bc = "#EE2200"
width = 260
height = 300
x = (gw - width) / 2
y = (gh - height) / 2
yb = y
Ellipse()

' limbs upper
pw = 0
angle = 170
bc = "Black"
width = 10
height = 60
x = (gw - width) / 2 - 110
y = yb + 20
Triangle()

angle = -170
x = (gw - width) / 2 + 110
Triangle()

angle = 135
height = 30
x = (gw - width) / 2 - 125
y = yb - 3
Triangle()

angle = -135
x = (gw - width) / 2 + 125
Triangle()

angle = 135
height = 20
x = (gw - width) / 2 - 140
y = yb - 13
Triangle()

angle = -135
x = (gw - width) / 2 + 140
Triangle()

pw = 2
pc = "Black"
x = gw / 2 - 146
y = yb - 8
x1 = 0
y1 = 0
x2 = x1 - 15 * Math.Cos(Math.GetRadians(30))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(30))
Line()

x2 = x1 - 15 * Math.Cos(Math.GetRadians(60))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(60))
Line()

x = gw / 2 + 146
x2 = x1 + 15 * Math.Cos(Math.GetRadians(30))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(30))
Line()

x2 = x1 + 15 * Math.Cos(Math.GetRadians(60))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(60))
Line()

' limbs middle
pw = 0
angle = 40
height = 70
x = (gw - width) / 2 - 135
y = yb + 70
Triangle()

angle = -40
x = (gw - width) / 2 + 135
Triangle()

angle = 60
height = 20
x = (gw - width) / 2 - 165
y = yb + 125
Triangle()

angle = -60
x = (gw - width) / 2 + 165
Triangle()

angle = 60
x = (gw - width) / 2 - 177
y = yb + 132
Triangle()

angle = -60
x = (gw - width) / 2 + 177
Triangle()

pw = 2
x = gw / 2 - 185
y = yb + 145
x1 = 0
y1 = 0
x2 = x1 - 15 * Math.Cos(Math.GetRadians(15))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(15))
Line()

x2 = x1 - 15 * Math.Cos(Math.GetRadians(45))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(45))
Line()

x = gw / 2 + 185
x2 = x1 + 15 * Math.Cos(Math.GetRadians(15))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(15))
Line()

x2 = x1 + 15 * Math.Cos(Math.GetRadians(45))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(45))
Line()

' limbs lower
pw = 0
angle = -10
height = 80
x = (gw - width) / 2 - 115
y = yb + 200
Triangle()

angle = 10
x = (gw - width) / 2 + 115
Triangle()

angle = 40
height = 20
x = (gw - width) / 2 - 113
y = yb + 275
Triangle()

angle = -40
x = (gw - width) / 2 + 113
Triangle()

angle = 40
x = (gw - width) / 2 - 122
y = yb + 285
Triangle()

angle = -40
x = (gw - width) / 2 + 122
Triangle()

pw = 2
x = gw / 2 - 125
y = yb + 300
x1 = 0
y1 = 0
x2 = x1 - 15 * Math.Cos(Math.GetRadians(30))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(30))
Line()

x2 = x1 - 15 * Math.Cos(Math.GetRadians(60))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(60))
Line()

x = gw / 2 + 125
x2 = x1 + 15 * Math.Cos(Math.GetRadians(30))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(30))
Line()

x2 = x1 + 15 * Math.Cos(Math.GetRadians(60))
y2 = y1 + 15 * Math.Sin(Math.GetRadians(60))
Line()

' pattern
pw = 6
angle = -45
bc = "FloralWhite"
width = 90
height = 30
x = (gw - width) / 2 - 70
y = yb + 30
Ellipse()

angle = 45
x = (gw - width) / 2 + 70
Ellipse()

angle = 0
pw = 0
width = 40
height = 20
x = gw / 2 - width - 3
y = yb + 85
Ellipse()

x = gw / 2 + 3
Ellipse()

bc = "Black"
width = 90
height = 40
x = (gw - width) / 2
y = yb
Ellipse()

width = 150
height = 65
x = (gw - width) / 2
y = yb + 30
Ellipse()

width = 220
height = 40
x = (gw - width) / 2
y = yb + 55
Ellipse()

width = 80
height = 30
x = gw / 2 - width - 10
y = yb + 10
Triangle()

x = gw / 2 + 10
Triangle()

' mouth
bc = "Black"
width = 50
height = 30
x = (gw - width) / 2
y = yb - 10
Ellipse()

' antennae
pw = 4
x = gw / 2 - 25
y = yb
x1 = 0
y1 = 0
x2 = x1 - 15 * Math.Cos(Math.GetRadians(70))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(70))
Line()

pw = 2
x1 = x2
y1 = y2
x2 = x1 - 20 * Math.Cos(Math.GetRadians(20))
y2 = y1 - 20 * Math.Sin(Math.GetRadians(20))
Line()

x1 = x2
y1 = y2
x2 = x1 - 20 * Math.Cos(Math.GetRadians(40))
y2 = y1 - 20 * Math.Sin(Math.GetRadians(40))
Line()

pw = 4
x = gw / 2 + 25
y = yb
x1 = 0
y1 = 0
x2 = x1 + 15 * Math.Cos(Math.GetRadians(70))
y2 = y1 - 15 * Math.Sin(Math.GetRadians(70))
Line()

pw = 2
x1 = x2
y1 = y2
x2 = x1 + 20 * Math.Cos(Math.GetRadians(20))
y2 = y1 - 20 * Math.Sin(Math.GetRadians(20))
Line()

x1 = x2
y1 = y2
x2 = x1 + 20 * Math.Cos(Math.GetRadians(40))
y2 = y1 - 20 * Math.Sin(Math.GetRadians(40))
Line()

bc = "FloralWhite"
width = 14
height = 14
x = gw / 2 - width - 14
y = yb + 10
Rectangle()

x = gw / 2 + 14
Rectangle()

' eyes
bc = "#333333"
width = 15
height = 17
x = gw / 2 - width - 30
y = yb + 10
Ellipse()

x = gw / 2 + 30
Ellipse()

pw = 6
x = gw / 2
y = yb + 94
x1 = 0
y1 = 0
x2 = 0
y2 = 300 - 94
Line()

pw = 0
bc = "Black"
width = 60
height = 50
x = (gw - width) / 2
y = yb + 100
Ellipse()

width = 35
height = 40
x = (gw - width) / 2 - 60
y = yb + 160
Ellipse()

x = (gw - width) / 2 + 60
Ellipse()

angle = -45
width = 30
height = 40
x = (gw - width) / 2 - 70
y = yb + 230
Ellipse()

angle = 45
x = (gw - width) / 2 + 70
Ellipse()

angle = 0
width = 30
height = 40
x = (gw - width) / 2 - 110
y = yb + 120
Ellipse()

angle = 0
x = (gw - width) / 2 + 110
Ellipse()

Sub Ellipse
func = "ell"
SetProperty()
If sb = "O" Then
obj = Shapes.AddEllipse(width, height)
Shapes.Move(obj, x, y)
Else
obj = Shapes.AddEllipse(width + pw, height + pw)
Shapes.Move(obj, x - pw / 2, y - pw / 2)
EndIf
SetAngle()
EndSub

Sub Init
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
If gw = 624 Then
sb = "D" ' Desktop
ElseIf gw = 640 Then
sb = "S" ' Silverlight
Else
sb = "O" ' Online
EndIf
EndSub

Sub Line
func = "line"
SetProperty()
obj = Shapes.AddLine(x1, y1, x2, y2)
Shapes.Move(obj, x, y)
EndSub

Sub Rectangle
func = "rect"
SetProperty()
If sb = "O" Then
obj = Shapes.AddRectangle(width, height)
Shapes.Move(obj, x, y)
Else
obj = Shapes.AddRectangle(width + pw, height + pw)
Shapes.Move(obj, x - pw / 2, y - pw / 2)
EndIf
SetAngle()
EndSub

Sub SetAngle
If angle <> 0 Then
Shapes.Rotate(obj, angle)
If sb = "S" And Text.IsSubText("line|tri", func) Then ' Silverlight
If func = "tri" Then
cx = width / 2
cy = height / 2
Else
cx = (x1 + x2) / 2
cy = (y1 + y2) / 2
EndIf
_angle = Math.GetRadians(angle)
_cx = cx * Math.Cos(_angle) - cy * Math.Sin(_angle)
_cy = cx * Math.Sin(_angle) + cy * Math.Cos(_angle)
_x = x - (_cx - cx)
_y = y - (_cy - cy)
Shapes.Move(obj, _x, _y)
EndIf
EndIf
EndSub

Sub SetProperty
If Text.IsSubText("ell|rect|tri|line", func) Then
GraphicsWindow.PenWidth = pw
If 0 < pw Then
GraphicsWindow.PenColor = pc
EndIf
EndIf
If Text.IsSubText("ell|rect|tri|text", func) Then
GraphicsWindow.BrushColor = bc
EndIf
EndSub

Sub Triangle
func = "tri"
SetProperty()
x1 = width / 2
y1 = 0
x2 = 0
y2 = height
x3 = width
y3 = height
obj = Shapes.AddTriangle(x1, y1, x2, y2, x3, y3)
Shapes.Move(obj, x, y)
SetAngle()
EndSub