FONT 0 GAMEPAD 1 PLAY 0,61,15 PLAY 1,56,15 PLAY 2,53,15 PLAY 3,49,15 PRINT PRINT " SUDOKU" PRINT PRINT " BY WAS8BIT" PRINT PRINT PRINT "______________" PRINT PRINT " UP = EZ" PRINT PRINT " DOWN = HARD" PRINT PRINT "______________" DIFF=27 WHILE NOT UP(0) AND NOT DOWN(0) IF UP(0) THEN DIFF=35 ELSE IF DOWN(0) THEN DIFF=17 WEND PAUSE OFF GAMEPAD 2 RANDOMIZE TIMER FONT 0 GLOBAL IOK,PX,PY,MODE DIM GLOBAL GRID(9,9),PGRID(9),CRYPT(9),SHOW(9,9),GUESS(9,9) FOR I=1 TO 9 READ PGRID(I) NEXT I DATA 4,5,6,8,9,10,12,13,14 MODE=0 '________________________________________ ' ' SUDOKU ' ' WAS8BIT ' ' PAUSE BUTTON TOGGLES BETWEEN ' 1 OR 2 CONTROLLERS ' '________________________________________ BG 0 BG COPY 0,0,20,16 TO 0,0 TEXT 2,1,"GENERATING GRID" RESET: FOR Y=1 TO 9 FOR X=1 TO 9 GRID(X,Y)=0 SHOW(X,Y)=0 GUESS(X,Y)=0 NEXT X NEXT Y PLAY 1,20,90 FOR Y=1 TO 9 IRESEARCH=0 PLAY 1,40+Y,15 PLAY 2,41+Y,15 PLAY 3,42+Y,15 REMAX=5+Y FOR X=1 TO 9 IOK=0 ISEARCH=0 WHILE IOK=0 GRID(X,Y)=RND(8)+1 CALL CHECKGRID(X,Y) CALL PRINTGRID WAIT VBL INC ISEARCH TRACE ISEARCH IF ISEARCH>50 AND IRESEARCH>REMAX THEN GOTO RESET IF ISEARCH>50 THEN ISEARCH=0 INC IRESEARCH FOR IX=0 TO 9 GRID(IX,Y)=0 CALL PRINTGRID WAIT VBL NEXT IX X=0 END IF PLAY 0,45+ISEARCH,1 WEND WAIT 15 NEXT X NEXT Y FOR I=1 TO 60 IF RND(1)=0 THEN CALL XSWAP ELSE CALL YSWAP CALL PRINTGRID WAIT VBL NEXT I FOR I=1 TO 9 CRYPT(I)=I NEXT I FOR I=1 TO 60 S1=0 S2=0 WHILE S1=S2 S1=RND(8)+1 S2=RND(8)+1 WEND SWAP CRYPT(S1),CRYPT(S2) NEXT I FOR Y=1 TO 9 FOR X=1 TO 9 TEXT PGRID(X),PGRID(Y)," " G=GRID(X,Y) GRID(X,Y)=CRYPT(G) NEXT X NEXT Y WAIT VBL FOR I=1 TO DIFF S=99 WHILE S<>0 X=RND(8)+1 Y=RND(8)+1 S=SHOW(X,Y) WEND SHOW(X,Y)=GRID(X,Y) NEXT I CALL SHOWSINGLE CALL PRINTGAME BG 1 PX=1 PY=1 PAL 4 TEXT PGRID(PX),PGRID(PY),"@" PLAY 0,61,15 PLAY 1,56,15 PLAY 2,53,15 PLAY 3,49,15 DO IF PAUSE THEN CALL DOPAUSE IF NOT BUTTON(0,1) THEN IF RIGHT(0) AND PX<9 THEN CALL PMOVE(PX,PY,1,0) IF LEFT(0) AND PX>1 THEN CALL PMOVE(PX,PY,-1,0) IF UP(0) AND PY>1 THEN CALL PMOVE(PX,PY,0,-1) IF DOWN(0) AND PY<9 THEN CALL PMOVE(PX,PY,0,1) END IF IF BUTTON(0,0) AND SHOW(PX,PY)=0 THEN CALL PGUESS(1) IF MODE=1 THEN IF BUTTON(1,0) THEN CALL HELP IF BUTTON(1,1) THEN CALL CHEAT ELSE IF MODE=0 THEN IF BUTTON(0,1) AND DOWN(0) THEN CALL HELP IF BUTTON(0,1) AND UP(0) THEN CALL CHEAT END IF WAIT VBL LOOP SUB DOPAUSE IF MODE=0 THEN CALL SHOWDOUBLE MODE=1 GAMEPAD 2 FOR S=0 TO 30 PLAY 0,30+S WAIT VBL NEXT S ELSE IF MODE=1 THEN MODE=0 CALL SHOWSINGLE GAMEPAD 1 FOR S=30 TO 0 STEP -1 PLAY 0,30+S WAIT VBL NEXT S END IF WAIT 60 END SUB SUB SHOWDOUBLE CALL CLEARTOP TEXT 0,0,"PAD=CUR " TEXT 0,2," A = :< 1" TEXT 13,2,"A=HELP" TEXT 13,0,"B=CHEAT" PAL 1 TEXT 8,0,"PAUZ" TEXT 8,1,"MODE" TEXT 8,2," 1" END SUB SUB SHOWSINGLE CALL CLEARTOP TEXT 0,0,"PAD=CUR" TEXT 0,2," A = :<" TEXT 13,2,"B:DN=H" TEXT 13,0,"B:UP=C" PAL 1 TEXT 8,0,"PAUZ" TEXT 8,1,"MODE" TEXT 8,2," 2" END SUB SUB CLEARTOP BG 0 PAL 0 TEXT 0,0," " TEXT 0,1," " TEXT 0,2," " END SUB SUB HELP G=GUESS(PX,PY) S=GRID(PX,PY) IF SHOW(PX,PY)=0 AND G>0 THEN BG 0 IF G<>S THEN PAL 3 ELSE PAL 2 TEXT PGRID(PX),PGRID(PY),STR$(G) END IF PLAY 0,80,5 WAIT 15 END SUB SUB CHEAT SHOW(PX,PY)=GRID(PX,PY) CALL PRINTGAME PLAY 0,90,15 WAIT 15 END SUB SUB PGUESS(I) G=GUESS(PX,PY) G=(G+I+10) MOD 10 GUESS(PX,PY)=G CALL PRINTGAME PLAY 0,75,5 WAIT 15 END SUB SUB PMOVE(X,Y,DX,DY) X=X+DX Y=Y+DY BG 1 CLS 1 BG 1 PAL 4 TEXT PGRID(PX),PGRID(PY),"@" PLAY 0,70,5 WAIT 15 END SUB SUB PRINTGAME BG 0 FOR Y=1 TO 9 FOR X=1 TO 9 SG=SHOW(X,Y) GG=GUESS(X,Y) IF SG>0 THEN PAL 0 TEXT PGRID(X),PGRID(Y),STR$(SG) ELSE IF GG>0 THEN PAL 1 TEXT PGRID(X),PGRID(Y),STR$(GG) ELSE TEXT PGRID(X),PGRID(Y)," " END IF NEXT X NEXT Y END SUB SUB XSWAP X1=0 X2=0 S=RND(2)*3+1 WHILE X1=X2 X1=RND(2)+S X2=RND(2)+S WEND FOR Y=1 TO 9 SWAP GRID(X1,Y),GRID(X2,Y) NEXT Y END SUB SUB YSWAP Y1=0 Y2=0 S=RND(2)*3+1 WHILE Y1=Y2 Y1=RND(2)+S Y2=RND(2)+S WEND FOR X=1 TO 9 SWAP GRID(X,Y1),GRID(X,Y2) NEXT X END SUB SUB CHECKGRID(X,Y) IOK=-1 FOR IX=1 TO 9 IF IX<>X AND GRID(X,Y)=GRID(IX,Y) THEN IOK=0 NEXT IX FOR IY=1 TO 9 IF IY<>Y AND GRID(X,Y)=GRID(X,IY) THEN IOK=0 NEXT IY SX=((X-1)\3)*3+1 SY=((Y-1)\3)*3+1 FOR IY=SY TO SY+2 FOR IX=SX TO SX+2 IF (IX<>X OR IY