This is a simple to play sudoku puzzle with 500 easy level puzzles to solve. I hesitated sharing this because the code is so jumbled up, but I probably won't ever clean it up so here it is. Maybe somebody would like a portable sudoku program. Screen size will adjust to 75% of users desktop height, so the puzzle should look nice on any screen. If you want to see a REALLy good sudoku in QB64 then I highly recommend looking up the one @bplus made.
Left click to add a number to a cell, right click on a number to erase it.
SPACE will reset puzzle, ENTER will go to a random puzzle #.
Use +/- keys to jump to different puzzles quickly.
Press T to play with timer (shows in title bar).
R will reset all puzzles to unsolved.
Game progress now saved to a sudoko.dat file in current directory so you can continue where you left off.
- Dav
EDIT: Updated version - now saves game progress and solved puzzles.
Left click to add a number to a cell, right click on a number to erase it.
SPACE will reset puzzle, ENTER will go to a random puzzle #.
Use +/- keys to jump to different puzzles quickly.
Press T to play with timer (shows in title bar).
R will reset all puzzles to unsolved.
Game progress now saved to a sudoko.dat file in current directory so you can continue where you left off.
- Dav
EDIT: Updated version - now saves game progress and solved puzzles.
Code: (Select All)
'==========
'SUDOKU.BAS v1.2
'==========
'A simple and easy to use sudoku puzzle.
'Contains 500 solvable easy level puzzles.
'Coded by Dav JUN/2024 using QB64PE v3.13.0
'
'Added: Puzzle progress now saved.
' Continue where you left off!
' (sudoku.dat file is saved in dir)
'Added: Press 'R' to reset all 500 puzzles
'==================================================
'This is a classic sudoku puzzle implementation.
'Left click on a cell to assign a number to it.
'A number box will pop up. Click on desired number.
'(keys 1 - 9 can also be used when number box shows)
'Number turn red whenever there's a conflict.
'Right click on numbers to remove them off the board.
'(or select same number from numbox to remove it).
'The current puzzle number is displayed in Title bar.
'Use +/- keys to navigate to a certain puzzle number.
'ENTER gets a random puzzle number.
'SPACE will reset current puzzle.
'R will reset(clear) all puzzles.
'ESC key quits the game.
'You can press T to turn Timer ON/OFF if you want
'to play with a timer. (time shows in title bar).
'The timer shows how long you has spent on the
'current puzzle.
'When the current puzzle is solved the next puzzle
'number is selected automatically.
'Visit my little QB64PE Programming Corner here:
'https://qb64phoenix.com/forum/showthread.php?tid=128
'-Dav
grid = 9 ' grid size is is 9x9
cells = grid * grid ' number of cells on grid
Dim cellx(grid * grid), celly(grid * grid) 'top x/y cords of cells
Dim cellx2(grid * grid), celly2(grid * grid) ' bottom x/y cords of cells
Dim Shared cellstate(grid * grid) 'flag that for hard coded numbers (can't change these on board)
Dim Shared cellvalue(grid * grid) 'holds the cell number values
Dim Shared puznum, puzmax: puzmax = 500
Dim Shared puz$(puzmax)
dh = _DesktopHeight * .75
size = Int(dh / grid) ' size of cells
Screen _NewImage(size * grid, size * grid, 32)
BIGFONT Int(_Height / 9)
Randomize 1234 'define seed so generated puzzle # stay same every run
puznum = 1 'defaults to puzzle 1
On Timer(1) GoSub TitleTimer
TimerFlag = 0
'========
createdat:
'========
If Not _FileExists("sudoku.dat") Then
Open "sudoku.dat" For Output As #1
'=== Generate 500 puzzles
For p = 1 To puzmax
puz$(p) = NewPuz$
Print #1, puz$(p); 'save puzzle data
Next
Print #1, MKL$(1); 'save current puzzle #
Close 1
End If
Open "sudoku.dat" For Binary As #1
'check for correct data size
If LOF(1) <> ((162 * puzmax) + 4) Then
Close 1
Kill "sudoku.dat"
GoTo createdat
End If
'load puzzle data
For p = 1 To puzmax
in$ = Input$(162, 1) 'load puzzle data
puz$(p) = in$
Next
'=== load current puzzle
puznum = CVL(Input$(4, 1))
Close 1
'========
Start:
'========
_Title "Sudoku #" + _Trim$(Str$(puznum))
bc = 1 'counter
For col = 1 To grid
For row = 1 To grid
x = (row * size): y = (col * size)
cellx(bc) = x - size: cellx2(bc) = x ' generate x/y values
celly(bc) = y - size: celly2(bc) = y
cellvalue(bc) = Val(Mid$(puz$(puznum), bc, 1))
cellstate(bc) = Val(Mid$(puz$(puznum), 81 + bc, 1))
bc = bc + 1
Next
Next
If TimerFlag = 1 Then
StartTime = Timer
Timer On
Else
Timer Off
End If
_PrintMode _KeepBackground
GoSub UpdateBoard
Do
ky$ = InKey$
If ky$ = " " Then
'clear puz$ data with cellstate of 0
For p = 1 To 81
If cellstate(p) = 0 Then Mid$(puz$(puznum), p, 1) = "0"
Next
GoTo Start 'SPACE resets puzzle
End If
If ky$ = Chr$(13) Then 'get a random puzzle to play
'sets a random new puzzle
'make sure it's not same as current puznum
curpuz = puznum
Do
puznum = Int(Rnd * puzmax) + 1
Loop Until puznum <> curpuz
GoTo Start
End If
If ky$ = "+" Then
puznum = puznum + 1
If puznum > puzmax Then
puznum = 1
End If
GoTo Start
End If
If ky$ = "-" Then
puznum = puznum - 1
If puznum < 1 Then
puznum = puzmax
End If
GoTo Start
End If
If UCase$(ky$) = "R" Then
Kill "sudoku.dat"
GoTo createdat
End If
If UCase$(ky$) = "T" Then
_Delay .25
If TimerFlag = 1 Then
Timer Off
TimerFlag = 0
'refresh titlebar without time display
_Title "Sudoku #" + _Trim$(Str$(puznum))
Else
TimerFlag = 1
StartTime = Timer
Timer On
End If
_KeyClear
End If
If ky$ = Chr$(27) Then System
While _MouseInput: Wend
If _MouseButton(1) Or _MouseButton(2) Then
mx = _MouseX: my = _MouseY
'see if a button was pressed
For T = 1 To cells
bx = cellx(T): bx2 = cellx2(T)
by = celly(T): by2 = celly2(T)
If mx >= bx And mx <= bx2 And my >= by And my <= by2 Then
If _MouseButton(1) Then
'only if clicking no assigned number
If cellstate(T) = 0 Then
'popup number box here
'keep x box values in bounds
x1 = cellx(T) + (size / 2) - size
If x1 < (size / 2) Then x1 = (size / 2)
If x1 + (size * 3) > _Width Then
x1 = _Width - (size * 3) - (size / 2)
End If
x2 = x1 + (size * 3)
'keep y box values in bounds
y1 = celly(T) + (size / 2) - size
If y1 < (size / 2) Then y1 = (size / 2)
If y1 + (size * 3) > _Height Then
y1 = _Height - (size * 3) - (size / 2)
End If
y2 = y1 + (size * 3)
'highlight the number to change
Line (cellx(T), celly(T))-(cellx2(T), celly2(T)), _RGBA(255, 255, 255, 100), BF
_Display
_Delay .25
'wait until mouse button up to continue
While _MouseButton(1) <> 0: n = _MouseInput: Wend
'draw popup box
tk = size * .03
Line (x1, y1)-(x2, y2), _RGBA(255, 255, 0, 200), BF
Line (x1 + tk, y1 + tk)-(x2 - tk, y2 - tk), _RGBA(132, 62, 32, 164), BF
'make temp numbox values (assign and show)
ReDim boxx(9), boxy(9), boxx2(9), boxy2(9), boxv(9)
'first row
'1
boxx(1) = x1: boxy(1) = y1: boxx2(1) = x1 + size: boxy2(1) = y1 + size: boxv(1) = 1
bx = boxx(1) - (Int(_Height / 9) / 4.5): by = boxy(1) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(1))
'2
boxx(2) = x1 + size: boxy(2) = y1: boxx2(2) = x1 + (size * 2): boxy2(2) = y1 + size: boxv(2) = 2
bx = boxx(2) - (Int(_Height / 9) / 4.5): by = boxy(2) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(2))
'3
boxx(3) = x1 + (size * 2): boxy(3) = y1: boxx2(3) = x1 + (size * 3): boxy2(3) = y1 + size: boxv(3) = 3
bx = boxx(3) - (Int(_Height / 9) / 4.5): by = boxy(3) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(3))
'second row
'4
boxx(4) = x1: boxy(4) = y1 + size: boxx2(4) = x1 + size: boxy2(4) = y1 + (size * 2): boxv(4) = 4
bx = boxx(4) - (Int(_Height / 9) / 4.5): by = boxy(4) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(4))
'5
boxx(5) = x1 + size: boxy(5) = y1 + size: boxx2(5) = x1 + (size * 2): boxy2(5) = y1 + (size * 2): boxv(5) = 5
bx = boxx(5) - (Int(_Height / 9) / 4.5): by = boxy(5) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(5))
'6
boxx(6) = x1 + (size * 2): boxy(6) = y1 + size: boxx2(6) = x1 + (size * 3): boxy2(6) = y1 + (size * 2): boxv(6) = 6
bx = boxx(6) - (Int(_Height / 9) / 4.5): by = boxy(6) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(6))
'third row
'7
boxx(7) = x1: boxy(7) = y1 + (size * 2): boxx2(7) = x1 + size: boxy2(7) = y1 + (size * 7): boxv(7) = 7
bx = boxx(7) - (Int(_Height / 9) / 4.5): by = boxy(7) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(7))
'8
boxx(8) = x1 + size: boxy(8) = y1 + (size * 2): boxx2(8) = x1 + (size * 2): boxy2(8) = y1 + (size * 3): boxv(8) = 8
bx = boxx(5) - (Int(_Height / 9) / 4.5): by = boxy(8) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(8))
'9
boxx(9) = x1 + (size * 2): boxy(9) = y1 + (size * 2): boxx2(9) = x1 + (size * 3): boxy2(9) = y1 + (size * 3): boxv(9) = 9
bx = boxx(6) - (Int(_Height / 9) / 4.5): by = boxy(9) + (Int(_Height / 9) / 12.5)
Color _RGBA(255, 255, 0, 200): _PrintString (bx, by), Str$(boxv(9))
_Display
'wait until mouse button up to continue
While _MouseButton(1) <> 0: n = _MouseInput: Wend
'Sleep 1
'get click in numbox
Do
While _MouseInput: Wend
If _MouseButton(1) Then
mmx = _MouseX: mmy = _MouseY
'see if a button was pressed in numbox
For tt = 1 To 9
If mmx >= boxx(tt) And mmx <= boxx2(tt) And mmy >= boxy(tt) And mmy <= boxy2(tt) Then
Line (boxx(tt), boxy(tt))-Step(size, size), _RGBA(255, 255, 255, 100), BF
_Display
_Delay .25
'assign picked number with board number
If boxv(tt) = cellvalue(T) Then
cellvalue(T) = 0 'if same, then clear it
Mid$(puz$(puznum), T, 1) = "0"
Else
cellvalue(T) = boxv(tt)
Mid$(puz$(puznum), T, 1) = _Trim$(Str$(cellvalue(T)))
End If
Exit Do
End If
Next
End If
'optional keyboard input
k$ = InKey$
Select Case k$
Case Is = "1", "2", "3", "4", "5", "6", "7", "8", "9"
kv = Val(k$)
If kv = cellvalue(T) Then
cellvalue(T) = 0 'if same, then clear it
Mid$(puz$(puznum), T, 1) = "0"
Else
cellvalue(T) = kv
Mid$(puz$(puznum), T, 1) = _Trim$(Str$(kv))
End If
Exit Do
End Select
_Limit 200
Loop Until _MouseButton(1)
'wait until mouse button up to continue
While _MouseButton(1) <> 0: n = _MouseInput: Wend
End If
Else
'must be right click, so remove number here
'only if clicking no assigned number
If cellstate(T) = 0 Then
cellvalue(T) = 0
Mid$(puz$(puznum), T, 1) = "0"
End If
End If
End If
Next
GoSub UpdateBoard
'===================
'check for win here...
'first see if any 0's present (empty cells)
'and if any conflicts are present
solved = 1
For c = 1 To 81
If cellvalue(c) = 0 Then solved = 0: Exit For
If Conflict(c) = -1 Then solved = 0: Exit For
Next
'if solved = 1 then level solved!.
If solved = 1 Then
Line (size * 2, size * 2)-(size * 7, size * 4), _RGBA(32, 32, 32, 200), BF
Line (size * 2.1, size * 2.1)-(size * 6.9, size * 3.9), _RGBA(250, 200, 200, 200), B
Color _RGBA(250, 250, 250, 200)
_PrintString (size * 2.5, size * 2.5), "Solved!!"
_Display
_Delay 4
GoSub UpdateBoard
_Delay 2
puznum = puznum + 1
If puznum > puzmax Then
puznum = 1
End If
GoTo Start
End If
End If
_Limit 200
Loop
End
'==========
UpdateBoard:
'==========
Cls , _RGB(100, 0, 0)
bc = 1
For row = 1 To grid
For col = 1 To grid
bx = cellx(bc) - (Int(_Height / 9) / 4.5)
by = celly(bc) + (Int(_Height / 9) / 14.5)
'if value not a zero...
If cellvalue(bc) <> 0 Then
'shadow
Color _RGB(0, 0, 0)
_PrintString (bx + (size * .03), by + (size * .03)), Str$(cellvalue(bc))
'if assigned puz number
If cellstate(bc) = 1 Then
Color _RGB(230, 130, 80)
Else
'check if conflict on row or column here <<<<<
If Conflict(bc) = -1 Then
'red color
Color _RGB(255, 64, 64)
Else
Color _RGB(255, 180, 125)
End If
End If
_PrintString (bx, by), Str$(cellvalue(bc))
End If
Line (cellx(bc), celly(bc))-(cellx2(bc), celly2(bc)), _RGB(200, 100, 50), B
bc = bc + 1
Next
Next
'draw thicker lines
tk = size * .03
Line (0, size * 3 - tk)-(_Width, size * 3 + tk + tk), _RGB(0, 0, 0), BF
Line (0, size * 3 - tk)-(_Width, size * 3 + tk), _RGB(200, 100, 50), BF
Line (0, size * 6 - tk)-(_Width, size * 6 + tk + tk), _RGB(0, 0, 0), BF
Line (0, size * 6 - tk)-(_Width, size * 6 + tk), _RGB(200, 100, 50), BF
Line (size * 3 - tk, 0)-(size * 3 + tk, _Height), _RGB(200, 100, 50), BF
Line (size * 6 - tk, 0)-(size * 6 + tk, _Height), _RGB(200, 100, 50), BF
For f = 0 To (size * .06)
Line (0 + f, 0 + f)-(_Width - f, _Height - f), _RGB(200, 100, 50), B
Next
_Display
'====== Update sudoku.dat with changes
Open "sudoku.dat" For Output As 1
For p = 1 To puzmax
Print #1, puz$(p);
Next
'save current puzzle place#
Print #1, MKL$(puznum);
Close 1
Return
'=========
TitleTimer:
'=========
Elapsed = Timer - StartTime
secs = Elapsed
If Elapsed >= 60 Then
Mins = Fix(Elapsed / 60)
secs = Elapsed - (60 * Mins)
End If
If Mins >= 60 Then
Hrs = Fix(Mins / 60)
Mins = Mins - (60 * Hrs)
End If
secs = Fix(secs)
Hrs$ = _Trim$(Str$(Hrs)): If Len(Hrs$) = 1 Then Hrs$ = "0" + Hrs$
min$ = _Trim$(Str$(Mins)): If Len(min$) = 1 Then min$ = "0" + min$
Secs$ = _Trim$(Str$(secs)): If Len(Secs$) = 1 Then Secs$ = "0" + Secs$
tit$ = Hrs$ + ":" + min$ + ":" + Secs$
_Title "Sudoku #" + _Trim$(Str$(puznum)) + " - " + tit$
Return
Function NewPuz$
'generates different sudoku puzzles using randomizing techniques
'and from a pool of pre-made solved sudoku puzzles.
'select from a pool of 15 puzzles
p = Int(Rnd * 15) + 1
If p = 1 Then p$ = "564973128819624375372815946247356891938741652651289734126597483495138267783462519"
If p = 2 Then p$ = "743589162219634758856271349137956284684723591592148673368417925475392816921865437"
If p = 3 Then p$ = "395842716762931845841765293986123457417589362253476981674218539538697124129354678"
If p = 4 Then p$ = "954182367163794258278563194749625813681379425532418976426851739395247681817936542"
If p = 5 Then p$ = "387142695954386271126957483571263948248579316639418752893721564462895137715634829"
If p = 6 Then p$ = "859643271371925684264187359927316845543872916618594723735261498192438567486759132"
If p = 7 Then p$ = "547368291296751348183429675871543962965872134432196587714935826328617459659284713"
If p = 8 Then p$ = "329654817761389524584712369843971652615423798972865143458197236296538471137246985"
If p = 9 Then p$ = "254376819178594362369281745495762138632819457781453296513628974846937521927145683"
If p = 10 Then p$ = "184597362923684571765132489649273815518469723237815694472958136391746258856321947"
If p = 11 Then p$ = "314872695857469321296135748529741863731986452468523917943217586175698234682354179"
If p = 12 Then p$ = "248931657637852914915647238586423791194768523372519846853274169429186375761395482"
If p = 13 Then p$ = "734521986962873145158469372345796821817235469629184537571648293283917654496352718"
If p = 14 Then p$ = "795243618138659427624178539263497185549812763871536294452981376917365842386724951"
If p = 15 Then p$ = "416598723259743861873162495624815379791324586385679214962437158148256937537981642"
'load selected puz$ into cellvalue()
For c = 1 To 81
cellvalue(c) = Val(Mid$(p$, c, 1))
Next
'========== swap rows
'swap top 3 rows randomly
Select Case Int(Rnd * 4) + 1
Case 1 'swap row 1 and 2
For s = 1 To 9: Swap cellvalue(s), cellvalue(s + 9): Next
Case 2 'swap row 1 and 3
For s = 1 To 9: Swap cellvalue(s), cellvalue(s + 18): Next
Case 3 'swap row 2 and 3
For s = 10 To 18: Swap cellvalue(s), cellvalue(s + 9): Next
End Select
'swap middle 3 rows randomly
Select Case Int(Rnd * 4) + 1
Case 1 'swap row 4 and 5
For s = 28 To 36: Swap cellvalue(s), cellvalue(s + 9): Next
Case 2 'swap row 4 and 6
For s = 28 To 36: Swap cellvalue(s), cellvalue(s + 18): Next
Case 3 'swap row 5 and 6
For s = 37 To 45: Swap cellvalue(s), cellvalue(s + 9): Next
End Select
'swap bottom 3 rows a few times
Select Case Int(Rnd * 4) + 1
Case 1 'swap row 7 and 8
For s = 55 To 63: Swap cellvalue(s), cellvalue(s + 9): Next
Case 2 'swap row 7 and 9
For s = 55 To 63: Swap cellvalue(s), cellvalue(s + 18): Next
Case 3 'swap row 8 and 9
For s = 64 To 72: Swap cellvalue(s), cellvalue(s + 9): Next
End Select
'============ swap columns
'swap left 3 columns
Select Case Int(Rnd * 4) + 1
Case 1 'swap column 1 and 2
For s = 1 To 73 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
Case 2 'swap column 1 and 3
For s = 1 To 73 Step 9: Swap cellvalue(s), cellvalue(s + 2): Next
Case 3 'swap column 2 and 3
For s = 2 To 74 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
End Select
'swap middle 3 columns
Select Case Int(Rnd * 4) + 1
Case 1 'swap column 4 and 5
For s = 4 To 76 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
Case 2 'swap column 4 and 6
For s = 4 To 76 Step 9: Swap cellvalue(s), cellvalue(s + 2): Next
Case 3 'swap column 5 and 6
For s = 5 To 77 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
End Select
'swap right 3 columns
Select Case Int(Rnd * 4) + 1
Case 1 'swap column 7 and 8
For s = 7 To 79 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
Case 2 'swap column 7 and 9
For s = 7 To 79 Step 9: Swap cellvalue(s), cellvalue(s + 2): Next
Case 3 'swap column 8 and 9
For s = 8 To 80 Step 9: Swap cellvalue(s), cellvalue(s + 1): Next
End Select
'====== now swap blocks of rows (3)
Select Case Int(Rnd * 4) + 1
Case 1 'swap top row of blocks with and middle row
For s = 1 To 9
Swap cellvalue(s), cellvalue(s + 27)
Swap cellvalue(s + 9), cellvalue(s + 36)
Swap cellvalue(s + 18), cellvalue(s + 45)
Next
Case 2 'swap top row of blocks with bottom row of blocks
For s = 1 To 9
Swap cellvalue(s), cellvalue(s + 54)
Swap cellvalue(s + 9), cellvalue(s + 63)
Swap cellvalue(s + 18), cellvalue(s + 72)
Next
Case 3 'swap middle row of blocks with bottom row of blocks
For s = 28 To 36
Swap cellvalue(s), cellvalue(s + 27)
Swap cellvalue(s + 9), cellvalue(s + 36)
Swap cellvalue(s + 18), cellvalue(s + 45)
Next
End Select
'====== now swap columns of blocks
Select Case Int(Rnd * 4) + 1
Case 1 'swap left block column with middle
For s = 1 To 73 Step 9
Swap cellvalue(s), cellvalue(s + 3)
Swap cellvalue(s + 1), cellvalue(s + 4)
Swap cellvalue(s + 2), cellvalue(s + 5)
Next
Case 2 'swap left block column with right
For s = 1 To 73 Step 9
Swap cellvalue(s), cellvalue(s + 6)
Swap cellvalue(s + 1), cellvalue(s + 7)
Swap cellvalue(s + 2), cellvalue(s + 8)
Next
Case 3 'swap middle block of columns withright one
For s = 4 To 76 Step 9
Swap cellvalue(s), cellvalue(s + 3)
Swap cellvalue(s + 1), cellvalue(s + 4)
Swap cellvalue(s + 2), cellvalue(s + 5)
Next
End Select
'=========== swap some numbers..
Select Case Int(Rnd * 5) + 1
Case 1 'swap 1's and 5's
For c = 1 To 81
Select Case cellvalue(c)
Case 1: cellvalue(c) = 5
Case 5: cellvalue(c) = 1
End Select
Next
Case 2 'swap 2's and 6's
For c = 1 To 81
Select Case cellvalue(c)
Case 2: cellvalue(c) = 6
Case 6: cellvalue(c) = 2
End Select
Next
Case 3 'swap 3's and 7's
For c = 1 To 81
Select Case cellvalue(c)
Case 3: cellvalue(c) = 7
Case 7: cellvalue(c) = 3
End Select
Next
Case 4 'swap 4's and 8's
For c = 1 To 81
Select Case cellvalue(c)
Case 4: cellvalue(c) = 8
Case 8: cellvalue(c) = 4
End Select
Next
Case 5 'swap 9's and 1's
For c = 1 To 81
Select Case cellvalue(c)
Case 1: cellvalue(c) = 9
Case 9: cellvalue(c) = 1
End Select
Next
End Select
t$ = ""
'Build NewPuz$, clearing some pieces
For c = 1 To 81
If Int(Rnd * 2) = 1 Then
t$ = t$ + _Trim$(Str$(cellvalue(c)))
Else
t$ = t$ + "0"
End If
Next
e$ = ""
For c = 1 To Len(t$)
If Mid$(t$, c, 1) = "0" Then
e$ = e$ + "0"
Else
e$ = e$ + "1"
End If
Next
t$ = t$ + e$
NewPuz$ = t$
End Function
Function Conflict (num)
'this function checks rows/columns/blocks for any conflicts.
'p$ holds all the other cell numbers to compare 'num' with.
Select Case num
'first row, 01-09
Case 1: p$ = "0203040506070809101928374655647311122021"
Case 2: p$ = "0103040506070809112029384756657410121921"
Case 3: p$ = "0102040506070809122130394857667510111920"
Case 4: p$ = "0102030506070809132231404958677614152324"
Case 5: p$ = "0102030406070809142332415059687713152224"
Case 6: p$ = "0102030405070809152433425160697813142223"
Case 7: p$ = "0102030405060809162534435261707917182627"
Case 8: p$ = "0102030405060709172635445362718016182527"
Case 9: p$ = "0102030405060708182736455463728116172526"
'second row, 10-18
Case 10: p$ = "1112131415161718011928374655647302032021"
Case 11: p$ = "1012131415161718022029384756657401031921"
Case 12: p$ = "1011131415161718032130394857667501021920"
Case 13: p$ = "1011121415161718042231404958677605062324"
Case 14: p$ = "1011121315161718052332415059687704062224"
Case 15: p$ = "1011121314161718062433425160697804052223"
Case 16: p$ = "1011121314151718072534435261707908092627"
Case 17: p$ = "1011121314151618082635445362718007092527"
Case 18: p$ = "1011121314151617092736455463728107082526"
'third row, 19-27
Case 19: p$ = "2021222324252627011028374655647302031112"
Case 20: p$ = "1921222324252627021129384756657401031012"
Case 21: p$ = "1920222324252627031230394857667501021011"
Case 22: p$ = "1920212324252627041331404958677605061415"
Case 23: p$ = "1920212224252627051432415059687704061315"
Case 24: p$ = "1920212223252627061533425160697804051314"
Case 25: p$ = "1920212223242627071634435261707908091718"
Case 26: p$ = "1920212223242527081735445362718007091618"
Case 27: p$ = "1920212223242526091836455463728107081617"
'forth row,28-36
Case 28: p$ = "2930313233343536011019374655647338394748"
Case 29: p$ = "2830313233343536021120384756657437394648"
Case 30: p$ = "2829313233343536031221394857667537384647"
Case 31: p$ = "2829303233343536041322404958677641425051"
Case 32: p$ = "2829303133343536051423415059687740424951"
Case 33: p$ = "2829303132343536061524425160697840414950"
Case 34: p$ = "2829303132333536071625435261707944455354"
Case 35: p$ = "2829303132333436081726445362718043455254"
Case 36: p$ = "2829303132333435091827455463728143445253"
'fifth row,37-45
Case 37: p$ = "3839404142434445011019284655647329304748"
Case 38: p$ = "3739404142434445021120294756657428304648"
Case 39: p$ = "3738404142434445031221304857667528294647"
Case 40: p$ = "3738394142434445041322314958677632335051"
Case 41: p$ = "3738394042434445051423325059687731334951"
Case 42: p$ = "3738394041434445061524335160697831324950"
Case 43: p$ = "3738394041424445071625345261707935365354"
Case 44: p$ = "3738394041424345081726355362718034365254"
Case 45: p$ = "3738394041424344091827365463728134355253"
'sixth row,46-54
Case 46: p$ = "4748495051525354011019283755647329303839"
Case 47: p$ = "4648495051525354021120293856657428303739"
Case 48: p$ = "4647495051525354031221303957667528293738"
Case 49: p$ = "4647485051525354041322314058677632334142"
Case 50: p$ = "4647484951525354051423324159687731334042"
Case 51: p$ = "4647484950525354061524334260697831324041"
Case 52: p$ = "4647484950515354071625344361707935364445"
Case 53: p$ = "4647484950515254081726354462718034364345"
Case 54: p$ = "4647484950515253091827364563728134354344"
'seventh row, 55-63
Case 55: p$ = "5657585960616263011019283746647365667475"
Case 56: p$ = "5557585960616263021120293847657464667375"
Case 57: p$ = "5556585960616263031221303948667564657374"
Case 58: p$ = "5556575960616263041322314049677668697778"
Case 59: p$ = "5556575860616263051423324150687767697678"
Case 60: p$ = "5556575859616263061524334251697867687677"
Case 61: p$ = "5556575859606263071625344352707971728081"
Case 62: p$ = "5556575859606163081726354453718070727981"
Case 63: p$ = "5556575859606162091827364554728170717980"
'eight row, 64-72
Case 64: p$ = "6566676869707172011019283746557356577475"
Case 65: p$ = "6466676869707172021120293847567455577375"
Case 66: p$ = "6465676869707172031221303948577555567374"
Case 67: p$ = "6465666869707172041322314049587659607778"
Case 68: p$ = "6465666769707172051423324150597758607678"
Case 69: p$ = "6465666768707172061524334251607858597677"
Case 70: p$ = "6465666768697172071625344352617962638081"
Case 71: p$ = "6465666768697072081726354453628061637981"
Case 72: p$ = "6465666768697071091827364554638161627980"
'ninth row, 73-81
Case 73: p$ = "7475767778798081011019283746556456576566"
Case 74: p$ = "7375767778798081021120293847566555576466"
Case 75: p$ = "7374767778798081031221303948576655566465"
Case 76: p$ = "7374757778798081041322314049586759606869"
Case 77: p$ = "7374757678798081051423324150596858606769"
Case 78: p$ = "7374757677798081061524334251606958596768"
Case 79: p$ = "7374757677788081071625344352617062637172"
Case 80: p$ = "7374757677787981081726354453627161637072"
Case 81: p$ = "7374757677787980091827364554637261627071"
End Select
For c = 1 To Len(p$) Step 2
chk = Val(Mid$(p$, c, 2))
If cellvalue(chk) = cellvalue(num) Then Conflict = -1
Next
End Function
Sub BIGFONT (size)
'make/load another CP437 font (like QB64's built-in one)'
'This one is resizable so you can make/use larger size SCREEN font.
A$ = ""
A$ = A$ + "haIgm]0MLEMMXkS^ST\\T]lHiaboe<Nl8c71HYa3f0VPiWa9H07n5a_0bn:K"
A$ = A$ + ";#FB8;c773hBD8T42E_#C:=QBC39PSQB=DB2UhdhVBB^9=_D2EQ#Ala?JFmi"
A$ = A$ + "ejeGKNiYTV4\UNkOWcmL791Y0Iefg<NdmNWiLfWmIoO_?WkeP10H6`NP0HS["
A$ = A$ + "KMGj5l9Nf7lH0HC;3of5MAGb9ef>>V6V60Vfa[_^=_m>j[Y]NOC7PDY`?kKc"
A$ = A$ + "gd0IQB1o20VfnaO?eFkH7m=nh8TP=]8ljY]e^_e]DhRj<;0CoG1`5>lfj\S`"
A$ = A$ + "IOn5Z6o]G6oLbK3oRZONcW6QoL`[Gfffn0gBQ5]P_=NmC3#5__^kMcMlg=[o"
A$ = A$ + "a=RPjY`[?W]ga]dWICVEPonZafW]W>fNWObWOGk3P[h7POg7[_Nga07oM<8f"
A$ = A$ + "f[2agZnF0=g`?kjkmmOT[]nel;PVZJ]hg0?OKcLadaGiKoLOB06[_P\Y8lOJ"
A$ = A$ + "#5Pl2kCZm?FO04TU^4o[1Bn:5m=VLhOH8jj9mj4UF4Te<4D9R7[U6eP\fS#H"
A$ = A$ + "5]c]X6G?2l1mUORGl9Rl3CcgPP3Yf?27leNXQi017VViP9PXlI5<D`Bg[8lC"
A$ = A$ + "8OFXkk2MW7jMNL?lKIT21l_VF:3>F2D;LOV8TRaP9n:<aIA^f=aF7iJaK2<#"
A$ = A$ + "L8<Ak3Q9<_mJcKe[TDPTc\936fA:ngRlXaf?Q:5<^GQ:NaoU>Jo437Vj6iV1"
A$ = A$ + "CjiCm;DJYL^oDO^mEPnIARTN`G4_b`GW:h^aS?8:nE5\4h>P72nB`S0?6lT`"
A$ = A$ + "G3n6`g4n^`g3nA`;PJd_>l_2S2oK`APa=OZPk;hn3NXP7>h;7l41OUP36l\1"
A$ = A$ + "OW\;=kJbN7IOTLOjLkMY;HY=]dSMY[OYM\d>cGAnIU?G1X#55Z[`\:<W2c[`"
A$ = A$ + "R:\\2]DHU5FCQ^;\W23Fh^;L?5^_2On2?FQW\`cDh05Nf2o]5n7JN==_fV?["
A$ = A$ + "V_^VgLcKYiK0]l#_nl<n]?Ho`G1N64oNF7nmJ`?5no0oBhG?1lkY#lk_a3o6"
A$ = A$ + "2a_i_dUXhG8SOIW2lKS>lKXb`_G\iCeQOMfleChgho?6o#SoJSo:SoBSoRSo"
A$ = A$ + "2SoS7o7=nc=ngKl_mh7LloZao6SOPaojSo<SodSglAKnX;mXckXcmXciXchX"
A$ = A$ + "eNDcA6o8SMX7j#Ol3]n3Uke>UGKi_jGkEOZGmAOe?i[^cGM7_b?iEnn_bGOT"
A$ = A$ + "GITGNTonAN^An_?bgOT_k87LTobANbANdA^oAn8SLWSL7S\kA^eAfn8KJT[I"
A$ = A$ + "T;OT;KT;LTe?bJNYGnUn7NYGlUnj_dOi;md_dG1if?hKUTeoQnbPBTY#kYE1"
A$ = A$ + "ESFZ[1V>D;D7jiJVX]gjQI1YQI3=0c1b0c5J4V7<OH1`2Aig5SB]=QF<c1;5"
A$ = A$ + "b3;3:0=3;7>6hHQS3>NX5h4#keW4\2XEX=X8\BX4Lb`ZPE3W2LZ`Y1[1>Mhm"
A$ = A$ + "0W1JUo<Qc2>KhLPc5F7LN`jQg;lnPc7f0L1`52G4\Ahm3G<L9`U2G6Li`70J"
A$ = A$ + "7^2h:Q[2^JhJP?8L]`e1M0K2f<Zke9\5H[`fP^P[7^1XKHk#?#_#O`=2m3k0"
A$ = A$ + "60f9LC`=3g2L[`^P?4\KhfPK7ejf3B0Z2o4TZbZZNJe<mJ[K6c\RjWEjIg`L"
A$ = A$ + "b<g6WglG`2GdRGBCIc]dl;[#c;oH>fSkhKi4>aCJ5]fFaEFjTGeZ?UCmdFcY"
A$ = A$ + "oN>SeNVWeIO>Wkj>_eoNOOWo6^P;lRfhkoR_T;mb^l?#kGaENEGmel1_f[[S"
A$ = A$ + "=]i`>gbFgFGGo=dmfkYgn^anga0klV^iKiFge7Jggf]O7kiCoI^ooX?kWk1n"
A$ = A$ + "CN`?oO:l5nR?lGjAfknnb?jSmWmWohko9PWj_h[lEQ?n7N`kjKO_oa2;k?4N"
A$ = A$ + "n?a?i5o8X?Fh_6nX3m=N8h?h>oHoXWn73gmo=hgcSeBVBdGon_Ub1Ll68O[5"
A$ = A$ + "Tn_7d>d?4niViJ>Ec5J^NcmJN6coD5c\REDAgEL?ElHEllElc2VE`E7\]P?E"
A$ = A$ + "`S5lM2NmD#ZIUJUYf#Z#lmNBMoYNfDoZ:?V:_^:k_bQZlaZliZlWFi_\Z:ZJ"
A$ = A$ + "VEeFEQE][ZfKE?GEoZZWGe[Yj[^jk^j7_j3Fm;<]:VfLWfI=]]<]kJJ?nd6N"
A$ = A$ + "JSECfJFG=K[Vk_VmGcgYV3=mY=mU>me>m?hdgedo\Co_Jj_N]cZfFZm\Z=\f"
A$ = A$ + "k\f7_fOH]7Y^IFg:[KMe]Ujj_^1[K_emm[k`cX^I\RILYcHgch1VaGM63?SO"
A$ = A$ + "c<Wi<?^I^^I^YINGcLOc<JVobjWKm]Eo6Zoj[ocDoG]nG]naVe\Ve9>[e?[^"
A$ = A$ + "aggm\NlIm2YQdK8MgYO`d?NjXd_n\[JfIWmJWm5>knVmGHf_D3;ZQef`0=lH"
A$ = A$ + "=llcYZidfLfdL^WilhcIh<EUIeIj9c3TIhi2cmHVkE>g?nL?hLoI=>k6GISG"
A$ = A$ + "ISkZamfhcghAVga=_;MNM?_?cl>hlnGVoLWoI=o]=oM=om=oGL1YF`:F#k;h"
A$ = A$ + ">G`3_P3\PGL1S^`U^`CNQGj2kKQ?h2?`2OQ5ncGDM;J5;jbGdNFdm^Xm]XO`"
A$ = A$ + "RNi5mcGlBFlZGLhR_g5oT;nK]hGLao;;ng\TY]Ti]TSI9WjBf`B^^U<`B^[U"
A$ = A$ + "lIGbC]TXUlB;iWeDE=U]YEfdjKjjJjVJjNJjQKj0=ml=m?W=Ef5UmmTmbcfG"
A$ = A$ + "fk=k3Wm0IOi\obLc<g9VKSij;g3TKOiNjLOWL3WkeGj3^\Y]\WJIO[Um3Gfo"
A$ = A$ + "DQZ:\T2_W2KZ`]GHO5>DceeljK^_VOPV?HcodUGeb?^U_nUOmXESBXnd[Vjh"
A$ = A$ + "#k:E3WhCHPCJ=?IeYPog]m4EEi;_VW<X2lDh92X_^Bj[ObZ[bLTelT6jk;V>"
A$ = A$ + "Gj2iBW[Ti;?fmH>San[CML_a;D:hPP69H#F<>]JAkB#YRUX6W;Mn<i<I:F:4"
A$ = A$ + "SnK\n27KHc#AAQELPa6nXk=<H`#fYLe^n6`m^1dBf2A[G#Yd5Cg#YLIbW9OY"
A$ = A$ + "PB5cT;OYR=T?MAC^<iBSOOHXIX`8l_]4B7>jiDAk7M_EdNH#fSL8jkTO1oNj"
A$ = A$ + ";TQ;U7N:S3=:8\:BXJY6bD4afRU:D\Dn:;U?3RfHog;1N4mYQ31NH82=nLNH"
A$ = A$ + "i917o06WJF4V`l=8<b`O#Xb_;A_aFc]WA<Yo4DE#``8TQ1REY9BH966lk4`a"
A$ = A$ + "oU0WhGalR1AJY5K4h#<Td1jE4b4=f`AdTPR9S>1I#]<f`S=L8bUdHR8h<5h3"
A$ = A$ + "bA`_QaW8QHPCW8T5;H2?KIhPa_EAkHloe2#1J28P9_ID^1J39lFc:9PTQV_9"
A$ = A$ + "GJS`>`nT9O#FTA49SBE[mGO`:>0gIJn6Bd]:>02OLn^ZHniYkgOQDAH8?Rj5"
A$ = A$ + ":CTWZ96o5ZH0=7CWWT2CgPRg4KP`678laZf]SS:EZl3>76[D]B;AXVVA]<5E"
A$ = A$ + "i_CcT>O2^:Q^Af[6[_8ETQc=RVg2LIiHBc#Whi]H9=8[2oV85RAd;jPIdHT?"
A$ = A$ + ":D08RWSo0\^1Y32\6<2UdjARBPTIJVRb7\43ZG]KFDnXWCH`QYiJE>IV0E;>"
A$ = A$ + "?6g1#<RUc65`g2bQBRi;QOG63nQd^[4IE4f55ZoQ\E4=FMAR#29HBcND2U^d"
A$ = A$ + "Z>jYkPdRDKPT0J=]E:eCc1O;<KFj<e6BXbT\o>IM6S5M>jMDLG<S:7OSWBPP"
A$ = A$ + "AT1IN<\:R`W>_Wn2B4EmGNfa2<j7a#5=a\cUD>n:ISV]W^:\kXNLj6eS2STN"
A$ = A$ + "IJYR3PDOmXWMhIPa62iHb<=58I3\SXL[P1H[AcJ13NTMSC5478iE#U1Hj#A<"
A$ = A$ + "n?XEbZ[Kn[ZBUHa\<iiojK=P>R>7\:LT=6QII9IATTSNiHeIWiFM`9LQdi8?"
A$ = A$ + "n3:V6#lgLYYc7[?V^;dZVNcXkRUZTdnS^g9BnEI1;<A:O39PFndZfN4ImQNQ"
A$ = A$ + ">M>#imIEZL^eRMXXd5BNn#NU_<K4KgZ1BVSXcNB\hX:NgHkcN6i;_O2nQDn<"
A$ = A$ + "2GQ\7CmP]dUXSNSIkD=J8o[i#NdXXZ6>oCRCaflcD<1NYc9oGZ]5WnU__\jI"
A$ = A$ + "]o4n>L\IA782:[mY5On>oMFJM5]K=OQbYH_ZXMKl6=TFmfVVD?bTGlXPLYf9"
A$ = A$ + "n;iA3=OdG4KcTVMXlMUTgX6HeK3KcT=b#n^B]1TdaVKR]M?XHknd=ZlUBCDi"
A$ = A$ + ";VVD`:MXl<AfWn3Qd\?EbD>2GIn>nZAlHoF[SX4:6HEndNBK\o1[1MQVCc2;"
A$ = A$ + "UV2VBXgReMNTHCS3[^=0]6KJ<5T]H`gdF9OSST9IbJLa<iC`KYiADTcU^SA`"
A$ = A$ + "TC?OK5`L;EOK>;4TVG9U:EB=3aF84KaR^WXB:aN8RBjg8fhKQ?#SX8O6BJn8"
A$ = A$ + "o3SJd`Z9HlPTNB45H6K3chT=J#R6#WXY]DE;la>A^[U8l\j7Nm=fnOa<fHiR"
A$ = A$ + "B#6\MFdK2b6[gTGUA4Ga5EI4a6ThQ;:JBRMS\S4YabDN\Bj;=f\XaO0d9N;4"
A$ = A$ + "M8W#6BCB_ZWBEGf<4B]6UT28M:RbAh:Gk]AaI:nm5`n:`f;6f5nV;WDVlAR3"
A$ = A$ + "NbL4=DTiHN#>7=T\dMJDJ15U`OJ0AO[dPe>\85hcN4j]8fiI_M6<ObJe7iaF"
A$ = A$ + "?[LOahCLc[3ChB[YSWF<Mc9Y:_Ao4Rm9:bH[GND3`9[6;kh5gQhgWdS9]HB["
A$ = A$ + "EQ<>OU8kR8^2ma2eaZ;dZf6JeI3mdWbT8ZKNV9J?5C_lRUD^P6?HTed53FR4"
A$ = A$ + "bfNBPO=h`_dDjCil`[j`4bZSS7D`941W8n#I;ihT<UBQ#A4H<9:D11KjD\IK"
A$ = A$ + "CK:9N8aCb^CUY62#^mA2M?h`D_`8B6RW8#IbD^\fR3h=6C:aHC<=fBf]TJMR"
A$ = A$ + "aGU`nE3fLUbiTB9J]>oHhaad[n64?;RgLl<2HE#eMg<:Zo#a]AJ_\HYXMaVA"
A$ = A$ + "1a_5gVZI=l<R2>g^Q4S2BhiAabh3Bb]=<1EAG\G9R?e575ORE0>QAV:Xjccf"
A$ = A$ + "HHlTb`f#IC;I?c6QKaJ;b=n[bUcR6;h4S_f5OLBLXlQ_LJNjHM#EP8GV68_#"
A$ = A$ + "<b;ncXh]TT\h`oY\2RU]7TcF9>[?j<B6_431DNRlDRR2T869A<D4afBR7;dc"
A$ = A$ + "b#6eJOjLH2PfL7UiShS:<>h?:<;>=f4bXB=<XXWi<7]BX5Hi1:3?a^6RJ43W"
A$ = A$ + "LLEVHYWnBCnf?c;XCJ9]fRZ]DK0Haf3Hh7I=M69fU[`3ola>ENOiZmH[DS`l"
A$ = A$ + "8TC=0S0=Ym>52B6BYe^[Zd2AbI_413IFRVVb<5MA53[6WBHUa3>C4:ncYi3i"
A$ = A$ + "V2:5CSZ<_0N?J5IDHD^#0UA_TX>Z;9OXFF21=MaB6YiXR6KHbDUIXS<?cXff"
A$ = A$ + "77G:DXHLa38KZ^DF9RZ?\[GR5gFW1f^LT]L5Te6KAWVLj_TG][>2<UcEE\Hj"
A$ = A$ + "_6D[Z4A;bJIhPER8V7ZIPH7NGL5afbeL]U8UBcaYVF\QAmk`dhOTi9EAKZjK"
A$ = A$ + "66kE>ObnJJ19]3YM^2?NAm9[KWc6]emS5SY59fG^_QTJU8];CPCSTT]BX?BF"
A$ = A$ + "3ULRGM\NClhFTmALJ6>e3[?RQU8HLh#TVhg4\kEVe1JnCYfK]>4iQ;A\_#d?"
A$ = A$ + "=S?9RWAlY7WQNIIVKmac\A_<`AjDT4CCTV76?k;;ggdiLa\C#B#<>Ll3`DIb"
A$ = A$ + ">:ZNF^NB9[NR<fAdXAEJPnT#6Flh:FcBW\FYNnbdBL4WlLHIbAR^SlfV=VdO"
A$ = A$ + "jM`PXIJbSm1`AgEGC;m;^X6IR=ZV?faJ6_8]LJCf8am>9A<Y=`ITJa7;m[TU"
A$ = A$ + "#cic`N>XTdEc2`KJLZIbK3Jb6U:[OZ\=eOTee]Omb47XNfUZF\;AaLQN29L8"
A$ = A$ + "REflmWbend_6JnE1[\LoU86\HR`MPb6?f:5Vgg#Al<65Z?blHn0Ua4V3LSCB"
A$ = A$ + "mUER_ec[eETGL4L>d1I7o18?_I#Z4EK;nkS26d<:2G:7A1DfL4?LHRhfAeB["
A$ = A$ + "6=m>CAKVZ<?C2NTC8=RmF8QZGWUhV`Vd<dZhTfYgUF[^#;R27ak36DLPe7Y?"
A$ = A$ + "L8V[kS;aaaTAXHR7NEaEeTlBO`GFNnaEFVm98c3Ej;D[4AXjfSWCTbXjFb>?"
A$ = A$ + "#L8=ViQ3;RaQ6#b3gjj\XA;RoC6PQZ8\R?];hSHQ[HJ??bJF<FYEE1O8[c:["
A$ = A$ + "KM2>T6[T?M6>GjLJlnD1YUZ:8n9UdMdBOd774Th9Pn;kd\<O7=hiiTZZ_Fi8"
A$ = A$ + "5SHC6\gBbN;ijQfhBaeKZVh<>Yn;EKR3HHh8NTYEfj`B]A2YiP]F\D6_B<8D"
A$ = A$ + "09LMFhj1a>VYBMCZ58;9enSPYd?OiVWV<ole9G`5M:Y^H=naTHS8Y5YKnbQY"
A$ = A$ + "iJ\JG1;m=;o#S1K]iXk53iQ<PEWW\CeBekTNYN9C79NJR\4C;9e[O_enceca"
A$ = A$ + "Snb6X^;CCe#8\MW4L5:P;S?^j#R81ijcZg53WBU9K9E<V]1H5]2MhQEb:Z<m"
A$ = A$ + "g<>In<>INENgYoIS^VC=f[_FOiUVBOiIVJOiClE2ObILfG5m?KV3YSdj7B9\"
A$ = A$ + "g^LDP6AW;S_bNIY8NTJKcJNT]P8>aa#m_an1anE?Go]d>Okne2WRHVnT`O^c"
A$ = A$ + "6hKRol:JW\1QSmXJIkB#3K=I=kV#]o\nDBh?ggHD\G\HiS6lSYA[<#9=fV#^"
A$ = A$ + "d9L`RTL=9FTTnSmOaNeC;?cBCF`YLR4Qc=>VPJDH<bilIi7OQJG=?7m8;gTV"
A$ = A$ + "5bRc\9Ai>0Yn4D]7TeERFK8^4:Bm9Xf?DIS1;_`e]Em<Ba065:EffEdIWAKe"
A$ = A$ + "O^4kXVE_EB;S8n[A577W09SI[kOSN[=Z6eA1M1B]l6M=SlFMDYD5U_N0NBMU"
A$ = A$ + "Bk]N0l2M;QX7<XG<KYfP^^M9[oNJGmF\aSJ3kSeoL:OAnaDP`RigC^[?QPh;"
A$ = A$ + "bQPiXk=:Y?`j2C4;NC4o>^Rb^J:cI=8eK?:d?PDFF:bFfN]Z5Jl:oWbeg;PZ"
A$ = A$ + "L6SG1RgB^ZD5IG\82RiHUG<``i1aag>Z4mb`\f197IGC\Uk_ZHan:;<A_WUL"
A$ = A$ + "f0\cSX9^Q:LB[jJD9[M65YGndELP89V8MmhYO5W3bJBI;[U5o]:;BlflDg]N"
A$ = A$ + "]IUml#[L]hdBnShH#FdBP`751^89f0cXHl]K`_2ai;[Ff5ejH7ib8P;CU7?P"
A$ = A$ + "SOn1\[iFVBaFL9cCQjRFAa6X6ZSlfK9_MGOI3Y0BKn0:VMS\f3lRBhT1JWU1"
A$ = A$ + "ZG\a9b09XR<Z4C9EaP#=7\bT3TEN<^NU4UYQ9\>[5;i4:M[NW_0[_P<SWbJg"
A$ = A$ + "]1N=e>N_egLBF\TPd5W_aE3obbMBCV\\U#QH^SEWhL3]<DfhEl]LlX8J;U?N"
A$ = A$ + "5hh8I:KLUUWTLEDGi[PSo`kVcCjj08NFMI8`[LHT\D0Lm5dUTT3<F]gVbIST"
A$ = A$ + "PCC9bd=^^[dND:CJ]f[N[89]MU4lVR:C:R:7::ER\3cD;FJ8NLf?kGQg3:]j"
A$ = A$ + "_:DNef=M\RC^Ea[<9K8fJdDUeRL[fWTDH2359Y?c?N\\ikT;]DKW<^Z[Z4U\"
A$ = A$ + "QFoW4AWcUf^f`8\>Fk^gJb[mKA=F4[]<oZ0[aU`NldjXKmEIAj:Ld8JMjR[n"
A$ = A$ + "G9N_4`^Z<abGdNhk0AlbHAeOG67>XAIa]UJmiA;HhVOb[bG#IA7hZjGDLL23"
A$ = A$ + "bdNdn1Ao[c2NkNhSUQ\kF`4i>8b>YcI\[Q0Q\bb0akm#IEK8`OTMCeabOmUL"
A$ = A$ + "`<A=\88FPRR`:Ic#RfDQl6;D#eb[=[GE2Uh#dXBY<=E97aD3eK]ZfJ5L>b^M"
A$ = A$ + "d`=`B_CI5:J`I:S\<V\J5ZT#i5]##F?Mjgba`G6HB7S9<4I;g^1?6;o]J<:J"
A$ = A$ + "cHJRSCXHJNZ6YbFoUhm?jT>J1JTDU?:B0RCf8h9OXFCVjIRcMEYL8cObZQT]"
A$ = A$ + "DBC1[9In#iWPG<iXFoIRNE<ShGAc\B8HF_:AARi;ISiPaDZnlG\=NgL9Re=f"
A$ = A$ + "VRHQ;bFcBIg\hfdZ2`mX;DMSb=EE>:M2idb[RT:XVXFBNk]_O;73e[8;Y>aa"
A$ = A$ + "`Vd\g#X62;3n5Vbi`4TAW`HX2Y9W8^P7PHoOX<:=FcWcDH2SVjm;WQUAm65["
A$ = A$ + "I<oQP;\QGN#T1H96d<D<Xa1kfP[VEan8`NYk4bS<?]fE^LY#HD313_JMi5_A"
A$ = A$ + "TK[iX4FZ\GnjmflZZQl7F6<lXR>hHC#CPdPN4]0_m3YVK0_SAE8BD;19JA]V"
A$ = A$ + "BK:E7Hl];D=7cQ[2E;_<_#EZ[3S^;J4o#\>P]ZEN15bUbZ<o6;LREaZL9o9A"
A$ = A$ + "XGZ[E\0oK=<CHA^LHj1bF:gfX2cVV:HVDjNb4\C2I6fabd_inSEYi988CPDF"
A$ = A$ + "[<1`J^0JM12dM:1B7;P`Lij>ZH\nhM3X61]gl[JIel]E[bg3I3NE^BMM55Go"
A$ = A$ + ":EVk87bF8[Y6VNdOc4PYO=a\J4>Pj3c6]gS3Z?Y4LPThZ[d3^R]M0WLhiHag"
A$ = A$ + "DNbiejh3>?NF8BWkLgU4E]XY\nd1Bm_B\WKV#=`hk;SBLU0RRgQ<lE9;8Vj8"
A$ = A$ + "5L[KSToJ6AGd_D9YMefgV3AX=GDDUci2b]_k\cINO1Cf4`hDiEVOh8<BZHmo"
A$ = A$ + "1I^hKjnA[T6>MVlU]Odd\1RlGl5e7[gjV5_o:U#bciE4UbZf77=]]FSnEl;f"
A$ = A$ + "4CD\MDkn?eFQ:Y4RFlWi0lFCUe6DcDl6Lf5ACLQ=em8YU^ISl?AfATg8MciU"
A$ = A$ + "FFWaTk>?c#f[i<Gd=IKMne<foN[YDRJ`J_?7R[iRj\LDOlTZ0Mllo`R_bEIW"
A$ = A$ + "nB>Ki\Y<RI^9cNf?`#jB`kO_CHIKlNA;D[EHSfm7ZM7]Uc]OA2e]d6KFUn8Y"
A$ = A$ + "oIaE_jmQfX#kCid2Q#ilaaFPJXd2F;iK<i[eAnhki3RW5C5\[dQoHT>I=EiA"
A$ = A$ + ";S[4Jai2;[7OPFWV1In#>Y^hLdNfL7ejl#5h]AnZ#G#A^K;4k^NTa<nFgRf4"
A$ = A$ + "KofNoll>lnH#[5DReDJEj2BYkRF^>JfEeQ9HafGYeY[9MM\8Nkl95liKR_k0"
A$ = A$ + "TMU\^5a\ZLHd#Ad=<fQSRT<?E>^UGlfOOgofiN:h]km7`kTk5QgYkkogm^?H"
A$ = A$ + "nMbmfQFoaAm[ohXNe_Wm;E_^BndVT#:3E9J?N>T\Fc3Q0<H#:RIIMI8I>I_O"
A$ = A$ + "[e>8NGT:Jgl^jaNW4Zih[i1Zk?eO[^_<4o0ejEK1dOWFfMak=E>2oJPF_N?;"
A$ = A$ + "T8:gb[mR;Bg8_c\<HohlXiIRHb>MS\cA=lN;WTJ5kM^=Rb4lOe#nb:JYGn91"
A$ = A$ + "8D\5OeNXRf;K7\bKFQ9c_X_KgTk<e:]`e1IJgkVXFhl_l^fJAUHM2:akfJJ3"
A$ = A$ + "F;ke2A6T^?3Um:UA;M0aBhJWC#13=hgl?GiL\aF`kUUJSGGD=f8Y>2S=LZ=#"
A$ = A$ + "g5Jjnm?8KlnmWNF\8kgOJCZbgGSPQF9oASB]oOm1[J]>L1kCUTn0OoQV5]7R"
A$ = A$ + "h::>=8_6Xmaj;^el#ZHoAf=olGQdW6R_W9YnccE:LPaZ;enYk9`\Z\;]WbM]"
A$ = A$ + "Y4e6RlUJoH`Q\Y>;NXkI76>i58=L43ZSL82M]hS]MiEXaE[UVCXNPefY>_ZF"
A$ = A$ + "X5ac\Q4=57mbK<;9H?Mg3c3J2H9l0;^IK[\mRKAaAk`cn_6R]94HaP2<7QJS"
A$ = A$ + "N?^8]SbTi0<_Qg]BY?n:TUT5=TY<9UfP`Z6;?RliXl9JQ`aAVBSWae8MNGSB"
A$ = A$ + "OH?<XY;ZD]VQ8VZ>mUaVQKURT81f:SK?_Y3aV`E8PU6LdO1GB;E0SgK84J`d"
A$ = A$ + "f`ghYTWL#dlB`3A^9_\NIQFY76;Z#JW57TF^L1V3akjK]eA4L?\WlF=:_8SC"
A$ = A$ + "VKHA^S3>Gh_AN]]X6D;ALi5:#U#aP=4JQC>^FK[[V38TJ?G70\CN#gG^^6E^"
A$ = A$ + "^D\\]8D`9oXkI5jNaaQ;i4gb8\Y5h;De4\hR]]FL11K1i>lQJ?=0T`Q2LN_a"
A$ = A$ + "6[oD[?M9O<UIH;bcJB:_WUm]cglFI?9aHOe>Djdfn:U8i<\LB1VTBi0SBnbJ"
A$ = A$ + "3PhVJl#fZ6_aCAgFd#2MgJMj^UldOmdQIRV:K`j62>Vg8kCddL50#R#TCWW>"
A$ = A$ + "0jm`]SfEO\45e?Johakd:i^;FU[8:H5]SXXNoWckgUJS]J8j]\N^XjB2^JNO"
A$ = A$ + "Z^VfJk>URX5Q>3=\LNP3f9`[22ETlQ:JXSE7?64V9jLQ^m9QcFE]NF[XNZF\"
A$ = A$ + "8dCHaVA]kEL]?>9JWD7]aTEE0WLGP[m1XDJmF[FDG4n<=GRhHBR4CHbF`Qhb"
A$ = A$ + "#2kT=4KKXX_\XDd7W09K^#g3#Z=YbPQKO0iX]AjCE0ZcfH>R9cD=#lTCC;k\"
A$ = A$ + "DO:Ml\aAaSWBnTm9<gXkJ7a7:mL1Phk:Q;F>8P_gVba?o96U[mPakI:Pf?ii"
A$ = A$ + "4PCOHXhOSbM`nKdifnQLKlgLoJF8dmKEWh9V1]b47?LB#AHE`Y1W1Lf`i1W?"
A$ = A$ + "LA`U0O0hZP[5f<\Eh6PNQM0g<lQPk#^oSJDo#aV]HSL\4NmZ`?E:EJ=CedWR"
A$ = A$ + "bM8JejgAgknfn`mgoSnm5ljS]O1Nm?iFjES_[l0cN;KPl?nACP;QHj57QNHX"
A$ = A$ + "Dk9M1KShUoCkAkj=9`QSkW\]n:oGI_e[eSGn>S^oQQ?:l9POOhnPo#hc1o9`"
A$ = A$ + "31?2lX`O>lG0O=h[3OCh_1n^`O;lg1om`?161N=hO4nO2o_PoEho;l_1_1<^"
A$ = A$ + "\C1W<JZUGIn]Q_RlVFYfhM<]geFNISJZFffH:[?]ZS1E9_Zc[Ka#mjPbPK1M"
A$ = A$ + "LcHg0CNbEdgKd[]YginXO?Un>G7iT_R[6jD9UDf[4K=Y9ie4gBUC\7bjBk9o"
A$ = A$ + "i;=YBJkm=AhLg>8Ie2hB_b[c]]DHNXQ01FjU;BQVhQ;cO5N2\dkLBkm;1fGY"
A$ = A$ + "KB[aaQXHTM]ijTY?1XEX4L:`Y3W9L^`k5^0hm3G6L5`e0M0M2M1K7^AHW`]2"
A$ = A$ + "g6m#\RbYd^cclnTAc\TbIV[RVl;[ba_adX`OYAmH3hAZZ<E[O2`V_HSL\4N]"
A$ = A$ + "A_Vo=lcbmJC<Q9b]94]g_3_9l]hK_h9me_nP9^L24c9b<A>N<kgm]JM#JGll"
A$ = A$ + "_:=?mHo5`To\\hOo?c4\[9mKgWi9okiI^`kdWA:_KmLji]kc9XOGmlmioOhi"
A$ = A$ + "GeoAmLkig1?3SLk1Wg=OF;m^ec2[gEOfLmObNNSmfiIofk6?cY0HV`S3fWEa"
A$ = A$ + "E2eYWK`cGRNN5XFj:ec3`_MGjidcFc_TNNUHF?OCmlZ`[nadC3fDdc[hYcmR"
A$ = A$ + ">gPW?Kml:`aMIji1`J`gbiY`fl7YWG9fj7E?_:lkoNH\QK4a4:BAh\gh:;B7"
A$ = A$ + "V`gLaX7g]RNKk6mmf?NIWKMWMg1Nbj`H8k16P?f?fR>aL1>ElC<4T[K3mTCn"
A$ = A$ + "cK5oKK`:`?]RM^gN6HMmfoFk<kYVU77lHKU>QFKm4JK5]ejTQ6G>>0dSWc^h"
A$ = A$ + "Q=;n6^l>kO7MeK?Ic>I]70kC4jaG=h^38lOIbQOZ`4HBIZdDUYJcd<eHV^YF"
A$ = A$ + "CMVIHVYYNc\<Y=cfdPI>V<ViJJd<?cl=;`\#cR<;f\4CCV\84VZW8ZoGRW7Z"
A$ = A$ + "VUJbSak?8lAP?3LG`O<lUQ_8V?`mIF6V;`MSAnoP`nPO1<:l5hWLZ3im\CmS"
A$ = A$ + "1G?b:XWNZm0ONTULS#O<kIWX4QldCMGHlIdC?eW6cahfQmPAZm<`3K:HJf\L"
A$ = A$ + "caH>FcaI>NC;`WcL2VCdLB`7e\2C[Vf<5=[dDbLbVEIF]iD<W:Z?lY<WVI=`"
A$ = A$ + "SH>Mh?0ndVgSi<<[eLVVcbLfVcaL^VeI>?cj=_GckcLnV=H^0c5J^8c6=_Oc"
A$ = A$ + "5K^4cUJ^<cUKn0Vf=GQi:=GUiZ=GSi3J^FceIj`\9cV=QV>=Ka\Ecf<MI^Nc"
A$ = A$ + "=Hjf\MC?VN=mI^ACoVMH6`\Cc=I^Ic]H^Ec^<O8c^=gVif=gQI?VO?cMJn`V"
A$ = A$ + "1=OTZgI?M]2lUNlLdS]Z7KC?FD?^BmH9mh9[7GUNLejaCA?NVjacB?NfjacE"
A$ = A$ + "?^>iH[jhgZ>^]ZSK[jhfZ>^]ZSK[jhfZ>^]ZSK[jhfZ>^]ZSK[jhfZ>oJE7o"
A$ = A$ + "FeaOEjacDaScZ]:?_>fnfkXb;MKM>#7EN9M]e]gA`6gFGl_Fl<?U:kXknfF7"
A$ = A$ + "E6fIg3dAeMfg>jZkNkYbM`]JP>fI#OK[[JjlFfLgM\m`=e=eWf`AXZnjL78`"
A$ = A$ + "ZYSnk_gK^k>gb0EcW]cnV>O\o^fjf6#na`N_iNTcfD_3\]JdV5fCM^cfd>jT"
A$ = A$ + "1KK]N:C_gn7HKm^eNkYS^[[[N60]XdiV70=ZDKWgh>kjVjXk>kIcMFifjMWk"
A$ = A$ + "XcIdOWgDgm^e^fL7MgC_3<MZaK]o>jNPnLW^Y1VfU\^F9aQE#WdZNb:LWDdN"
A$ = A$ + "BKfCFYmTEK?iD\WLbfCFUmTBj9[d2Wf\M_TM8:IQLA;LJcn=]IKCKFhDbRZ["
A$ = A$ + "dfhRFdX=g9fA_=;nDdMRmWFYM8Je=XF8gV5EGY[aF8_B;n\Bglb2iEJkN9g4"
A$ = A$ + "d1WE:ZKm]Y^kMcg#e8_T>FYLEgKA>fo0je3\S]eAHWEbo]j`KP?FcFjZk^k<"
A$ = A$ + "LCmN;CG>[OTSGm0mgE7KMWm97kG_>\7iHgKYZ=gEoK^k>[Y[N^Y=]C\C3#WY"
A$ = A$ + "Og>fNGXlH7K^CD0jVLG4\SMfCEKYc]SR#YXoDi>j37lDK^kM^Y:gFWMP3AHG"
A$ = A$ + "M\mNk9\f]_cMX2EM>C_cAIOa=ehScNbHoGSl3nVg6Mdooo4noEAM%%h1"
btemp$ = ""
For i& = 1 To Len(A$) Step 4: B$ = Mid$(A$, i&, 4)
If InStr(1, B$, "%") Then
For C% = 1 To Len(B$): F$ = Mid$(B$, C%, 1)
If F$ <> "%" Then C$ = C$ + F$
Next: B$ = C$: End If: For j = 1 To Len(B$)
If Mid$(B$, j, 1) = "#" Then
Mid$(B$, j) = "@": End If: Next
For t% = Len(B$) To 1 Step -1
B& = B& * 64 + Asc(Mid$(B$, t%)) - 48
Next: X$ = "": For t% = 1 To Len(B$) - 1
X$ = X$ + Chr$(B& And 255): B& = B& \ 256
Next: btemp$ = btemp$ + X$: Next
BASFILE$ = _Inflate$(btemp$, 25152): btemp$ = ""
_Font _LoadFont(BASFILE$, size, "memory, monospace")
End Sub