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=XMZ657-1' /> </object>
' Goban SVG Genarator
' Version 0.12
' Copyright © 2015 Nonki Takahashi. The MIT License.
' Last update 2015-11-19
' Program ID XMZ657-1
'
GraphicsWindow
.
Title
=
"Goban SVG Generator 0.12"
LT
=
"<"
WQ
=
Text
.
GetCharacter
(
34
)
CRLF
=
Text
.
GetCharacter
(
13
)
+
Text
.
GetCharacter
(
10
)
ro
=
9
If
ro
<=
9
Then
gw
=
640
gh
=
480
Else
gw
=
800
gh
=
600
EndIf
GraphicsWindow
.
Width
=
gw
GraphicsWindow
.
Height
=
gh
path
=
Program
.
Directory
path
=
"http://www.nonkit.com/svg"
imgt
=
ImageList
.
LoadImage
(
path
+
"/img/table800.jpg"
)
imgbb
=
ImageList
.
LoadImage
(
path
+
"/img/blackbowl134.png"
)
imgwb
=
ImageList
.
LoadImage
(
path
+
"/img/whitebowl134.png"
)
imgl
=
ImageList
.
LoadImage
(
path
+
"/img/lid110.png"
)
imgb
=
ImageList
.
LoadImage
(
path
+
"/img/black22.png"
)
imgw
=
ImageList
.
LoadImage
(
path
+
"/img/white22.png"
)
imgs
=
ImageList
.
LoadImage
(
path
+
"/img/star5.png"
)
PIXEL_COL
=
22
PIXEL_ROW
=
24
PX_BOWL
=
134
' diameter of bowl [pixel]
Z2_BOWL
=
20
' height of bowl / 2 [pixel]
PX_LID
=
110
' diameter of lid [pixel]
Z2_LID
=
8
' height of lid / 2 [pixel]
PX_STONE
=
22
' diameter of stone [pixel]
Z2_STONE
=
2
' height of stone / 2 [pixel]
PX_STAR
=
5
' diameter of star [pixel]
PX_CHAR
=
24
' height of character [pixel]
Z2_BOARD
=
6
' height of board / 2 [pixel]
boardSize
[
"width"
]
=
PIXEL_COL
*
(
ro
+
1
)
boardSize
[
"height"
]
=
PIXEL_ROW
*
(
ro
+
1
)
boardOffset
[
"x"
]
=
Math
.
Floor
(
(
gw
-
boardSize
[
"width"
]
)
/
2
)
boardOffset
[
"y"
]
=
Math
.
Floor
(
(
gh
-
boardSize
[
"height"
]
)
/
2
)
gridSize
[
"width"
]
=
PIXEL_COL
*
(
ro
-
1
)
+
2
gridSize
[
"height"
]
=
PIXEL_ROW
*
(
ro
-
1
)
+
2
gridOffset
[
"x"
]
=
Math
.
Floor
(
(
boardSize
[
"width"
]
-
gridSize
[
"width"
]
)
/
2
)
gridOffset
[
"y"
]
=
Math
.
Floor
(
(
boardSize
[
"height"
]
-
gridSize
[
"height"
]
)
/
2
)
x
=
boardOffset
[
"x"
]
y
=
boardOffset
[
"y"
]
dx
=
PIXEL_COL
dy
=
PIXEL_ROW
width
=
boardSize
[
"width"
]
height
=
boardSize
[
"height"
]
gwidth
=
gridSize
[
"width"
]
gheight
=
gridSize
[
"height"
]
gx
=
x
+
gridOffset
[
"x"
]
gy
=
y
+
gridOffset
[
"y"
]
html
=
LT
+
"!DOCTYPE html>"
+
CRLF
html
=
html
+
LT
+
"html>"
+
CRLF
html
=
html
+
LT
+
"head>"
+
CRLF
html
=
html
+
LT
+
"meta charset="
+
WQ
+
"UTF-8"
+
WQ
+
">"
+
CRLF
html
=
html
+
LT
+
"style type="
+
WQ
+
"text/css"
+
WQ
+
">"
+
CRLF
html
=
html
+
".table {"
+
CRLF
html
=
html
+
" background-image: url(img/table800.jpg);"
+
CRLF
html
=
html
+
"}"
+
CRLF
html
=
html
+
".shadow {"
+
CRLF
html
=
html
+
" fill: rgb(0, 0, 0);"
+
CRLF
html
=
html
+
" fill-opacity: 0.5;"
+
CRLF
html
=
html
+
" stroke-width: 0;"
+
CRLF
html
=
html
+
"}"
+
CRLF
html
=
html
+
LT
+
"/style>"
+
CRLF
html
=
html
+
LT
+
"/head>"
+
CRLF
html
=
html
+
LT
+
"body>"
+
CRLF
' draw table
GraphicsWindow
.
DrawImage
(
imgt
,
0
,
0
)
svg
=
LT
+
"svg class="
+
WQ
+
"table"
+
WQ
+
" width="
+
WQ
+
gw
+
WQ
+
" height="
+
WQ
+
gh
+
WQ
+
">"
+
CRLF
' draw board
svg
=
svg
+
" "
+
LT
+
"defs>"
+
CRLF
svg
=
svg
+
" "
+
LT
+
"clipPath id="
+
WQ
+
"clip"
+
WQ
+
">"
+
CRLF
svg
=
svg
+
" "
+
LT
+
"rect x="
+
WQ
+
x
+
WQ
+
" y="
+
WQ
+
y
+
WQ
svg
=
svg
+
" width="
+
WQ
+
width
+
WQ
+
" height="
+
WQ
+
height
+
WQ
+
" />"
+
CRLF
svg
=
svg
+
" "
+
LT
+
"/clipPath>"
+
CRLF
svg
=
svg
+
" "
+
LT
+
"/defs>"
+
CRLF
s
=
Z2_BOARD
DrawShadow
(
)
GraphicsWindow
.
BrushColor
=
"Burlywood"
GraphicsWindow
.
FillRectangle
(
x
,
y
,
width
,
height
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/woodgrain600.png"
+
WQ
svg
=
svg
+
" clip-path="
+
WQ
+
"url(#clip)"
+
WQ
+
" width="
+
WQ
+
"600"
+
WQ
left
=
Math
.
Floor
(
(
600
-
width
)
*
2
/
3
)
top
=
600
-
height
svg
=
svg
+
" height="
+
WQ
+
"600"
+
WQ
+
" x="
+
WQ
+
(
x
-
left
)
+
WQ
svg
=
svg
+
" y="
+
WQ
+
(
y
-
top
)
+
WQ
+
" />"
+
CRLF
DrawGrid
(
)
' draw a white lid of bowl on the left of the board
offsetWLid
[
"x"
]
=
Math
.
Floor
(
(
boardOffset
[
"x"
]
-
PX_LID
)
/
2
)
offsetWLid
[
"y"
]
=
boardOffset
[
"y"
]
+
Math
.
Floor
(
(
boardSize
[
"height"
]
-
PX_LID
)
/
2
)
GraphicsWindow
.
BrushColor
=
"#80000000"
' for shadow
GraphicsWindow
.
FillEllipse
(
offsetWLid
[
"x"
]
+
Z2_LID
,
offsetWLid
[
"y"
]
+
Z2_LID
,
PX_LID
,
PX_LID
)
cx
=
offsetWLid
[
"x"
]
+
Z2_LID
+
PX_LID
/
2
cy
=
offsetWLid
[
"y"
]
+
Z2_LID
+
PX_LID
/
2
svg
=
svg
+
" "
+
LT
+
"ellipse class="
+
WQ
+
"shadow"
+
WQ
+
" cx="
+
WQ
+
cx
+
WQ
+
" cy="
+
WQ
+
cy
+
WQ
svg
=
svg
+
" rx="
+
WQ
+
(
PX_LID
/
2
)
+
WQ
+
" ry="
+
WQ
+
(
PX_LID
/
2
)
+
WQ
+
" />"
+
CRLF
GraphicsWindow
.
DrawImage
(
imgl
,
offsetWLid
[
"x"
]
,
offsetWLid
[
"y"
]
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/lid110.png"
+
WQ
svg
=
svg
+
" width="
+
WQ
+
PX_LID
+
WQ
+
" height="
+
WQ
+
PX_LID
+
WQ
svg
=
svg
+
" x="
+
WQ
+
offsetWLid
[
"x"
]
+
WQ
svg
=
svg
+
" y="
+
WQ
+
offsetWLid
[
"y"
]
+
WQ
+
" />"
+
CRLF
' draw a white bowl on the top left corner
xb
=
offsetWLid
[
"x"
]
-
Math
.
Floor
(
(
PX_BOWL
-
PX_LID
)
/
2
)
yb
=
offsetWLid
[
"y"
]
-
PX_BOWL
-
Z2_BOWL
GraphicsWindow
.
FillEllipse
(
xb
+
Z2_BOWL
,
yb
+
Z2_BOWL
,
PX_BOWL
,
PX_BOWL
)
cx
=
xb
+
Z2_BOWL
+
PX_BOWL
/
2
cy
=
yb
+
Z2_BOWL
+
PX_BOWL
/
2
svg
=
svg
+
" "
+
LT
+
"ellipse class="
+
WQ
+
"shadow"
+
WQ
+
" cx="
+
WQ
+
cx
+
WQ
+
" cy="
+
WQ
+
cy
+
WQ
svg
=
svg
+
" rx="
+
WQ
+
(
PX_BOWL
/
2
)
+
WQ
+
" ry="
+
WQ
+
(
PX_BOWL
/
2
)
+
WQ
+
" />"
+
CRLF
GraphicsWindow
.
DrawImage
(
imgwb
,
xb
,
yb
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/whitebowl134.png"
+
WQ
svg
=
svg
+
" width="
+
WQ
+
PX_BOWL
+
WQ
+
" height="
+
WQ
+
PX_BOWL
+
WQ
svg
=
svg
+
" x="
+
WQ
+
xb
+
WQ
svg
=
svg
+
" y="
+
WQ
+
yb
+
WQ
+
" />"
+
CRLF
' draw a black lid of bowl on the right of the board
offsetBLid
[
"x"
]
=
offsetWLid
[
"x"
]
+
boardOffset
[
"x"
]
+
boardSize
[
"width"
]
offsetBLid
[
"y"
]
=
offsetWLid
[
"y"
]
GraphicsWindow
.
FillEllipse
(
offsetBLid
[
"x"
]
+
Z2_LID
,
offsetBLid
[
"y"
]
+
Z2_LID
,
PX_LID
,
PX_LID
)
cx
=
offsetBLid
[
"x"
]
+
Z2_LID
+
PX_LID
/
2
cy
=
offsetBLid
[
"y"
]
+
Z2_LID
+
PX_LID
/
2
svg
=
svg
+
" "
+
LT
+
"ellipse class="
+
WQ
+
"shadow"
+
WQ
+
" cx="
+
WQ
+
cx
+
WQ
+
" cy="
+
WQ
+
cy
+
WQ
svg
=
svg
+
" rx="
+
WQ
+
(
PX_LID
/
2
)
+
WQ
+
" ry="
+
WQ
+
(
PX_LID
/
2
)
+
WQ
+
" />"
+
CRLF
GraphicsWindow
.
DrawImage
(
imgl
,
offsetBLid
[
"x"
]
,
offsetBLid
[
"y"
]
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/lid110.png"
+
WQ
svg
=
svg
+
" width="
+
WQ
+
PX_LID
+
WQ
+
" height="
+
WQ
+
PX_LID
+
WQ
svg
=
svg
+
" x="
+
WQ
+
offsetBLid
[
"x"
]
+
WQ
svg
=
svg
+
" y="
+
WQ
+
offsetBLid
[
"y"
]
+
WQ
+
" />"
+
CRLF
' draw a black bowl on the bottom right corner
xb
=
offsetBLid
[
"x"
]
-
Math
.
Floor
(
(
PX_BOWL
-
PX_LID
)
/
2
)
yb
=
offsetBLid
[
"y"
]
+
PX_LID
+
Z2_BOWL
GraphicsWindow
.
FillEllipse
(
xb
+
Z2_BOWL
,
yb
+
Z2_BOWL
,
PX_BOWL
,
PX_BOWL
)
cx
=
xb
+
Z2_BOWL
+
PX_BOWL
/
2
cy
=
yb
+
Z2_BOWL
+
PX_BOWL
/
2
svg
=
svg
+
" "
+
LT
+
"ellipse class="
+
WQ
+
"shadow"
+
WQ
+
" cx="
+
WQ
+
cx
+
WQ
+
" cy="
+
WQ
+
cy
+
WQ
svg
=
svg
+
" rx="
+
WQ
+
(
PX_BOWL
/
2
)
+
WQ
+
" ry="
+
WQ
+
(
PX_BOWL
/
2
)
+
WQ
+
" />"
+
CRLF
GraphicsWindow
.
DrawImage
(
imgbb
,
xb
,
yb
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/blackbowl134.png"
+
WQ
svg
=
svg
+
" width="
+
WQ
+
PX_BOWL
+
WQ
+
" height="
+
WQ
+
PX_BOWL
+
WQ
svg
=
svg
+
" x="
+
WQ
+
xb
+
WQ
svg
=
svg
+
" y="
+
WQ
+
yb
+
WQ
+
" />"
+
CRLF
' draw stones
param
=
"col="
+
(
ro
-
2
)
+
";row="
+
(
ro
-
2
)
+
";color=black;"
DrawStone
(
)
param
=
"col=3;row=3;color=white;"
DrawStone
(
)
svg
=
svg
+
LT
+
"/svg>"
+
CRLF
' show HTML
html
=
html
+
svg
html
=
html
+
LT
+
"/body>"
+
CRLF
html
=
html
+
LT
+
"/html>"
GraphicsWindow
.
BrushColor
=
"Black"
tbox
=
Controls
.
AddMultiLineTextBox
(
10
,
10
)
Controls
.
SetSize
(
tbox
,
gw
-
20
,
gh
-
20
)
Shapes
.
SetOpacity
(
tbox
,
50
)
Controls
.
SetTextBoxText
(
tbox
,
html
)
Sub
DrawShadow
' param s
GraphicsWindow
.
BrushColor
=
"#80000000"
px
=
"1="
+
x
+
";2="
+
(
x
+
width
)
+
";3="
+
(
x
+
width
+
s
)
+
";"
px
=
px
+
"4="
+
(
x
+
width
+
s
)
+
";5="
+
(
x
+
s
)
+
";"
px
=
px
+
"6="
+
x
+
";"
py
=
"1="
+
y
+
";2="
+
y
+
";3="
+
(
y
+
s
)
+
";"
py
=
py
+
"4="
+
(
y
+
height
+
s
)
+
";5="
+
(
y
+
height
+
s
)
+
";"
py
=
py
+
"6="
+
(
y
+
height
)
+
";"
GraphicsWindow
.
FillTriangle
(
px
[
2
]
,
py
[
2
]
,
px
[
3
]
,
py
[
3
]
,
px
[
2
]
,
py
[
3
]
)
GraphicsWindow
.
FillRectangle
(
px
[
5
]
,
py
[
3
]
,
width
,
height
)
GraphicsWindow
.
FillTriangle
(
px
[
6
]
,
py
[
6
]
,
px
[
5
]
,
py
[
5
]
,
px
[
5
]
,
py
[
6
]
)
svg
=
svg
+
" "
+
LT
+
"polygon class="
+
WQ
+
"shadow"
+
WQ
+
" points="
+
WQ
svg
=
svg
+
px
[
1
]
+
","
+
py
[
1
]
+
" "
+
px
[
2
]
+
","
+
py
[
2
]
+
" "
svg
=
svg
+
px
[
3
]
+
","
+
py
[
3
]
+
" "
+
px
[
4
]
+
","
+
py
[
4
]
+
" "
svg
=
svg
+
px
[
5
]
+
","
+
py
[
5
]
+
" "
+
px
[
6
]
+
","
+
py
[
6
]
svg
=
svg
+
WQ
+
" />"
+
CRLF
EndSub
Sub
DrawGrid
GraphicsWindow
.
BrushColor
=
"Black"
' (horizontal grid)
x1
=
gx
For
row
=
1
To
ro
If
(
row
=
1
)
Then
y1
=
gy
+
(
row
-
1
)
*
dy
Else
y1
=
gy
+
1
+
(
row
-
1
)
*
dy
EndIf
If
(
row
=
1
)
Or
(
row
=
ro
)
Then
lwidth
=
2
Else
lwidth
=
1
EndIf
GraphicsWindow
.
FillRectangle
(
x1
,
y1
,
gwidth
,
lwidth
)
svg
=
svg
+
" "
+
LT
+
"rect x="
+
WQ
+
x1
+
WQ
+
" y="
+
WQ
+
y1
+
WQ
svg
=
svg
+
" width="
+
WQ
+
gwidth
+
WQ
+
" height="
+
WQ
+
lwidth
+
WQ
+
" />"
+
CRLF
EndFor
' (vertical grid)
y1
=
gy
For
col
=
1
To
ro
If
(
col
=
1
)
Then
x1
=
gx
+
(
col
-
1
)
*
dx
Else
x1
=
gx
+
1
+
(
col
-
1
)
*
dx
EndIf
If
(
col
=
1
)
Or
(
col
=
ro
)
Then
lwidth
=
2
Else
lwidth
=
1
EndIf
GraphicsWindow
.
FillRectangle
(
x1
,
y1
,
lwidth
,
gheight
)
svg
=
svg
+
" "
+
LT
+
"rect x="
+
WQ
+
x1
+
WQ
+
" y="
+
WQ
+
y1
+
WQ
svg
=
svg
+
" width="
+
WQ
+
lwidth
+
WQ
+
" height="
+
WQ
+
gheight
+
WQ
+
" />"
+
CRLF
EndFor
If
(
Math
.
Remainder
(
ro
,
2
)
=
1
)
Then
' tengen
col
=
Math
.
Floor
(
ro
/
2
)
+
1
row
=
Math
.
Floor
(
ro
/
2
)
+
1
DrawStar
(
)
EndIf
If
(
ro
=
9
)
Then
' stars on 3rd line corner
col
=
3
row
=
3
DrawStar
(
)
col
=
ro
-
2
DrawStar
(
)
row
=
ro
-
2
DrawStar
(
)
col
=
3
DrawStar
(
)
EndIf
If
(
ro
=
13
)
Or
(
ro
=
19
)
Then
' stars on 4th line corner
col
=
4
row
=
4
DrawStar
(
)
col
=
ro
-
3
DrawStar
(
)
row
=
ro
-
3
DrawStar
(
)
col
=
4
DrawStar
(
)
EndIf
if
(
ro
=
19
)
Then
' stars of 4th line edge
col
=
Math
.
Floor
(
ro
/
2
)
+
1
row
=
4
DrawStar
(
)
col
=
4
row
=
Math
.
floor
(
ro
/
2
)
+
1
DrawStar
(
)
col
=
ro
-
3
row
=
Math
.
floor
(
ro
/
2
)
+
1
DrawStar
(
)
col
=
Math
.
floor
(
ro
/
2
)
+
1
row
=
ro
-
3
DrawStar
(
)
EndIf
EndSub
Sub
DrawStar
' param col, row - position to draw star
x
=
boardOffset
[
"x"
]
+
gridOffset
[
"x"
]
+
1
+
(
col
-
1
)
*
PIXEL_COL
-
2
y
=
boardOffset
[
"y"
]
+
gridOffset
[
"y"
]
+
1
+
(
row
-
1
)
*
PIXEL_ROW
-
2
GraphicsWindow
.
DrawImage
(
imgs
,
x
,
y
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/star5.png"
+
WQ
svg
=
svg
+
" width="
+
WQ
+
PX_STAR
+
WQ
+
" height="
+
WQ
+
PX_STAR
+
WQ
svg
=
svg
+
" x="
+
WQ
+
x
+
WQ
+
" y="
+
WQ
+
y
+
WQ
+
" />"
+
CRLF
EndSub
Sub
DrawStone
' param["col"], param["row"] - position to move stone
' param["color"] - stone color
x
=
boardOffset
[
"x"
]
+
gridOffset
[
"x"
]
+
1
+
(
param
[
"col"
]
-
1
)
*
PIXEL_COL
-
PX_STONE
/
2
y
=
boardOffset
[
"y"
]
+
gridOffset
[
"y"
]
+
1
+
(
param
[
"row"
]
-
1
)
*
PIXEL_ROW
-
PX_STONE
/
2
GraphicsWindow
.
BrushColor
=
"#80000000"
GraphicsWindow
.
FillEllipse
(
x
+
Z2_STONE
,
y
+
Z2_STONE
,
PX_STONE
,
PX_STONE
)
cx
=
x
+
PX_STONE
/
2
+
Z2_STONE
cy
=
y
+
PX_STONE
/
2
+
Z2_STONE
svg
=
svg
+
" "
+
LT
+
"ellipse class="
+
WQ
+
"shadow"
+
WQ
+
" cx="
+
WQ
+
cx
+
WQ
+
" cy="
+
WQ
+
cy
+
WQ
svg
=
svg
+
" rx="
+
WQ
+
(
PX_STONE
/
2
)
+
WQ
+
" ry="
+
WQ
+
(
PX_STONE
/
2
)
+
WQ
+
" />"
+
CRLF
If
param
[
"color"
]
=
"black"
Then
GraphicsWindow
.
DrawImage
(
imgb
,
x
,
y
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/black22.png"
+
WQ
Else
GraphicsWindow
.
DrawImage
(
imgw
,
x
,
y
)
svg
=
svg
+
" "
+
LT
+
"image xlink:href="
+
WQ
+
"img/white22.png"
+
WQ
EndIf
svg
=
svg
+
" width="
+
WQ
+
PX_STONE
+
WQ
+
" height="
+
WQ
+
PX_STONE
+
WQ
svg
=
svg
+
" x="
+
WQ
+
x
+
WQ
+
" y="
+
WQ
+
y
+
WQ
+
" />"
+
CRLF
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.