Microsoft Small Basic
Program Listing:
Embed this in your website
<object id='sbapp' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='640' height='480'> <param name='source' value='http://smallbasic.com/program/ClientBin/SBWeb.xap'/> <param name='onError' value='onSilverlightError' /> <param name='background' value='white' /> <param name='minRuntimeVersion' value='3.0.40624.0' /> <param name='autoUpgrade' value='true' /> <param name='initParams' value='programId=LWQ467-0' /> </object>
' Challenge of the month March 2013 Metronome 2013/03/04 By NaochanON
' LWQ467-0
GUI
(
)
Controls
.
ButtonClicked
=
Onclicked
While
"true"
while
rotate
=
"true"
N
=
N
+
PM
Shapes
.
SetText
(
msg
,
"Pitch="
+
WY
)
' show pitch
'-------------------------------------------------------------------------
'TL=BH*0.7
NewTX
=
TL
/
2
*
math
.
Sin
(
Math
.
GetRadians
(
N
)
)
+
tx
+
TW
/
2
NewTY
=
TL
/
2
*
(
1
-
math
.
cos
(
Math
.
GetRadians
(
N
)
)
)
+
ty
Shapes
.
Move
(
tact
[
1
]
,
NewTX
,
NewTY
)
' move tact
Shapes
.
Rotate
(
tact
[
1
]
,
N
)
'-------------------------------------------------------------------------
WL
=
TL
-
WY
+
TL2
/
2
NewWX
=
WL
*
math
.
Sin
(
Math
.
GetRadians
(
N
)
)
+
tx
-
TW2
/
2
+
TW
NewWY
=
ty
+
TL
-
WL
*
math
.
cos
(
Math
.
GetRadians
(
N
)
)
-
TL2
/
2
Shapes
.
Move
(
tact
[
2
]
,
NewWX
,
NewWY
)
' move weight
Shapes
.
Rotate
(
tact
[
2
]
,
N
)
'-------------------------------------------------------------------------
dt
=
(
200
-
wy
)
*
0.2
Program
.
Delay
(
dt
)
' timing delay
'-------------------------------------------------------------------------
If
Math
.
Abs
(
N
)
>
50
Then
' turning if N=+50 or -50
PM
=
-
PM
If
PM
=
-
1
then
Sound
.
PlayClick
(
)
EndIf
EndIf
endwhile
Program
.
Delay
(
100
)
endwhile
Sub
onclicked
cap
=
Controls
.
GetButtonCaption
(
Controls
.
LastClickedButton
)
If
cap
=
"Go!"
Then
rotate
=
"true"
Controls
.
SetButtonCaption
(
btn
,
"Stop"
)
ElseIf
cap
=
"Stop"
then
Controls
.
SetButtonCaption
(
btn
,
"Go!"
)
rotate
=
"false"
N
=
0
TactPosition
(
)
elseif
cap
=
"+"
then
WY
=
WY
+
5
If
WY
>
200
then
WY
=
200
EndIf
TactPosition
(
)
elseif
cap
=
"-"
then
WY
=
WY
-
5
If
WY
<
60
then
WY
=
60
EndIf
TactPosition
(
)
EndIf
EndSub
Sub
GUI
GraphicsWindow
.
Title
=
" Small Metronome !! "
x0
=
150
' position X
y0
=
100
' position Y
BW
=
100
' Width
BH
=
400
' Height
WY
=
170
' weight position
TW
=
6
' tact width
TL
=
BH
*
0.7
' tact height
TW2
=
40
' weight Width
TL2
=
20
' weight height
'-------------------------------------------------------------------------
GraphicsWindow
.
Width
=
BW
*
5
GraphicsWindow
.
Height
=
Y0
+
BH
+
20
GraphicsWindow
.
BackgroundColor
=
"lightcyan"
GraphicsWindow
.
FontSize
=
20
btn
=
Controls
.
AddButton
(
"Go!"
,
x0
+
1.5
*
BW
,
BH
-
50
)
' Go! or Stop button
PBTN
=
Controls
.
AddButton
(
"+"
,
x0
+
1.5
*
BW
,
BH
+
50
)
' Plus pitch button
Controls
.
SetSize
(
PBTN
,
50
,
40
)
MBTN
=
Controls
.
AddButton
(
"-"
,
x0
+
1.5
*
BW
,
BH
)
' Minus Pitch button
Controls
.
SetSize
(
MBTN
,
50
,
40
)
'-------------------------------------------------------------------------
msg
=
Shapes
.
AddText
(
"Pitch= "
)
' message
Shapes
.
Move
(
msg
,
x0
,
20
)
'-------------------------------------------------------------------------
GraphicsWindow
.
BrushColor
=
"Darkgreen"
GraphicsWindow
.
PenColor
=
"Lime"
body
[
1
]
=
Shapes
.
AddEllipse
(
BW
,
BH
)
' body
Shapes
.
Move
(
body
[
1
]
,
x0
,
y0
)
GraphicsWindow
.
BrushColor
=
"Azure"
body
[
2
]
=
Shapes
.
AddEllipse
(
BW
*
0.9
,
BH
*
0.9
)
Shapes
.
Move
(
body
[
2
]
,
Shapes
.
GetLeft
(
body
[
1
]
)
+
5
,
Shapes
.
GetTop
(
body
[
1
]
)
+
10
)
'-------------------------------------------------------------------------
GraphicsWindow
.
PenColor
=
"Red"
tact
[
1
]
=
Shapes
.
AddRectangle
(
TW
,
TL
)
' tact w=6
GraphicsWindow
.
BrushColor
=
"Darkgray"
GraphicsWindow
.
PenColor
=
"gray"
tact
[
2
]
=
Shapes
.
AddRectangle
(
TW2
,
TL2
)
TactPosition
(
)
'-------------------------------------------------------------------------
GraphicsWindow
.
BrushColor
=
"darkgreen"
body
[
3
]
=
Shapes
.
AddRectangle
(
BW
,
BH
/
3
)
' base
Shapes
.
Move
(
body
[
3
]
,
Shapes
.
GetLeft
(
body
[
1
]
)
,
Shapes
.
GetTop
(
body
[
1
]
)
+
BH
/
3
*
2
)
Shapes
.
SetOpacity
(
body
[
3
]
,
90
)
'-------------------------------------------------------------------------
tx
=
Shapes
.
GetLeft
(
tact
[
1
]
)
' tact position X
ty
=
Shapes
.
GetTop
(
tact
[
1
]
)
' tact position Y
rotate
=
"false"
PM
=
1
' Plus Minus
EndSub
Sub
TactPosition
Shapes
.
Move
(
tact
[
1
]
,
Shapes
.
GetLeft
(
body
[
1
]
)
+
BW
/
2
-
tw
/
2
,
Shapes
.
GetTop
(
body
[
1
]
)
+
20
)
Shapes
.
Rotate
(
tact
[
1
]
,
N
)
Shapes
.
Move
(
tact
[
2
]
,
Shapes
.
GetLeft
(
tact
[
1
]
)
-
Tw2
/
2
+
TW
/
2
,
Shapes
.
GetTop
(
tact
[
1
]
)
+
WY
-
TL2
/
2
)
Shapes
.
Rotate
(
tact
[
2
]
,
N
)
endsub
Copyright (c) Microsoft Corporation. All rights reserved.