TOUCHSCREEN KEYBOARD OPTIONAL RANDOMIZE TIMER DIM GLOBAL BGPAL(19, 15), ORGINAL_PAL(19, 15) DIM GLOBAL BGFLIP(19, 15), ORGINAL_FLIP(19, 15) DIM GLOBAL BGCHARS(19, 15), ORGINAL_BGCHARS(19, 15) GLOBAL ORGI_VIEW ORGI_VIEW = 0 'USED TO SEE IF THE PIECES ARE IN THEIR ORIGNAL POSITIONS 'USED FOR VIRTUALLY IMPOSSIBLE MODE DIM GLOBAL POSITION(19, 15) CUR_POS = 0 FOR I = 0 TO 15 FOR J = 0 TO 19 POSITION(J, I) = CUR_POS INC CUR_POS NEXT J NEXT I GLOBAL VIR_IMP VIR_IMP = 0 TEXT 0,7,"VIRTUALLY IMPOSSIBLE" TEXT 0,8," MODE? Y/N" K$ = INKEY$ WHILE K$ <> "Y" OR K$ <> "N" K$ = INKEY$ IF K$ = "Y" THEN VIR_IMP = 1 EXIT ELSE IF K$ = "N" THEN EXIT END IF WAIT VBL WEND CLS BG COPY 0,0,20,16 TO 0,0 TAP_AMT = 0 TX1 = 0 TX2 = 0 TY1 = 0 TY2 = 0 FOR I = 0 TO 15 FOR J = 0 TO 19 BGCHARS(J, I) = CELL.C(J, I) ORGINAL_BGCHARS(J, I) = CELL.C(J, I) CALL READBG(J, I) NEXT J NEXT I RESTART: FOR I = 0 TO 1000 BGX1 = RND(18) BGX2 = RND(18) BGY1 = RND(15) BGY2 = RND(15) CALL SWAP_BGDATA(BGX1, BGX2, BGY1, BGY2) NEXT I WAIT 100 CLS FOR I = 0 TO 15 FOR J = 0 TO 19 CALL DRAW_PUZZLE(J, I) WAIT VBL NEXT J NEXT I START = 0 DO K$ = INKEY$ IF K$ = "O" AND ORGI_VIEW = 0 THEN BG COPY 0,0,20,16 TO 0,0 ORGI_VIEW = 1 TAP_AMT = 0 ELSE IF K$ = "P" AND ORGI_VIEW = 1 THEN CLS ORGI_VIEW = 0 FOR I = 0 TO 15 FOR J = 0 TO 19 CALL DRAW_PUZZLE(J, I) NEXT J NEXT I END IF IF TAP AND ORGI_VIEW = 0 THEN IF TAP_AMT = 0 THEN TX1 = TOUCH.X / 8 TY1 = TOUCH.Y / 8 INC TAP_AMT ELSE TX2 = TOUCH.X / 8 TY2 = TOUCH.Y / 8 CALL SWAP_BGDATA(TX1, TX2, TY1, TY2) CALL DRAW_PUZZLE(TX1, TY1) CALL DRAW_PUZZLE(TX2, TY2) TAP_AMT = 0 CALL CHECK END IF END IF WAIT VBL LOOP SUB CHECK CORRECT = 0 IF VIR_IMP = 0 THEN FOR I = 0 TO 15 FOR J = 0 TO 19 IF BGCHARS(J, I) = ORGINAL_BGCHARS(J, I) THEN IF BGFLIP(J, I) = ORGINAL_FLIP(J, I) THEN IF BGPAL(J, I) = ORGINAL_PAL(J, I) THEN INC CORRECT END IF END IF END IF NEXT J NEXT I IF CORRECT = 320 THEN TRACK 0,0 END IF ELSE CUR_POS = 0 FOR I = 0 TO 15 FOR J = 0 TO 19 IF POSITION(J, I) <> CUR_POS THEN EXIT ELSE IF I = 15 AND J = 19 THEN IF POSITION(J, I) = CUR_POS THEN TRACK 0,0 END IF END IF INC CUR_POS NEXT J NEXT I END IF END SUB SUB DRAW_PUZZLE(X, Y) PAL BGPAL(X, Y) IF BGFLIP(X, Y) = 0 THEN FLIP 0,0 ELSE IF BGFLIP(X, Y) = 1 THEN FLIP 1,0 ELSE IF BGFLIP(X, Y) = 2 THEN FLIP 0,1 ELSE IF BGFLIP(X, Y) = 3 THEN FLIP 1,1 END IF CELL X, Y, BGCHARS(X, Y) END SUB SUB SWAP_BGDATA(X1, X2, Y1, Y2) SWAP BGCHARS(X1, Y1), BGCHARS(X2, Y2) SWAP BGPAL(X1, Y1), BGPAL(X2, Y2) SWAP BGFLIP(X1, Y1), BGFLIP(X2, Y2) SWAP POSITION(X1, Y1), POSITION(X2, Y2) END SUB SUB READBG(X, Y) ADR = $9000+64 * Y+2 * X CHRATT = PEEK(ADR + 1) BGPAL(X, Y) = (CHRATT AND %00000111)/1 ORGINAL_PAL(X, Y) = BGPAL(X, Y) BGFLIP(X, Y) = (CHRATT AND %00011000)/8 ORGINAL_FLIP(X, Y) = BGFLIP(X, Y) END SUB #15:MAIN SOUND 2800303A000000001800846C003A0000 08006060000000002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 00404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 400F00450F00410F00400F00450F0041 0F00400F00450F00410F00410F00410F 00400F00400F00FF0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000