1000 'Flipper 05-12-03 (C) Copyright 1010 GOTO 1210 'Begin WhizWare, 2003 1020 SAVE "Flipper":LIST-1210 1030 ON I GOTO 1020,1040,2380 'rem for QB 1040 GOTO 2140 'Time display 1050 GOTO 2170 'GetM Mickey input 1060 GOTO 2290 'Mset Mickey reset 1070 GOTO 2360 'Mick driver interface 1080 GOTO 2410 'Mask screen layout 1090 GOTO 3000 'LED7 clicks display 1100 GOTO 3260 'Play flip/test end 1110 GOTO 3420 'Btns pick options 1120 GOTO 3540 'Demo of solution 1130 GOTO 3700 'Strt init new game 1140 GOTO 3810 'Show tokens fr SC 1150 GOTO 3870 'Save tokens in SC 1160 GOTO 3910 'Grid draw 3/4/5/6 1170 GOTO 4070 'Info display help 1180 GOTO 4200 'Best show/clear 1190 GOTO 4380 'Over end dialog 1200 GOTO 4570 'Type winner ID 1210 DEFSTR M-Z:DEFINT C-L,X-Z:KEY OFF 'Begin 1220 RANDOMIZE TIMER:PLAY "MBT250L9" 1230 SCREEN 9:CLS:COLOR 15,0 '640x350 1240 I=0:C=0:D=0:G=0:L=0:H=0:K=0:X=0:Y=0:B=0 'locals 1250 CQ=0:GQ=0:CP=0 'Col:Char:ColorPt 1260 GX=POINT(0):GY=POINT(1):GM=0 'GetMick 1270 CT=-1:HT=0:IS=1:GS=3 'ClixTotal:HadTotal:IfSound 0/1:GridSize 3/4/5/6 1280 FX=0:FY=0:LX=0:LY=0:DM=0 'FirstX:FirstY:LenX:LenY:DemoMode 1290 QB=SPACE$(36):Q2=MKI$(0) 'for Pick & Type 1300 T1=TIME$:T2=T1:LSET T2="" 1310 SC=SPACE$(36):PC=SC:PD=SC 'SaveColors:ProofColors:PosDemo 1320 PF="Flipper.INI":PI=SPACE$(13) 'ProgFile:PlayerID 1330 DIM G(24) 'Mickey interface 1340 G(0)=&H8EB:G(1)=3:G(5)=&H8957:G(6)=&H8BE7:G(7)=&HFE7D:G(8)=&H458B 1350 G(9)=&H8B02:G(10)=&H45D:G(11)=&H4D8B:G(12)=&H8B06:G(13)=&H855 1360 G(14)=&H33CD:G(15)=&H5D89:G(16)=&H8904:G(17)=&H64D:G(18)=&H5589 1370 G(19)=&H5F08:G(20)=&HCB 1380 DIM L(216):FOR I=0 TO 211:READ L(I):NEXT 'LED data 1390 DIM X(35),Y(35) 'centers of cells 1400 DIM H(300) 'Hold 1410 DIM M(24) 1420 M(1)="by Tom McIntire WhizWare@BellSouth.net" 1430 M(3)="This program may be freely copied with" 1440 M(4)="my compliments. It was written for DOS" 1450 M(5)="but runs on most Windows machines too." 1460 M(6)="Flipper was written in GW-BASIC 3.23," 1470 M(7)="then compiled with QuickBASIC 2.0." 1480 M(9)="Object of game is to flip all tokens" 1490 M(10)="in the grid until they are all the" 1500 M(11)="same color, and do it in as few flips" 1510 M(12)="as you can." 1520 M(14)="Use one of the buttons at the bottom" 1530 M(15)="to set a grid size, then click Start." 1540 M(17)="Click on the name Flipper for a DEMO" 1550 M(18)="that proves each game can be solved." 1560 M(21)=" Scores and options are maintained" 1570 M(22)=" in Flipper.INI (auto-generated)." 1580 M(24)=" Good luck and have fun. TM :-)" 1590 DIM P(29) 'flipper Picture 1600 P(0)="UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTUUUUUUUUUUUUUUUUUUZª©UUUUUUUUUUT" 1610 P(1)="UUUUUUUUUUUUUUUUUj¨2%UUUUUUUUUUTUUUUUUUUUUUUUUUUZ€24•UUUUUUUUUUT" 1620 P(2)="UUUUUUUUUUUUUUUV 22‹UUUUUUUUUUUTUUUUUUUUUUUUUUUh222%UUUUUUUUUUUT" 1630 P(3)="UUUUUUUUUUUUUUV€222•UUUUUUUUUUUTUUUUUUUUUUUUUUh22 4UUUUUUUUUUUUT" 1640 P(4)="UUUUUUUUUUUUUV€22 ‹UUUUUUUUUUUUTUUUUUUUUUUUUUª22Œ2‹UUUUUUUUUUUUT" 1650 P(5)="UUUUUUUUUUUUj€2222‹UUUUUUUUUUUUTUUUUUUUUUUUj€22222‹UUUUUUUUUUUUT" 1660 P(6)="UUUUUUUUUZª€222222‹UUUUUUUUUUUUTUUUUUUUUj 4ªªªª222‹UUUUUUUUUUUUT" 1670 P(7)="UUUUUUUZ Œ 2222ªª24UUUUUUUUUUUUTUUUUUUV¢Œ2222222*ª2¥UUUUUUUUUUUT" 1680 P(8)="UUUUUUh4€22222222Œ¨ŒUUUUUUUUUUUTUUUUUZ€22222222222Œ€¥UUUUUUUUUUT" 1690 P(9)="UUUUU 22222222222222ŒUUUUUUUUUUTUUUUZ2222222222222222¥UUUUUUUUUT" 1700 P(10)="UUUU 22222222*ª¨22222ŒUUUUUUUUUTUUUV222222222ªªª¨22222•UUUUUUUUT" 1710 P(11)="UUUh22222222*ªªªª€2222)UUUUUUUUTUUU€222222222222Œ 22224UUUUUUUUT" 1720 P(12)="UUV22222222222222222222¥UUUUUUUTUUX22222222222222222222‹UUUUUUUT" 1730 P(13)="UU`2*2222222222222222224•UUUUUUTUU`2(2222222222222222222%UUUUUUT" 1740 P(14)="UU€222222222222222222222‹UUUUUUTUU€22222222?þþþª222222224UUUUUUT" 1750 P(15)="UU€22222‘þþþþþþþþþÀ222222•UUUUUTUV22225þþþþþþþþþþþþü22222%UUUUUT" 1760 P(16)="UX222‘þþþþþþþþþþþþþþþÀ222‹UUUUUTUoð22‘þþþþþþþþþþþþþþþþÀ224UUUUUT" 1770 P(17)="U¿þÀ2?þþþþþþþþþþþþþþþþþÀ22•UUUUTVþþþþþþü222?þþþþþþþþþþþþÀ2%UUUUT" 1780 P(18)="[þÃþþþþð222?þþþþþþþþþþþþü2ŒUUUUToþ‘þþþþü222‘þþþþþþþþþþþþþÀ2ªªUUT" 1790 P(19)="oðþªª«þþÀ222ªªªªªªªª¯þþþþü224©UToʪUUZªªª222•UUUUUUUZªª«þþ2224•T" 1800 P(20)="Z©UUUUUUU€22%UUUUUUUUUUVªþ2222)TUUUUUUUUU`22ŒUUUUUUUUUUUVª22224”" 1810 P(21)="UUUUUUUUUX222¥UUUUUUUUUUUV22222$UUUUUUUUUV222ŒUUUUUUUUUUUU€222ª¨" 1820 P(22)="UUUUUUUUUU€222ªUUUUUUUUUUU€22ŒUTUUUUUUUUUU`2222©UUUUUUUUUU€2Œ¥UT" 1830 P(23)="UUUUUUUUUUZ€222ªUUUUUUUUUU€2%UUTUUUUUUUUUUUª 4ªUUUUUUUUUUU€2%UUT" 1840 P(24)="UUUUUUUUUUUUj©UUUUUUUUUUUU€2%UUTUUUUUUUUUUUUUUUUUUUUUUUUUU€2%UUT" 1850 P(25)="UUUUUUUUUUUUUUUUUUUUUUUUUU€2•UUTUUUUUUUUUUUUUUUUUUUUUUUUUU€2•UUT" 1860 P(26)="UUUUUUUUUUUUUUUUUUUUUUUUUU€2•UUTUUUUUUUUUUUUUUUUUUUUUUUUUU`2•UUT" 1870 P(27)="UUUUUUUUUUUUUUUUUUUUUUUUUU`2•UUTUUUUUUUUUUUUUUUUUUUUUUUUUUX4UUUT" 1880 P(28)="UUUUUUUUUUUUUUUUUUUUUUUUUUV4UUUTUUUUUUUUUUUUUUUUUUUUUUUUUUU‚UUUT" 1890 P(29)="UUUUUUUUUUUUUUUUUUUUUUUUUUUbUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUZUUUT" 1900 FOR I=0 TO 29:FOR L=1 TO 64:H=ASC(MID$(P(I),L)) 1910 IF H=254 THEN MID$(P(I),L)=CHR$(255) 1920 IF H>49 AND H<54 THEN MID$(P(I),L)=CHR$(H-50) 1930 IF H>138 AND H<146 THEN MID$(P(I),L)=CHR$(H-130) 1940 NEXT:NEXT 1950 DIM W(40) 'Winners 1960 W(0)="-13 Flipper Top 10 Scores " 1970 W(1)=" 0000 ............. mm-dd-yy hh:mm:ss" 1980 FOR I=2 TO 40:W(I)=W(1):NEXT 1990 OPEN PF AS 1 LEN=42:FIELD 1,40 AS WF,2 AS WC:I=LOF(1) 2000 WHILE I=0:LSET WF=W(0):LSET WC=MKI$(2573):PUT 1 2010 FOR I=1 TO 40:LSET WF=W(I):PUT 1:NEXT:WEND 2020 GET 1,1:IS=ASC(MID$(WF,2))-48:GS=ASC(MID$(WF,3))-48 'Sound:Grid 2030 FOR I=1 TO 40:GET 1:LSET W(I)=WF:NEXT:CLOSE:RESET 2040 GOSUB 1080:GOSUB 1160:GOSUB 1060 'Mask:Grid:Mset 2050 WHILE G(2) 'mainline loop 2060 GOSUB 1090 'LED7 2070 GOSUB 1050 'Mget 2080 IF CP=6 THEN GOSUB 1110 ELSE GOSUB 1100 'Btns or Play 2090 WEND 'end program 2100 OPEN PF AS 1 LEN=42:FIELD 1,40 AS WF:GET 1,1 2110 MID$(WF,2)=HEX$(IS):MID$(WF,3)=HEX$(GS) 'Sound:GS 2120 PUT 1,1:FOR I=1 TO 40:LSET WF=W(I):PUT 1:NEXT:CLOSE:RESET 2130 END 'exit 2140 'Time 2150 LSET T1=TIME$:IF T1<>T2 THEN LOCATE 12,65:PRINT T1;:LSET T2=T1 2160 RETURN 2170 'GetM 2180 CP=0:LSET Q2=MKI$(0) 2190 WHILE CP=0:GOSUB 1040 'Time 2200 G(1)=1:GOSUB 1070:G(1)=3:GOSUB 1070:CP=G(2) 'Mick On:Stat 2210 MID$(Q2,1)=INKEY$:IF ASC(Q2)=27 THEN CP=2 2220 WEND:GX=G(3):GY=G(4):IF CP=2 THEN GOSUB 1060:GOTO 2170 'Mset 2230 G(1)=3:WHILE G(2):GOSUB 1070:WEND 'Mick wait for release 2240 G(1)=2:GOSUB 1070:G(2)=1 'Mick Off 2250 CQ=GX/8:L=(GY-5)/14+1:GQ=SCREEN(L,CQ) 2260 CP=POINT(GX,GY):IF CP=15 THEN GY=GY+1:GOTO 2260 2270 IF IS THEN SOUND 200,.3 2280 RETURN 2290 'Mset 2300 G(1)=0:GOSUB 1070 'Mick RST 2310 G(1)=26:G(2)=80:G(3)=80:G(4)=50:GOSUB 1070 'Mick Speed 2320 G(1)=1:GOSUB 1070 'Mick ON 2330 G(1)=4:G(3)=GX:G(4)=GY:GOSUB 1070 'Mick POS 2340 G(1)=2:GOSUB 1070:G(1)=3 'OFF 2350 RETURN 2360 'Mick 2370 GM=VARPTR(G(0)) 2380 CALL GM:GOTO 2400 ' 'GW 2390 CALL ABSOLUTE(GM) ' 'QB 2400 RETURN 2410 'Mask 2420 L=480:D=20:X=L:Y=D 'flipper image 2430 FOR I=0 TO 29:FOR C=1 TO 64:H=ASC(MID$(P(I),C)) 2440 G=H\64:IF G=2 THEN G=7 ELSE IF G=3 THEN G=15 2450 PSET(X,Y),G:X=X+1:H=H AND &H3F 2460 G=H\16:IF G=2 THEN G=7 ELSE IF G=3 THEN G=15 2470 PSET(X,Y),G:X=X+1:H=H AND &HF 2480 G=H\4:IF G=2 THEN G=7 ELSE IF G=3 THEN G=15 2490 PSET(X,Y),G:X=X+1:H=H AND &H3 2500 G=H:IF G=2 THEN G=7 ELSE IF G=3 THEN G=15 2510 PSET(X,Y),G:X=X+1:IF X>L+127 THEN X=L:Y=Y+1 2520 NEXT:NEXT:LINE(L-1,D-1)-STEP(128,61),1,B:PAINT(0,0),1 2530 C=0:PRINT "Flipper" 'flipper name 2540 FOR X=0 TO 56:L=20:FOR Y=0 TO 13:I=POINT(X,Y) 2550 WHILE I=15:PSET(X+C,Y+L),I:PSET(X+C+1,Y+L),I 2560 PSET(X+C,Y+L+1),I:PSET(X+C+1,Y+L+1),I:I=0 2570 WEND:L=L+1 2580 NEXT:C=C+1:NEXT 2590 LINE(496,96)-STEP(117,0),0:LINE(471,123)-STEP(117,0),0 'p/gram 2600 LINE(496,97)-(471,122),0:LINE(613,97)-(588,122),0 2610 C=23:PAINT(497,98),6,0 'fill brown 2620 FOR X=0 TO 110:L=75:D=500:FOR Y=C TO C+22:I=POINT(X,Y) 2630 WHILE I=15:PSET(X+D,Y+L),I:I=0:WEND:D=D-1 2640 NEXT:NEXT:LINE(0,0)-STEP(120,50),1,BF 'clear u/left corner 2650 D=38:C=0:Y=48:L=4 'top buttons 2660 X=90:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2670 LOCATE L,10:PRINT "Exit" 2680 GET(X-22,Y-7)-STEP(50,13),H:PAINT(X,Y),6,6:PUT(X-19,Y-7),H,OR 2690 X=240:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2700 LOCATE L,29:PRINT "Info" 2710 GET(X-20,Y-7)-STEP(50,13),H:PAINT(X,Y),6,6:PUT(X-20,Y-7),H,OR 2720 X=400:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2730 LOCATE L,49:PRINT "Start" 2740 GET(X-20,Y-7)-STEP(50,13),H:PAINT(X,Y),6,6:PUT(X-23,Y-7),H,OR 2750 D=38:Y=300:L=22 'bottom buttons 2760 X=90:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2770 LOCATE L,10:PRINT "3 x 3" 2780 GET(X-20,Y-7)-STEP(50,13),H:PAINT(X,Y),6,6:PUT(X-22,Y-7),H,OR 2790 X=240:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2800 LOCATE L,28:PRINT "4 x 4" 2810 GET(X-24,Y-7)-STEP(50,13),H:PAINT(X,Y),6,6:PUT(X-19,Y-7),H,OR 2820 X=400:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2830 LOCATE L,49:PRINT "5 x 5" 2840 GET(X-24,Y-7)-STEP(54,13),H:PAINT(X,Y),6,6:PUT(X-27,Y-7),H,OR 2850 X=550:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2860 LOCATE L,67:PRINT "6 x 6" 2870 GET(X-24,Y-7)-STEP(54,13),H:PAINT(X,Y),6,6:PUT(X-21,Y-7),H,OR 2880 D=38:X=90 'left buttons 2890 Y=132:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2900 LOCATE 10,9:PRINT "Best10" 2910 GET(X-26,Y-7)-STEP(54,13),H:PAINT(X,Y),6,6:PUT(X-24,Y-7),H,OR 2920 Y=216:CIRCLE(X,Y),D,C,,,.4:PAINT(X,Y),6,C 2930 LOCATE 16,10:PRINT "Sound" 2940 GET(X-26,Y-7)-STEP(54,13),H:PAINT(X,Y),6,6:PUT(X-27,Y-7),H,OR 2950 D=38:C=7:X=576 'right side 2960 LINE(503,150)-STEP(81,20),2,BF '122 'current time box 2970 LINE(506,152)-STEP(75,16),0,BF 2980 C=498:L=198:LINE(C-4,L-4)-STEP(99,42),0,BF 'clicks box 2990 RETURN 3000 'LED7 3010 D=10:C=498:L=198:I=CT 3020 IF I<0 THEN 3080 ELSE IF I=0 THEN C=570:GOTO 3090 3030 IF CT>9999 THEN CT=0:HT=9999 'overflow 3040 LSET QB=STR$(I+10000):MID$(QB,10)=STR$(HT+10000) 3050 FOR H=3 TO 6:I=VAL(MID$(QB,H,1)):G=VAL(MID$(QB,9+H,1)) 3060 IF I=G THEN GOSUB 3240 ELSE GOSUB 3090 3070 NEXT:HT=CT:GOTO 3250 3080 FOR I=0 TO 3:PUT(C,L),L,PSET:C=C+24:NEXT:GOTO 3250 'Init 0000 3090 PUT(C,L),L,PSET '18x34 3100 ON I+1 GOTO 3120,3180,3190,3140,3170,3200,3210,3150,3110,3160 3110 PAINT(C+9,L+17),D,0 '8 3120 PAINT(C+2,L+10),D,0:PAINT(C+2,L+20),D,0 '0 3130 PAINT(C+9,L+32),D,0:GOTO 3150 3140 PAINT(C+9,L+17),D,0:PAINT(C+9,L+32),D,0 '3 3150 PAINT(C+9,L+2),D,0:GOTO 3180 '7 3160 PAINT(C+9,L+2),D,0:PAINT(C+9,L+32),D,0 '9 3170 PAINT(C+2,L+10),D,0:PAINT(C+9,L+17),D,0 '4 3180 PAINT(C+16,L+10),D,0:PAINT(C+16,L+20),D,0:GOTO 3240 '1 3190 PAINT(C+16,L+10),D,0:PAINT(C+2,L+20),D,0:GOTO 3230 '2 3200 PAINT(C+2,L+10),D,0:PAINT(C+16,L+20),D,0:GOTO 3230 '5 3210 PAINT(C+2,L+10),D,0:PAINT(C+16,L+20),D,0 '6 3220 PAINT(C+2,L+20),D,0 3230 PAINT(C+9,L+2),D,0:PAINT(C+9,L+17),D,0:PAINT(C+9,L+32),D,0 3240 C=C+24 3250 RETURN 3260 'Play 3270 IF CP-12 THEN IF CP-14 THEN 3410 'nope 3280 X=GX:Y=GY 'find up/left corner of cell 3290 WHILE POINT(X,Y)-7:X=X-1:WEND:X=X+1 3300 WHILE POINT(X,Y)-7:Y=Y-1:WEND:X=X-1 3310 C=LX\2:L=LY\2:X=X+C:Y=Y+L 'get center of cell 3320 LSET QB="":H=GS*GS-1 'flip row 3330 FOR I=0 TO H:C=POINT(X(I),Y(I)) XOR 2 3340 IF X(I)=X THEN PAINT(X(I),Y(I)),C,8:MID$(QB,I+1)=HEX$(C):CT=CT+1 3350 NEXT 3360 FOR I=0 TO H:C=POINT(X(I),Y(I)) XOR 2 3370 IF Y(I)=Y AND ASC(MID$(QB,I+1))=32 THEN PAINT(X(I),Y(I)),C,8:CT=CT+1 3380 NEXT:C=POINT(X(0),Y(0)) 3390 FOR I=1 TO H:IF C-POINT(X(I),Y(I)) THEN I=98 3400 NEXT:IF I<99 THEN GOSUB 1190 'Over 3410 RETURN 3420 'Btns 3430 C=CQ:L=GY\14+1:I=INSTR("1357",HEX$(L\3)) 3440 IF L<10 AND C>57 THEN GOSUB 1120:GOTO 3530 'Demo 3450 ON I GOTO 3460,3490,3500,3510 'lines = 3/9/15/21 3460 IF C<20 THEN G(2)=0:GOTO 3530 'Exit 3470 IF C<40 THEN GOSUB 1170:GOTO 3530 'Info 3480 GOSUB 1130:GOTO 3530 'Strt 3490 GOSUB 1180:GOTO 3530 'Best 3500 IS=IS XOR 1:GOTO 3530 'sound on/off 3510 I=6:IF C<20 THEN I=3 ELSE IF C<40 THEN I=4 ELSE IF C<60 THEN I=5 3520 IF I-GS THEN GS=I:GOSUB 1160:LSET PD="" 'Grid 3530 RETURN 3540 'Demo 3550 LINE(76,320)-STEP(480,18),0,BF:DM=1:LOCATE 24,11 3560 PRINT " DEMO MODE ³ End Demo³ Continue³ Starting Grid"; 3570 IF ASC(PD)=32 THEN GOSUB 1130 ELSE LSET SC=PC:GOSUB 1140 'Start:Show 3580 CT=-1:HT=0:GOSUB 1090:CT=0:GQ=INSTR(PD," ")-1:GOSUB 1090 'LED7 3590 GOSUB 3680:IF ASC(Q2)=27 THEN 3670 'pause 3600 LOCATE 24,56:PRINT " Click #";DM;TAB(70);:DM=DM+1 3610 C=ASC(MID$(PD,GQ))-64:GX=X(C):GY=Y(C):CP=POINT(GX,GY):GQ=GQ-1 3620 PSET(GX,GY),CP 'center of box 3630 DRAW "l8u8c0f16rh16br16g16le16" 3640 GOSUB 3680:IF ASC(Q2)=27 THEN 3670 3650 PAINT(GX,GY),CP,CP:GOSUB 1100:GOSUB 1090 'Play:LED7 3660 IF DM=0 THEN GOSUB 3680 ELSE IF ASC(Q2)-27 THEN 3600 3670 CT=-1:DM=0:LINE(76,320)-STEP(480,18),1,BF:GOSUB 1160:GOTO 3690 'Grid 3680 LSET Q2=MKI$(0):WHILE CVI(Q2)=0:GOSUB 1040:MID$(Q2,1)=INKEY$:WEND 'Time 3690 RETURN 3700 'Strt 3710 CQ=76:IF RND*10>4 THEN CQ=78 3720 GQ=GS*GS:LSET SC=STRING$(GQ,CQ) '64+12 or 14 (colors) 3730 GOSUB 1140 'Show 3740 FOR HT=1 TO GS-1 3750 I=RND*(GQ-1):IF ASC(MID$(SC,I+1))=(CQ XOR 2) THEN 3750 3760 MID$(PD,HT)=CHR$(I+64):GX=X(I):GY=Y(I):CP=CQ-64:GOSUB 1100 'Play 3770 GOSUB 1150 'Save 3780 NEXT:LSET PC=SC:I=INSTR(PD," ")-1:C=GS+GS-1 3790 CT=-1:HT=0:GOSUB 1090:CT=0 'LED7 3800 RETURN 3810 'Show 3820 H=GS*GS-1:D=116\GS 'cells:radius of tokens 3830 FOR I=0 TO H:X=X(I):Y=Y(I) 3840 C=ASC(MID$(SC,I+1))-64:CIRCLE(X,Y),D,8:PAINT(X,Y),C,8 3850 NEXT 3860 RETURN 3870 'Save 3880 H=GS*GS-1 3890 FOR I=0 TO H:C=POINT(X(I),Y(I)):MID$(SC,I+1)=CHR$(C+64):NEXT 3900 RETURN 3910 'Grid 3920 FX=188:FY=78:C=260:L=194:I=GS:GS=ABS(GS):IF I>0 THEN CT=-1:HT=0 3930 LINE(FX,FY)-STEP(C,L),1,BF 'erase old grid 3940 LX=C\GS:LY=L\GS:C=LX*GS:L=LY*GS 3950 LINE(FX,FY)-STEP(C,L),0,BF 'clear for new grid 3960 Y=FY:FOR I=0 TO GS:LINE(FX,Y)-STEP(C,0),7:Y=Y+LY:NEXT 3970 X=FX:FOR I=0 TO GS:LINE(X,FY)-STEP(0,L),7:X=X+LX:NEXT 3980 X=FX+1:H=0:C=LX\2-1:L=LY\2 'gen cell centers 3990 FOR G=1 TO GS:Y=FY+L 4000 FOR I=1 TO GS:X(H)=X+C:Y(H)=Y:H=H+1:Y=Y+LY:NEXT:X=X+LX 4010 NEXT:I=ASC(MID$(" (3BU",GS))-30 4020 LOCATE 19,66:PRINT USING "Par=##";I; 4030 GET(520,254)-STEP(47,11),H 4040 LINE(519,252)-STEP(53,13),1,BF 4050 PUT(520,254),H,XOR 4060 RETURN 4070 'Info 4080 IF CT>-1 THEN GOSUB 1150 'Save 4090 LINE(138,77)-STEP(333,204),0,BF 'clear box 4100 LINE(138,77)-STEP(333,204),4,B ' outline box 4110 H=13:LOCATE 20,23:PRINT "ÛÛ Page ";MKI$(6424);" ÛÛ OK"; 4120 H=H XOR 12:I=H 4130 FOR L=7 TO 18:LOCATE L,20:PRINT M(I);TAB(59);:I=I+1:NEXT 4140 GOSUB 1050:IF CP THEN 4140 ELSE IF GQ-219 THEN 4140 'GetM 4150 IF CQ<40 THEN 4120 4160 LINE(138,77)-STEP(333,204),1,BF 'clear box 4170 GS=-GS:GOSUB 1160 'Grid 4180 IF CT>-1 THEN GOSUB 1140 'Show 4190 RETURN 4200 'Best 4210 IF CT>-1 THEN GOSUB 1150 'Save 4220 LINE(138,77)-STEP(333,204),0,BF 'clear box 4230 LINE(138,77)-STEP(333,204),4,B 'outline box 4240 LOCATE 7,20:PRINT "Best 10 of";GS;"x";GS;"Games" 4250 LOCATE 7,44:PRINT "date time ";:C=GS*10-29 4260 FOR I=1 TO 10:LOCATE 8+I,20:PRINT USING "## ";I; 4270 PRINT USING "####";VAL(MID$(W(C),3,5));:PRINT MID$(W(C),8);:C=C+1 4280 NEXT 4290 LOCATE 20,23:PRINT "ÛÛ Clear all scores ÛÛ OK"; 4300 GOSUB 1050:IF CP THEN 4140 ELSE IF GQ-219 THEN 4140 'GetM 4310 IF CQ>40 THEN 4340 4320 MID$(W(1),3)=" 0000 ............. mm-dd-yy hh:mm:ss" 4330 FOR I=2 TO 40:LSET W(I)=W(1):NEXT:GOTO 4240 4340 LINE(138,77)-STEP(333,204),1,BF 'clear box 4350 GS=-GS:GOSUB 1160 'Grid 4360 IF CT>-1 THEN GOSUB 1140 'Show 4370 RETURN 4380 'Over 4390 GOSUB 1090:IF IS THEN PLAY "N30N60N20N50" 'LED7 4400 LINE(276,144)-STEP(87,74),2,BF:LINE(276,144)-STEP(87,74),0,B 4410 LOCATE 12,37:PRINT " ";:LOCATE 15,37:PRINT " "; 4420 LOCATE 13,37:PRINT " GAME ";:LOCATE 14,37:PRINT " OVER "; 4430 L=GS*10-29:IF DM THEN DM=0:GOTO 4560 4440 FOR I=0 TO 9:H=VAL(MID$(W(L+I),4,4)) 4450 IF H=0 OR CT<=H THEN C=I:I=99 4460 NEXT:IF I>90 THEN RSET QB=STR$(CT) ELSE GOSUB 1050:GOTO 4550 'GetM 4470 FOR I=9 TO C+1 STEP-1:LSET W(L+I)=W(L+I-1):NEXT:C=C+L 'shift down 4480 MID$(W(C),4)=RIGHT$(QB,4):MID$(W(C),23)=SPACE$(17) 4490 MID$(W(C),23)=DATE$:MID$(W(C),29)=MID$(W(C),31,4):MID$(W(C),32)=TIME$ 4500 LOCATE 13,37:PRINT " TYPE ";:LOCATE 14,37:PRINT " NAME "; 4510 LINE(245,204)-STEP(149,26),2,BF:LINE(245,204)-STEP(149,26),0,B 4520 LOCATE 16,33:PRINT " ";PI;" " 4530 LOCATE 16,34:LSET QB=PI:CP=C:GOSUB 1200 'Type 4540 LSET PI=QB:MID$(W(CP),9)=PI 4550 CT=0:GOSUB 1160 'Grid 4560 RETURN 4570 'Type 4580 L=CSRLIN:C=POS(0):K=C:D=LEN(PI):G=D+C-1:I=3:GOTO 4770 4590 K=K+(K>G)-(KC):LOCATE L,K '8=backsp 4730 FOR I=K+1 TO G:PRINT CHR$(SCREEN(L,I));:NEXT 'S=Del 4740 LOCATE L,G:PRINT " ";:I=0:GOTO 4590 4750 I=I XOR 3:GOTO 4590 'R=Ins 4760 K=C:I=0:GOTO 4590 'G=home 4770 K=G:WHILE SCREEN(L,K)=0 OR SCREEN(L,K)=32:K=K-1:WEND 'O=End 4780 K=K+1:I=0:GOTO 4590 4790 LSET QB="":FOR I=1 TO D:MID$(QB,I)=CHR$(SCREEN(L,I+C-1)):NEXT '13=Ent 4800 I=INSTR(QB,CHR$(0)):IF I THEN MID$(QB,I)=" ":GOTO 4800 4810 WHILE ASC(QB)=32 AND LEFT$(QB,D)>SPACE$(D):LSET QB=MID$(QB,2,D):WEND 4820 RETURN 4830 '7-segment LED mask, gray on black 4840 DATA 19,35,,,,,32512,-16129,,,,,-16640,-24321,,,,,-8448,24831 4850 DATA ,,,,-4352,-7938,,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191 4860 DATA ,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191 4870 DATA ,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191 4880 DATA ,,,,-4352,-7938,,,,,-8448, 24831,,,,,16128,-32513,,,,,-8448 4890 DATA 24831,,,,,-4352,-7938,,,,,-4096,-8191,,,,,-4096,-8191 4900 DATA ,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191 4910 DATA ,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191,,,,,-4096,-8191 4920 DATA ,,,,-4096,-8191,,,,,-4352,-7938,,,,,-8448,24831,,,,,-16640 4930 DATA -24321,,,,,32512,-16129