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=mdw482' /> </object>
' make a pyramid by NaochanON
' Challenge of the month July 2012
Init
(
)
makecubes
(
)
input
(
)
Controls
.
ButtonClicked
=
movecubes
Sub
movecubes
If
MM
>
0
Then
reposition
(
)
' hide (remove) cubes
EndIf
div
=
30
' like animation dividing
MM
=
Controls
.
GetTextBoxText
(
box
)
' step number
If
MM
>
11
Then
MM
=
10
ElseIf
MM
<
2
then
MM
=
2
EndIf
'-------------------------------------------------- stacking ---------------------------------------------
st
=
1
for
N
=
MM
To
1
Step
-
1
for
i
=
st
To
st
+
N
*
N
-
1
NewX
=
X1
+
(
MM
-
N
)
*
R0
/
4
+
R0
*
(
Math
.
Remainder
(
(
i
-
st
)
,
N
)
)
-
R0
*
(
Math
.
Floor
(
(
i
-
st
)
/
N
)
)
/
2
NewY
=
Y1
-
(
MM
-
N
)
*
3
*
R0
/
4
+
R0
*
(
Math
.
Floor
(
(
i
-
st
)
/
N
)
)
/
2
Stacking
(
)
Sound
.
PlayClick
(
)
EndFor
st
=
st
+
N
*
N
endfor
EndSub
Sub
stacking
dx
=
(
NewX
-
X0
)
/
div
' moving length
dy
=
(
NewY
-
Y0
)
/
div
For
j
=
1
To
div
X
=
X0
+
dx
*
j
Y
=
Y0
+
dy
*
j
Shapes
.
Move
(
a
[
i
]
,
x
,
y
)
Shapes
.
Move
(
b
[
i
]
,
x
,
y
)
Shapes
.
Move
(
c
[
i
]
,
x
,
y
)
Shapes
.
Move
(
d
[
i
]
,
x
+
R0
,
y
)
Shapes
.
Move
(
e
[
i
]
,
x
+
R0
,
y
)
Shapes
.
Move
(
f
[
i
]
,
x
+
dxy
,
y
-
dxy
)
Shapes
.
Move
(
g
[
i
]
,
x
+
R0
,
y
)
Shapes
.
Move
(
h
[
i
]
,
x
+
R0
+
dxy
,
y
-
dxy
)
Program
.
Delay
(
10
)
EndFor
EndSub
Sub
Init
GraphicsWindow
.
Hide
(
)
GraphicsWindow
.
BackgroundColor
=
"darkgreen"
GraphicsWindow
.
Width
=
1000
GraphicsWindow
.
Height
=
700
GraphicsWindow
.
Left
=
50
GraphicsWindow
.
Top
=
20
'---------------------------------- image photo ---------------------------------------------------
url
=
"http://farm5.static.flickr.com/4012/4325427343_3154b886ca.jpg"
'url="http://farm6.static.flickr.com/5181/5631039815_142b9082b7.jpg"
image
=
ImageList
.
LoadImage
(
url
)
GraphicsWindow
.
DrawResizedImage
(
image
,
0
,
0
,
1000
,
700
)
EndSub
Sub
makecubes
'---------------------------------- Make Cubes ---------------------------------------------------
R0
=
50
' cube size
dxy
=
25
' dx dy
X0
=
500
' initial position X Y
y0
=
-
100
sum
=
385
' 385= 1+2^2+3^2+....... 10^2
For
i
=
1
To
sum
GraphicsWindow
.
penColor
=
"blue"
GraphicsWindow
.
BrushColor
=
"lightcyan"
GraphicsWindow
.
PenWidth
=
1
a
[
i
]
=
Shapes
.
AddRectangle
(
R0
,
R0
)
' rectangle
Shapes
.
Move
(
a
[
i
]
,
x0
,
y0
)
GraphicsWindow
.
penColor
=
"Lightgray"
GraphicsWindow
.
BrushColor
=
"lightgray"
b
[
i
]
=
Shapes
.
AddTriangle
(
0
,
0
,
R0
,
0
,
dxy
,
-
dxy
)
' top
Shapes
.
Move
(
b
[
i
]
,
x0
,
y0
)
c
[
i
]
=
Shapes
.
AddTriangle
(
dxy
,
-
dxy
,
R0
+
dxy
,
-
dxy
,
R0
,
0
)
' top
Shapes
.
Move
(
c
[
i
]
,
x0
,
y0
)
GraphicsWindow
.
penColor
=
"gray"
GraphicsWindow
.
BrushColor
=
"gray"
d
[
i
]
=
Shapes
.
AddTriangle
(
0
,
0
,
dxy
,
-
dxy
,
0
,
R0
)
' side
Shapes
.
Move
(
d
[
i
]
,
x0
+
R0
,
y0
)
e
[
i
]
=
Shapes
.
AddTriangle
(
dxy
,
-
dxy
,
dxy
,
R0
-
dxy
,
0
,
R0
)
' side
Shapes
.
Move
(
e
[
i
]
,
x0
+
R0
,
y0
)
GraphicsWindow
.
penColor
=
"Blue"
f
[
i
]
=
Shapes
.
AddLine
(
0
,
0
,
R0
,
0
)
' --
Shapes
.
Move
(
f
[
i
]
,
X0
+
dxy
,
Y0
-
dxy
)
g
[
i
]
=
Shapes
.
AddLine
(
0
,
0
,
dxy
,
-
dxy
)
' /
Shapes
.
Move
(
g
[
i
]
,
X0
+
R0
,
y0
)
h
[
i
]
=
Shapes
.
AddLine
(
0
,
0
,
0
,
R0
)
' |
Shapes
.
Move
(
h
[
i
]
,
X0
+
R0
+
dxy
,
y0
-
dxy
)
EndFor
GraphicsWindow
.
Show
(
)
X1
=
400
' pyramid starting position X , Y
Y1
=
400
endsub
Sub
input
'---------------------------------- Step Start button-------------------------------
GraphicsWindow
.
FontSize
=
18
box
=
Controls
.
AddTextBox
(
330
,
20
)
Controls
.
SetSize
(
box
,
40
,
30
)
GraphicsWindow
.
BrushColor
=
"Yellow"
msg
=
shapes
.
AddText
(
" How many steps? 2-10 "
)
Shapes
.
Move
(
msg
,
50
,
20
)
start
=
Controls
.
AddButton
(
"Start"
,
400
,
20
)
endsub
Sub
reposition
newY
=
-
100
div
=
1
sum
=
0
For
i
=
1
To
MM
sum
=
sum
+
i
*
i
EndFor
For
i
=
1
To
sum
stacking
(
)
EndFor
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.