Mac created a great combo program (above) of my Sudoku graphics-creation utility and Sudoku game program. It generates the graphics, creates the Sudoku.BAS program and then eliminates all unnecessary files. I have discovered that it won't run under DOSBox (for me, anyway), so for those that want the separate graphics-creation utility and Sudoku.BAS program, I am posting them here. You must first run SUDOGFX.BAS below to create the graphics files, and then you can run this program.
'Copy code from here -------------------------------------
' -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' --------------------------------------------------ħ------------------------'
' -----------ħħħħ--------------------------------ħħħ-------------------------'
' ---------ħħħħħħħ------------ħħħħħħ--------------ħħ-------------------------'
' --------ħħ----ħ--------------ħħħħħħħ------------ħħ-------------------------'
' --------ħħ-------------------ħħ---ħħħ-----------ħħ-------------------------'
' -------ħħħ---------ħ-----ħ---ħħ----ħħħ----ħħħ---ħħ---ħħ-----ħ-----ħ--------'
' --------ħħħħħ-----ħħ----ħħ---ħħ-----ħħ---ħħħħħ--ħħ--ħħħ----ħħ----ħħ--------'
' ---------ħħħħħħ---ħħ----ħħ---ħħ-----ħħ-----ħħħ--ħħ---ħ-----ħħ----ħħ--------'
' ------------²²²²--²²----²²---²²-----²²--²---²²--²²--²------²²----²²--------'
' --------------²²---²²--²²²---²²-----²²-²²---²²--²²-²²²------²²--²²²--------'
' --------------²²---²²-²-²²---²²-----²--²²----²--²²--²²------²²-²-²²--------'
' --------²²----²----²²²--²²---²²----²---²²²---²--²²---²²-----²²²--²²--------'
' -------²²²²²²²-----²²²--²²---²²²²²²----²²²²-²---²²---²²²²---²²²--²²--------'
' --------²²²²-------²²---²----²²²²-------²²²²----²-----²-----²²---²---------'
' ---------------------------------------------------------------------------'
' --------------------------- S U D O K U . B A S ---------------------------'
' ------------- Copyright (C) 2005 by Bob Seguin (Freeware) -----------------'
' ---------- Puzzles Courtesy of DailySuDoku.com and QBasic Mac -------------'
' ---------------------------------------------------------------------------'
' -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
DEFINT A-Z
DECLARE SUB SetSCREEN ()
DECLARE SUB SetPALETTE (OnOFF)
DECLARE SUB PutNUM (NRow, NCol, Number, Style)
DECLARE SUB ClearGRID ()
DECLARE SUB LoadGRID (Load$)
DECLARE SUB SparkleGRID ()
DECLARE SUB PlayGAME ()
DECLARE SUB MoveSQUARE (SquareROW, SquareCOL)
DECLARE SUB CheckGRID ()
DECLARE SUB SudokuHELP ()
DECLARE SUB WonGAME ()
DECLARE SUB Interval (Length!)
DECLARE FUNCTION Generate$ (Old$)
DIM SHARED NumBOX(1 TO 7500)
DIM SHARED FontBOX(4701)
DIM SHARED Puzzle(1 TO 9, 1 TO 9)
DIM SHARED Checker(1 TO 9)
REDIM SHARED Box(1 TO 26000)
RANDOMIZE TIMER
SCREEN 12
SetPALETTE 0
SetSCREEN
LoadGRID "0"
SetPALETTE 1
PlayGAME
PaletteDATA:
DATA 0, 0, 0, 18, 1, 0, 0, 55, 2, 42, 42, 63, 3, 0, 0
DATA 42, 4, 63, 0, 0, 6, 21, 46, 63, 10, 31, 31, 63
'Opening screen
Puzzle:
DATA 1,2,3,4,5,6,7,8,9
DATA 4,5,6,7,8,9,1,2,3
DATA 7,8,9,1,2,3,4,5,6
DATA 2,3,4,5,6,7,8,9,1
DATA 5,6,7,8,9,1,2,3,4
DATA 8,9,1,2,3,4,5,6,7
DATA 3,4,5,6,7,8,9,1,2
DATA 6,7,8,9,1,2,3,4,5
DATA 9,1,2,3,4,5,6,7,8
'Easy
Puzzle1:
DATA 0,0,9,0,0,0,0,3,0
DATA 3,0,0,0,0,9,0,0,2
DATA 0,5,2,0,3,1,0,7,0
DATA 0,0,4,2,5,0,0,0,0
DATA 2,9,0,0,0,0,0,5,1
DATA 0,0,0,0,1,3,2,0,0
DATA 0,8,0,3,4,0,5,1,0
DATA 5,0,0,1,0,0,0,0,6
DATA 0,1,0,0,0,0,8,0,0
'Easy
Puzzle2:
DATA 0,9,0,3,0,7,0,0,2
DATA 0,4,0,0,1,0,0,0,0
DATA 0,0,1,9,0,0,5,3,0
DATA 0,0,0,7,0,1,0,0,8
DATA 9,6,0,0,0,0,0,7,3
DATA 8,0,0,6,0,3,0,0,0
DATA 0,2,8,0,0,9,3,0,0
DATA 0,0,0,0,6,0,0,8,0
DATA 4,0,0,8,0,5,0,9,0
'Easy
Puzzle3:
DATA 0,0,0,3,0,0,2,0,0
DATA 4,0,7,0,0,0,0,5,0
DATA 2,0,0,1,0,7,9,0,0
DATA 0,4,0,0,7,0,0,2,3
DATA 0,7,0,8,0,5,0,4,0
DATA 9,6,0,0,3,0,0,7,0
DATA 0,0,9,6,0,2,0,0,5
DATA 0,2,0,0,0,0,7,0,6
DATA 0,0,4,0,0,9,0,0,0
'Medium
Puzzle4:
DATA 1,4,3,5,0,0,0,0,0
DATA 0,0,5,0,0,0,0,2,0
DATA 0,0,0,0,0,6,0,0,0
DATA 4,0,0,0,9,0,7,0,5
DATA 6,0,0,8,0,3,0,0,2
DATA 9,0,1,0,7,0,0,0,8
DATA 0,0,0,2,0,0,0,0,0
DATA 0,8,0,0,0,0,2,0,0
DATA 0,0,0,0,0,8,1,6,7
'Medium
Puzzle5:
DATA 0,9,0,0,0,0,8,0,2
DATA 0,0,0,4,0,0,6,0,0
DATA 7,0,0,0,0,3,0,0,5
DATA 4,8,0,0,0,1,5,0,0
DATA 0,0,0,6,0,7,0,0,0
DATA 0,0,1,2,0,0,0,8,9
DATA 5,0,0,3,0,0,0,0,4
DATA 0,0,2,0,0,6,0,0,0
DATA 8,0,4,0,0,0,0,1,0
Puzzle6:
DATA 7,8,0,5,0,0,0,0,0
DATA 0,0,0,0,0,8,0,0,3
DATA 0,0,2,0,0,4,7,8,0
DATA 0,0,0,8,1,0,9,0,2
DATA 0,1,0,0,0,0,0,5,0
DATA 2,0,6,0,4,5,0,0,0
DATA 0,2,9,4,0,0,3,0,0
DATA 5,0,0,2,0,0,0,0,0
DATA 0,0,0,0,0,9,0,6,1
'Hard
Puzzle7:
DATA 0,1,5,0,6,0,4,0,0
DATA 0,0,0,0,0,9,2,0,0
DATA 0,0,0,3,0,0,0,5,9
DATA 0,2,0,0,0,0,6,0,4
DATA 3,0,0,0,0,0,0,0,1
DATA 5,0,7,0,0,0,0,3,0
DATA 1,5,0,0,0,2,0,0,0
DATA 0,0,8,6,0,0,0,0,0
DATA 0,0,4,0,1,0,3,9,0
Puzzle8:
DATA 0,0,0,0,1,8,5,0,9
DATA 0,0,5,4,0,0,0,0,0
DATA 0,0,4,0,6,9,0,2,7
DATA 7,4,0,0,0,0,0,0,0
DATA 0,1,0,0,0,0,0,5,0
DATA 0,0,0,0,0,0,0,8,6
DATA 5,7,0,6,8,0,4,0,0
DATA 0,0,0,0,0,7,6,0,0
DATA 8,0,3,1,9,0,0,0,0
Puzzle9:
DATA 0,3,6,2,0,0,1,7,0
DATA 9,0,0,0,0,0,2,0,0
DATA 0,0,0,8,0,5,0,0,0
DATA 0,0,0,0,8,0,7,0,6
DATA 0,5,0,0,0,0,0,3,0
DATA 3,0,4,0,7,0,0,0,0
DATA 0,0,0,4,0,7,0,0,0
DATA 0,0,8,0,0,0,0,0,7
DATA 0,4,9,0,0,8,3,2,0
SUB CheckGRID
FOR Row = 1 TO 9
FOR Col = 1 TO 9
IF Puzzle(Row, Col) > 100 THEN Style = 0 ELSE Style = 1
IF Puzzle(Row, Col) <> 0 THEN
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
END IF
NEXT Col
NEXT Row
' Check 3x3 boxes
FOR BoxROW = 1 TO 7 STEP 3
FOR BoxCOL = 1 TO 7 STEP 3
FOR Row = BoxROW TO BoxROW + 2
FOR Col = BoxCOL TO BoxCOL + 2
IF Puzzle(Row, Col) <> 0 THEN
IF Checker(Puzzle(Row, Col) MOD 100) = 1 THEN
IF Puzzle(Row, Col) > 100 THEN Style = 3 ELSE Style = 2
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
Duplication = 1
ELSE
Checker(Puzzle(Row, Col) MOD 100) = 1
END IF
ELSE
Blanks = 1
END IF
NEXT Col
NEXT Row
ERASE Checker
NEXT BoxCOL
NEXT BoxROW
' Check columns
FOR Col = 1 TO 9
FOR Row = 1 TO 9
IF Puzzle(Row, Col) <> 0 THEN
IF Checker(Puzzle(Row, Col) MOD 100) = 1 THEN
IF Puzzle(Row, Col) > 100 THEN Style = 3 ELSE Style = 2
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
Duplication = 1
ELSE
Checker(Puzzle(Row, Col) MOD 100) = 1
END IF
ELSE
Blanks = 1
END IF
NEXT Row
ERASE Checker
NEXT Col
' Check rows
FOR Row = 1 TO 9
FOR Col = 1 TO 9
IF Puzzle(Row, Col) <> 0 THEN
IF Checker(Puzzle(Row, Col) MOD 100) = 1 THEN
IF Puzzle(Row, Col) > 100 THEN Style = 3 ELSE Style = 2
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
Duplication = 1
ELSE
Checker(Puzzle(Row, Col) MOD 100) = 1
END IF
ELSE
Blanks = 1
END IF
NEXT Col
ERASE Checker
NEXT Row
IF Duplication = 0 AND Blanks = 1 THEN
GET (200, 230)-(440, 270), Box(20000)
DEF SEG = VARSEG(Box(1))
BLOAD "SuDokuSF.BSV", VARPTR(Box(1))
DEF SEG
PUT (200, 230), Box, PSET
Interval 1
PUT (200, 230), Box(20000), PSET
EXIT SUB
END IF
IF Duplication = 0 THEN WonGAME
END SUB
SUB ClearGRID
FOR Row = 1 TO 9
FOR Col = 1 TO 9
PutNUM Row, Col, 1, 4
NEXT Col
NEXT Row
LINE (166, 119)-(464, 417), 7, B
END SUB
FUNCTION Generate$ (Old$)
DIM S(9) AS STRING: GOSUB LoadS
DIM m(9, 9) AS STRING * 1: ' Matrix to be returned
DIM t(9, 9) AS STRING * 1: ' Temporary matrix
FOR i = 1 TO 9: FOR j = 1 TO 9
k = k + 1
m(i, j) = MID$(Old$, k, 1)
NEXT j: NEXT i
FOR Doo = 1 TO 3
GOSUB Scramble1: 'Scramble the numbers
Mode$ = "row": GOSUB Scramble2: 'Scramble rows within 3x3 rule
Mode$ = "col": GOSUB Scramble2: 'Scramble cols within 3x3 rule
Mode$ = "row": GOSUB Scramble3: 'Scramble Superrows
Mode$ = "col": GOSUB Scramble3: 'Scramble cols within 3x3 rule
NEXT Doo
GOSUB Rotate
w$ = ""
FOR i = 1 TO 9: FOR j = 1 TO 9
w$ = w$ + m(i, j)
NEXT j: NEXT i
Generate$ = w$
EXIT FUNCTION
Rotate:
FOR i = 1 TO 9: FOR j = 1 TO 9: t(i, j) = m(i, j): NEXT j: NEXT i
P = 1: q = 1: r = RND
SELECT CASE RND
CASE IS < .25: GOSUB Rotate1
CASE IS < .5: GOSUB Rotate2
CASE IS < .75: GOSUB Rotate3
CASE ELSE: GOSUB Rotate4
END SELECT
RETURN
Rotate1:
FOR i = 1 TO 9: FOR j = 1 TO 9
IF r > .5 THEN m(i, j) = t(q, P) ELSE m(i, j) = t(P, q)
q = q + 1: IF q > 9 THEN P = P + 1: q = 1
NEXT j: NEXT i
RETURN
Rotate2:
FOR i = 9 TO 1 STEP -1: FOR j = 1 TO 9
IF r > .5 THEN m(i, j) = t(q, P) ELSE m(i, j) = t(P, q)
q = q + 1: IF q > 9 THEN P = P + 1: q = 1
NEXT j: NEXT i
RETURN
Rotate3:
FOR i = 1 TO 9: FOR j = 9 TO 1 STEP -1
IF r > .5 THEN m(i, j) = t(q, P) ELSE m(i, j) = t(P, q)
q = q + 1: IF q > 9 THEN P = P + 1: q = 1
NEXT j: NEXT i
RETURN
Rotate4:
FOR i = 9 TO 1 STEP -1: FOR j = 9 TO 1 STEP -1
IF r > .5 THEN m(i, j) = t(q, P) ELSE m(i, j) = t(P, q)
q = q + 1: IF q > 9 THEN P = P + 1: q = 1
NEXT j: NEXT i
RETURN
Scramble3:
GOSUB GetRnds
r1 = (r1 - 1) * 3: r2 = (r2 - 1) * 3
FOR i = 1 TO 3
FOR j = 1 TO 9
IF Mode$ = "row" THEN
SWAP m(i + r1, j), m(i + r2, j)
ELSE
SWAP m(j, i + r1), m(j, i + r2)
END IF
NEXT j
NEXT i
RETURN
Scramble1:
FOR i = 1 TO 9: FOR j = 1 TO 9
v% = VAL(m(i, j))
IF v% > 0 THEN m(i, j) = RIGHT$(STR$(VAL(S(v%))), 1)
NEXT j: NEXT i
RETURN
Scramble2:
FOR i = 0 TO 6 STEP 3
GOSUB GetRnds
FOR j = 1 TO 9
IF Mode$ = "row" THEN
SWAP m(i + r1, j), m(i + r2, j)
ELSE
SWAP m(j, i + r1), m(j, i + r2)
END IF
NEXT j
NEXT i
RETURN
GetRnds:
r1 = 1 + INT(RND * 3)
DO: r2 = 1 + INT(RND * 3): LOOP WHILE r1 = r2
RETURN
LoadS:
FOR i = 1 TO 9: S(i) = RIGHT$(STR$(i), 1): NEXT i
DO
FOR i = 1 TO 9
r = INT(1 + (RND * 9))
SWAP S(i), S(r)
NEXT i
cnt = 0
FOR i = 1 TO 9
IF VAL(S(i)) = i THEN cnt = cnt + 1
NEXT i
LOOP WHILE cnt > 2
RETURN
END FUNCTION
SUB Interval (Length!)
OldTIMER# = TIMER
DO
IF TIMER < OldTIMER# THEN EXIT SUB
LOOP UNTIL TIMER > OldTIMER# + Length!
WAIT &H3DA, 8
END SUB
SUB LoadGRID (Load$)
SHARED GameLOADED
IF Load$ = "10" THEN
FOR Row = 1 TO 9
FOR Col = 1 TO 9
IF Puzzle(Row, Col) > 100 THEN Style = 0 ELSE Style = 1
IF Puzzle(Row, Col) MOD 100 <> 0 THEN
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
END IF
NEXT Col
NEXT Row
LINE (166, 119)-(464, 417), 7, B
EXIT SUB
END IF
ClearGRID
IF Load$ = "0" THEN
RESTORE Puzzle
FOR Row = 1 TO 9
FOR Col = 1 TO 9
READ Value
IF Value <> 0 THEN Value = Value + 100
Puzzle(Row, Col) = Value
NEXT Col
NEXT Row
EXIT SUB
ELSE
Choice% = FIX(RND * 3)
SELECT CASE Load$
CASE "E"
SELECT CASE Choice%
CASE 0: RESTORE Puzzle1
CASE 1: RESTORE Puzzle2
CASE 2: RESTORE Puzzle3
END SELECT
CASE "M"
SELECT CASE Choice%
CASE 0: RESTORE Puzzle4
CASE 1: RESTORE Puzzle5
CASE 2: RESTORE Puzzle6
END SELECT
CASE "H"
SELECT CASE Choice%
CASE 0: RESTORE Puzzle7
CASE 1: RESTORE Puzzle8
CASE 2: RESTORE Puzzle9
END SELECT
END SELECT
FOR Row = 1 TO 9
FOR Col = 1 TO 9
READ Puzzle(Row, Col)
NEXT Col
NEXT Row
' Create Mac string
FOR Row = 1 TO 9
FOR Col = 1 TO 9
IF Puzzle(Row, Col) MOD (100) = 0 THEN
P$ = P$ + "-"
ELSE
P$ = P$ + LTRIM$(STR$(Puzzle(Row, Col) MOD 100))
END IF
NEXT Col
NEXT Row
P$ = Generate(P$)
' load array from new string
FOR Row = 1 TO 9
FOR Col = 1 TO 9
Count = Count + 1
Digit% = VAL(MID$(P$, Count, 1))
IF Digit% <> 0 THEN Digit% = Digit% + 100
Puzzle(Row, Col) = Digit%
NEXT Col
NEXT Row
END IF
FOR Row = 1 TO 9
FOR Col = 1 TO 9
IF Puzzle(Row, Col) MOD 100 THEN PutNUM Row, Col, Puzzle(Row, Col) MOD 100, 0
NEXT Col
NEXT Row
IF Load$ <> "0" THEN GameLOADED = 1
END SUB
SUB MoveSQUARE (SquareROW, SquareCOL)
STATIC OldX, OldY
SHARED GameLOADED
IF GameLOADED THEN
x = (SquareCOL - 1) * 32 + 173
y = (SquareROW - 1) * 32 + 126
IF OldX THEN LINE (OldX, OldY)-(OldX + 28, OldY + 28), 0, B
LINE (x, y)-(x + 28, y + 28), 14, B
OldX = x
OldY = y
END IF
END SUB
SUB PlayGAME
STATIC Started, Row, Col
SHARED GameLOADED
DO
a$ = UCASE$(INKEY$)
IF LEN(a$) AND Started = 0 THEN
Started = 1
ClearGRID
Row = 1: Col = 1
END IF
SELECT CASE a$
CASE CHR$(27) 'Exit
GET (200, 200)-(440, 240), Box(20000)
DEF SEG = VARSEG(Box(1))
BLOAD "SuDokuQT.BSV", VARPTR(Box(1))
DEF SEG
PUT (200, 200), Box, PSET
DO
a$ = UCASE$(INPUT$(1))
LOOP UNTIL a$ = "Y" OR a$ = "N"
PUT (200, 200), Box(20000), PSET
IF a$ = "Y" THEN SYSTEM
CASE "I": SudokuHELP 'Help
CASE "E", "M", "H"
LoadGRID a$
Row = 1: Col = 1
MoveSQUARE Row, Col
CASE "T": CheckGRID 'Test
CASE "S" 'Save game
DEF SEG = VARSEG(Puzzle(1, 1))
BSAVE "SuDoku.PSD", VARPTR(Puzzle(1, 1)), 162
DEF SEG
GET (200, 230)-(440, 270), Box(20000)
DEF SEG = VARSEG(Box(1))
BLOAD "SuDokuSV.BSV", VARPTR(Box(1))
DEF SEG
PUT (200, 230), Box, PSET
Interval 1.4
PUT (200, 230), Box(20000), PSET
CASE "L" 'Load game
ClearGRID
DEF SEG = VARSEG(Puzzle(1, 1))
BLOAD "SuDoku.PSD", VARPTR(Puzzle(1, 1))
DEF SEG
FOR GridROW = 1 TO 9
FOR GridCOL = 1 TO 9
IF Puzzle(GridROW, GridCOL) <> 0 THEN
IF Puzzle(GridROW, GridCOL) > 100 THEN Style = 0 ELSE Style = 1
PutNUM GridROW, GridCOL, Puzzle(GridROW, GridCOL) MOD 100, Style
END IF
NEXT GridCOL
NEXT GridROW
Row = 1: Col = 1
GameLOADED = 1
MoveSQUARE 1, 1
CASE "C" 'Create puzzle
IF Programming = 1 THEN
Programming = 0
IF Programmed THEN
GET (200, 200)-(440, 240), Box(20000)
DEF SEG = VARSEG(Box(1))
BLOAD "SuDokuPC.BSV", VARPTR(Box(1))
DEF SEG
PUT (200, 200), Box, PSET
Interval 1.4
PUT (200, 200), Box(20000), PSET
Programmed = 0
END IF
ELSE
ERASE Puzzle
ClearGRID
GameLOADED = 1
Row = 1: Col = 1
MoveSQUARE 1, 1
Programming = 1
GET (200, 200)-(440, 240), Box(20000)
DEF SEG = VARSEG(Box(1))
BLOAD "SuDokuMD.BSV", VARPTR(Box(1))
DEF SEG
PUT (200, 200), Box, PSET
Interval 1.4
PUT (200, 200), Box(20000), PSET
END IF
CASE "0" TO "9" 'Numerical entry
IF Programming THEN
IF a$ <> "0" THEN
PutNUM Row, Col, VAL(a$), 0
Puzzle(Row, Col) = VAL(a$) + 100
Programmed = 1
ELSE
PutNUM Row, Col, 1, 4
Puzzle(Row, Col) = 0
END IF
ELSE
IF a$ <> "0" THEN
IF GameLOADED THEN
IF Puzzle(Row, Col) < 100 THEN
Puzzle(Row, Col) = VAL(a$)
PutNUM Row, Col, VAL(a$), 1
END IF
END IF
END IF
END IF
CASE CHR$(0) + "H" 'Up
IF Row > 1 THEN Row = Row - 1: MoveSQUARE Row, Col
CASE CHR$(0) + "P" 'Down
IF Row < 9 THEN Row = Row + 1: MoveSQUARE Row, Col
CASE CHR$(0) + "K" 'Left
IF Col > 1 THEN Col = Col - 1: MoveSQUARE Row, Col
CASE CHR$(0) + "M" 'Right
IF Col < 9 THEN Col = Col + 1: MoveSQUARE Row, Col
END SELECT
IF Started = 0 THEN SparkleGRID
LOOP
END SUB
SUB PrintSTRING (x, y, Prnt$)
FOR i = 1 TO LEN(Prnt$)
Char$ = MID$(Prnt$, i, 1)
IF Char$ = " " THEN
x = x + FontBOX(1)
ELSE
Index = (ASC(Char$) - 33) * FontBOX(0) + 2
PUT (x, y), FontBOX(Index)
x = x + FontBOX(Index)
END IF
NEXT i
END SUB
SUB PutNUM (NRow, NCol, Number, Style)
x = (NCol - 1) * 32 + 179
y = (NRow - 1) * 32 + 127
Index = (Number - 1) * 165 + 1
Index = Index + Style * 1500
PUT (x, y), NumBOX(Index), PSET
END SUB
SUB SetPALETTE (OnOFF)
IF OnOFF = 0 THEN
OUT &H3C8, 0
FOR N = 1 TO 48
OUT &H3C9, 0
NEXT N
ELSE
PALETTE
RESTORE PaletteDATA
FOR Colors = 1 TO 7
READ Attribute
OUT &H3C8, Attribute
FOR Reps = 1 TO 3
READ Intensity
OUT &H3C9, Intensity
NEXT Reps
NEXT Colors
END IF
END SUB
SUB SetSCREEN
DEF SEG = VARSEG(Box(1))
FOR y = 0 TO 320 STEP 160
FileNUM = FileNUM + 1
FileNAME$ = "SuDokuS" + LTRIM$(STR$(FileNUM)) + ".BSV"
BLOAD FileNAME$, VARPTR(Box(1))
PUT (0, y), Box
NEXT y
DEF SEG
DEF SEG = VARSEG(NumBOX(1))
BLOAD "SudokuNM.BSV", VARPTR(NumBOX(1))
DEF SEG
END SUB
SUB SparkleGRID
STATIC Count
Row = FIX(RND * 9) + 1
Col = FIX(RND * 9) + 1
Style = FIX(RND * 4)
IF Style = 3 THEN Style = 4
Count = Count + 1
IF Count = 32000 THEN Count = 0
IF Count MOD 24 = 0 THEN
LINE (166, 119)-(464, 417), FIX(RND * 15) + 1, B
ELSE
COLOR 15
PutNUM Row, Col, Puzzle(Row, Col) MOD 100, Style
END IF
END SUB
SUB SudokuHELP
GET (160, 160)-(470, 310), Box(12000)
FOR Page = 1 TO 4
FileNAME$ = "SuDokuH" + LTRIM$(STR$(Page)) + ".BSV"
DEF SEG = VARSEG(Box(1))
BLOAD FileNAME$, VARPTR(Box(1))
DEF SEG
PUT (160, 160), Box, PSET
a$ = INPUT$(1)
NEXT Page
PUT (160, 160), Box(12000), PSET
END SUB
SUB WonGAME
PLAY "MFMST120O1L16ceg>ceg>ceg>L32cg"
PLAY "MBMST120O4L32cgcgcgcgcgcgcgcgcgc"
FOR Reps = 1 TO 2400
SparkleGRID
NEXT Reps
LoadGRID "10"
END SUB
|