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=QDX521' /> </object>
' 8-Queens 0.2
' Copyright (c) 2012 Nonki Takahashi
'
' History :
' 0.2 2013/01/03 Rewrote for 8-Queens probrem. ()
' 0.1 2012/08/04 Code for chessmen written in hexadecimal.
' 0.0 2012/08/04 25-line version created. (CLP327)
'
GraphicsWindow
.
Title
=
"8-Queens 0.2"
GraphicsWindow
.
BackgroundColor
=
"#004C00"
GraphicsWindow
.
BrushColor
=
"Black"
oNum
=
Controls
.
AddTextBox
(
440
,
30
)
num
=
12345678
Controls
.
SetTextBoxText
(
oNum
,
num
)
InitBoard
(
)
CheckValid
(
)
DrawBoard
(
)
Controls
.
TextTyped
=
OnTextTyped
Sub
OnTextTyped
num
=
Controls
.
GetTextBoxText
(
oNum
)
len
=
Text
.
GetLength
(
num
)
correct
=
"False"
If
len
=
8
Then
correct
=
"True"
For
i
=
1
To
8
If
Text
.
IsSubText
(
num
,
Text
.
GetSubText
(
"12345678"
,
i
,
1
)
)
=
"False"
Then
correct
=
"False"
EndIf
EndFor
EndIf
If
correct
Then
board
=
""
For
c
=
1
To
8
board
[
Text
.
GetSubText
(
num
,
c
,
1
)
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c
,
1
)
]
=
"BQ"
EndFor
CheckValid
(
)
DrawBoard
(
)
EndIf
EndSub
Sub
CheckValid
valid
=
"True"
For
c1
=
1
To
8
For
c2
=
c1
+
1
To
8
r1
=
Text
.
GetSubText
(
num
,
c1
,
1
)
r2
=
Text
.
GetSubText
(
num
,
c2
,
1
)
dc
=
Math
.
Abs
(
c2
-
c1
)
dr
=
Math
.
Abs
(
r2
-
r1
)
If
dc
=
dr
Then
valid
=
"False"
board
[
r1
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c1
,
1
)
]
=
"RQ"
board
[
r2
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c2
,
1
)
]
=
"RQ"
EndIf
EndFor
EndFor
EndSub
Sub
DrawBoard
For
r
=
8
To
1
Step
-
1
y
=
pos
[
"y0"
]
+
(
8
-
r
)
*
size
For
c
=
1
To
8
x
=
pos
[
"x0"
]
+
(
c
-
1
)
*
size
GraphicsWindow
.
BrushColor
=
color
[
Math
.
Remainder
(
(
c
+
r
)
,
2
)
]
GraphicsWindow
.
FillRectangle
(
x
,
y
,
size
,
size
)
p
=
board
[
r
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c
,
1
)
]
If
p
<>
""
Then
GraphicsWindow
.
BrushColor
=
color
[
Text
.
GetSubText
(
p
,
1
,
1
)
]
sHex
=
pieces
[
Text
.
GetSubText
(
p
,
2
,
1
)
]
Math_Hex2Dec
(
)
GraphicsWindow
.
DrawText
(
x
,
y
-
size
*
0.12
,
Text
.
GetCharacter
(
iDec
)
)
EndIF
EndFor
EndFor
EndSub
Sub
InitChessmen
size
=
48
' font height and square size
GraphicsWindow
.
FontSize
=
size
pieces
=
"P=265F;N=265E;B=265D;R=265C;Q=265B;K=265A;"
EndSub
Sub
InitBoard
pos
=
"x0=30;y0=30;"
' left, top
For
c
=
1
To
8
board
[
c
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c
,
1
)
]
=
"BQ"
EndFor
color
=
"W=White;B=Black;R=Red;0=SaddleBrown;1=BurlyWood;"
InitChessmen
(
)
EndSub
Sub
Math_Hex2Dec
' Math | Convert sHex to iDec
iDec
=
0
iLen
=
Text
.
GetLength
(
sHex
)
For
iPtr
=
1
To
iLen
iDec
=
iDec
*
16
+
Text
.
GetIndexOf
(
"0123456789ABCDEF"
,
Text
.
GetSubText
(
sHex
,
iPtr
,
1
)
)
-
1
EndFor
EndSub
Sub
DumpBoard
For
r
=
8
To
1
Step
-
1
For
c
=
1
To
8
If
board
[
r
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c
,
1
)
]
<>
""
Then
TextWindow
.
Write
(
board
[
r
]
[
Text
.
GetSubText
(
"abcdefgh"
,
c
,
1
)
]
+
" "
)
Else
TextWindow
.
Write
(
" "
)
EndIf
EndFor
TextWindow
.
WriteLine
(
""
)
EndFor
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.