1 REM ****************************************** 2 REM Leakage 4 REM Developed by Tim Surtell and David Edwards 5 REM ****************************************** 6 REM NC200 Version 1 : 11/96 7 REM Downloaded from Tim's NC Users' Site 8 REM http://www.ncus.org.uk 40 REM Created by Timothy Surtell and David Edwards 60 REM 70 ONERRORREPORT:PRINT" at line ";ERL:OSCLI("ESCON"):END 80 OSCLI("ESCOFF") 90 DIMicon(17,9),cvrd(17,9),leadnom$(6),leadscr(6),level(100),wx(4),wy(4),wgx(4),wgy(4),wdx(4),wdy(4) 100 CLS 110 PROCborder(0,1,479,127) 120 PRINTTAB(35,3)CHR$17"L e a k a g e"CHR$18 130 PROClogo(170,84) 140 PROCborder(100,10,380,60) 150 PRINTTAB(18,10)"Created by Timothy Surtell and David Edwards"TAB(25,12)"Programming by Timothy Surtell" 160 FORI=1TO27 170 READnote,length 180 SOUND1,0,note*4+96,length*16 190 NEXT 200 PROCdrip(188,95) 210 PROCborder(190,50,290,68):PRINTTAB(33,8)"Please wait..." 220 K=OPENIN("LEVELS.PIP") 230 pntr=1:REPEAT:INPUT#K,level(pntr):pntr=pntr+1:UNTILEOF#K 240 CLOSE#0 250 K=OPENIN("HISCORE.PIP") 260 FORI=1TO5:INPUT#K,leadnom$(I),leadscr(I):NEXT 270 CLOSE#0 280 CLS 290 PROCborder(0,1,479,127):PROClogo(100,84) 300 PROCborder(20,60,160,75):PROCborder(170,44,310,59):PROCborder(320,28,460,43) 310 PRINTTAB(33,3)"---Options---"TAB(8,7)CHR$17"S"CHR$18"tart the game"TAB(29,9)CHR$17"V"CHR$18"iew the league table"TAB(58,11)CHR$17"Q"CHR$18"uit the game" 320 REPEAT:G$=GET$:UNTILG$="S"ORG$="Q"ORG$="V"ORG$=CHR$17 330 IFG$="S"PROCgame:GOTO280 340 IFG$="Q"PROCquit:GOTO280 350 IFG$="V"PROCleague:GOTO280 360 IFG$=CHR$17 OSCLI("ESCON"):END 370 DEF PROCgame 380 level=1:score=0:pscore=0:pntr=1 390 CLS 400 PROCborder(0,1,479,127) 410 FORX=1TO17:FORY=1TO9:PLOT69,RND(471)+4,RND(119)+4:icon(X,Y)=0:cvrd(X,Y)=0:NEXT:NEXT 420 water=1:CX=9:CY=5:GX=240:GY=64:sandleft=10:start=FALSE:rand=RND(7):FORI=1 TO 4:wdx(I)=1:wdy(I)=0:NEXT:eflag=1:k=1 430 num=level(pntr):pntr=pntr+1:numstrt=level(pntr):pntr=pntr+1 440 IFnum=0level=0:PROClose:ENDPROC 450 PROCborder(125,5,355,123) 460 FORX=1TO238STEP14:MOVEX+127,8:PLOT21,X+127,120:NEXT:FORY=1TO120STEP14:MOVE128,Y+7:PLOT21,351,Y+7:NEXT 470 FORI=1TOnum 480 REPEAT:X=RND(14)+1:Y=RND(6)+1:UNTILicon(X-1,Y)=0ANDicon(X+1,Y)=0ANDicon(X,Y-1)=0ANDicon(X,Y+1)=0ANDicon(X,Y)=0ANDX<>9ANDX<>5 490 icon(X,Y)=level(pntr):pntr=pntr+1 500 PROCstarticons(X*14+114,Y*14-6,icon(X,Y)):cvrd(X,Y)=1 510 IFicon(X,Y)=8wx(water)=X:wy(water)=Y:wgx(water)=X*14+122:wgy(water)=Y*14+1:water=water+1 520 NEXT 530 water=1:fin=numstrt:delay=30DIVnumstrt 540 PROCborder(9,5,118,60):PRINTTAB(3,10)"Level : ";level TAB(3,11)"Score : ";score:MOVE13,27:DRAW114,27:MOVE93,27:DRAW93,56 550 PROCeggicon(95,30) 560 PROCicon(CX,CY,rand) 570 G=INKEY(1) 580 IFG>-1ANDstart=FALSE start=TRUE:TIME=0 590 IFstart=TRUE ANDsandleft>0ANDTIME>100PROCeggcount(95,30,sandleft):TIME=0:sandleft=sandleft-1 600 IFsandleft=0AND TIME>delay PROCadvance:TIME=0:IFdelay=0score=score+1:PRINTTAB(11,11);score 610 IFG>139ANDG<244ANDcvrd(CX,CY)=0PROCicon(GX,GY,icon(CX,CY)) 620 IFG=240ANDCY<8CY=CY+1:GY=GY+14 630 IFG=241ANDCY>1CY=CY-1:GY=GY-14 640 IFG=242ANDCX>1CX=CX-1:GX=GX-14 650 IFG=243ANDCX<16CX=CX+1:GX=GX+14 660 IFG>139ANDG<244ANDcvrd(CX,CY)=0PROCicon(GX,GY,rand) 670 IFG=32ANDcvrd(CX,CY)=0icon(CX,CY)=rand:PROCedges(CX,CY):rand=RND(7):PROCicon(CX,CY,rand) 680 IFG=14level=level+1:GOTO390 690 IFG=17ENDPROC 700 IFG=65PRINTTAB(5,13)"*Accelerate*":delay=0 710 IFeflag=TRUE GOTO390 720 IFeflag=FALSE ENDPROC 730 GOTO570 740 END 750 DEF PROCborder(x1,y1,x2,y2) 760 MOVEx1-1,y1-1:PLOT103,x2+1,y2+1 770 MOVEx1,y1:DRAWx1,y2:DRAWx2,y2:DRAWx2,y1:DRAWx1,y1:MOVEx1+2,y1+2:DRAWx1+2,y2-2:DRAWx2-2,y2-2:DRAWx2-2,y1+2:DRAWx1+2,y1+2 780 MOVEx1+1,y1+1:PLOT21,x1+1,y2-1:PLOT21,x2-1,y2-1:PLOT21,x2-1,y1+1:PLOT21,x1+1,y1+1 790 ENDPROC 800 DEF PROClogo(X,Y) 810 MOVEX+1,Y+40:DRAWX+1,Y+3:DRAWX+3,Y+1:DRAWX+12,Y+1:DRAWX+14,Y+3:DRAWX+14,Y+14:DRAWX+15,Y+14:DRAWX+15,Y+19:DRAWX+16,Y+20:DRAWX+18,Y+20:DRAWX+19,Y+19 820 MOVEX+5,Y+40:DRAWX+5,Y+6:DRAWX+6,Y+5:DRAWX+9,Y+5:DRAWX+10,Y+6:DRAWX+10,Y+14:DRAWX+9,Y+14:DRAWX+9,Y+24:DRAWX+11,Y+26:DRAWX+13,Y+26:DRAWX+15,Y+24:DRAWX+15,Y+23:DRAWX+16,Y+22:DRAWX+19,Y+22:DRAWX+21,Y+20:DRAWX+21,Y+19 830 MOVEX+11,Y+14:DRAWX+13,Y+14:MOVEX+10,Y+28:DRAWX+9,Y+28:DRAWX+8,Y+29:DRAWX+9,Y+30:DRAWX+10,Y+30:DRAWX+12,Y+28:DRAWX+14,Y+30:DRAWX+15,Y+30:DRAWX+16,Y+29:DRAWX+15,Y+28:DRAWX+14,Y+28:PLOT69,X+12,Y+27 840 ENDPROC 850 DEF PROCdrip(X,Y) 860 SY=Y:end=FALSE 870 PLOT69,X+2,Y+7:G=INKEY(8):PLOT69,X+2,Y+6:G=INKEY(7):MOVEX+1,Y+5:DRAWX+3,Y+5:G=INKEY(6):MOVEX+1,Y+4:DRAWX+3,Y+4:G=INKEY(5):MOVEX,Y+3:DRAWX+4,Y+3:G=INKEY(4):MOVEX,Y+2:DRAWX+4,Y+2:G=INKEY(3):MOVEX+1,Y+1:DRAWX+3,Y+1:G=INKEY(2):PLOT69,X+2,Y 880 REPEAT 890 MOVEX+2,Y:DRAWX+2,Y+7:MOVEX+1,Y+1:PLOT101,X+3,Y+5:MOVEX,Y+2:PLOT101,X+4,Y+3 900 G=INKEY(2):IFG>-1 end=TRUE 910 MOVEX+2,Y:PLOT7,X+2,Y+7:MOVEX+1,Y+1:PLOT103,X+3,Y+5:MOVEX,Y+2:PLOT103,X+4,Y+3 920 Y=Y-2 930 UNTILPOINT(X+2,Y+1)=1ORend=TRUE 940 PLOT69,X-2,Y+3:G=INKEY(5):PLOT69,X+5,Y+2:G=INKEY(5):PLOT69,X-4,Y+3:G=INKEY(5):PLOT69,X+7,Y+4:G=INKEY(8) 950 MOVEX-4,Y+2:PLOT103,X+7,Y+4 960 TIME=0:REPEAT:G=INKEY(1) 970 IFG>-1end=TRUE 980 UNTILTIME>50ORend=TRUE 990 IFend=TRUE ENDPROC 1000 Y=SY:GOTO870 1010 DEF PROCicon(X,Y,n) 1020 MOVEGX+1,GY+1:PLOT103,GX+13,GY+13 1030 IFn=1MOVEGX+1,GY+1:PLOT101,GX+13,GY+5:MOVEGX+1,GY+9:PLOT101,GX+13,GY+13 1040 IFn=2MOVEGX+1,GY+1:PLOT101,GX+5,GY+13:MOVEGX+9,GY+1:PLOT101,GX+13,GY+13 1050 IFn=3MOVEGX+9,GY+1:PLOT101,GX+13,GY+13:MOVEGX+1,GY+1:PLOT101,GX+13,GY+5:MOVEGX+1,GY+9:PLOT101,GX+5,GY+13:PLOT69,GX+8,GY+6:PLOT71,GX+5,GY+9 1060 IFn=4MOVEGX+1,GY+1:PLOT101,GX+5,GY+13:MOVEGX+1,GY+1:PLOT101,GX+13,GY+5:MOVEGX+9,GY+9:PLOT101,GX+13,GY+13:PLOT69,GX+6,GY+6:PLOT71,GX+9,GY+9 1070 IFn=5MOVEGX+1,GY+9:PLOT101,GX+13,GY+13:MOVEGX+9,GY+1:PLOT101,GX+13,GY+13:MOVEGX+1,GY+1:PLOT101,GX+5,GY+5:PLOT69,GX+8,GY+8:PLOT71,GX+5,GY+5 1080 IFn=6MOVEGX+1,GY+1:PLOT101,GX+5,GY+13:MOVEGX+1,GY+9:PLOT101,GX+13,GY+13:MOVEGX+9,GY+1:PLOT101,GX+13,GY+5:PLOT69,GX+6,GY+8:PLOT71,GX+9,GY+5 1090 IFn=7MOVEGX+1,GY+1:PLOT101,GX+13,GY+5:MOVEGX+1,GY+9:PLOT101,GX+13,GY+13:MOVEGX+6,GY+1:PLOT103,GX+8,GY+4:MOVEGX+6,GY+10:PLOT103,GX+8,GY+13 1100 ENDPROC 1110 DEF PROCedges(X,Y) 1120 C=icon(X,Y) 1130 IFicon(X-1,Y)>0L=TRUE ELSEL=FALSE 1140 IFicon(X+1,Y)>0R=TRUE ELSER=FALSE 1150 IFicon(X,Y+1)>0U=TRUE ELSEU=FALSE 1160 IFicon(X,Y-1)>0D=TRUE ELSED=FALSE 1170 IF(C=1ORC=3ORC=5ORC=7)ANDL MOVEGX,GY+1:DRAWGX,GY+13:MOVEGX,GY+6:PLOT7,GX,GY+8 1180 IF(C=1ORC=4ORC=6ORC=7)ANDR MOVEGX+14,GY+1:DRAWGX+14,GY+13:MOVEGX+14,GY+6:PLOT7,GX+14,GY+8 1190 IF(C=1ORC=5ORC=6)ANDU MOVEGX+1,GY+14:DRAWGX+13,GY+14 1200 IF(C=1ORC=3ORC=4)ANDD MOVEGX+1,GY:DRAWGX+13,GY 1210 IF(C=2ORC=4ORC=6)ANDL MOVEGX,GY+1:DRAWGX,GY+13 1220 IF(C=2ORC=3ORC=5)ANDR MOVEGX+14,GY+1:DRAWGX+14,GY+13 1230 IF(C=2ORC=3ORC=4ORC=7)ANDU MOVEGX+1,GY+14:DRAWGX+13,GY+14:MOVEGX+6,GY+14:PLOT7,GX+8,GY+14 1240 IF(C=2ORC=5ORC=6ORC=7)ANDD MOVEGX+1,GY:DRAWGX+13,GY:MOVEGX+6,GY:PLOT7,GX+8,GY 1250 ENDPROC 1260 DEF PROCstarticons(X,Y,n) 1270 MOVEX+1,Y+1:PLOT103,X+13,Y+13 1280 IFn=8MOVEX+1,Y+1:PLOT101,X+13,Y+4:MOVEX+7,Y+9:PLOT101,X+13,Y+13:MOVEX+7,Y+5:DRAWX+13,Y+5:MOVEX+7,Y+6:PLOT101,X+8,Y+8:PLOT71,X+8,Y+7 1290 IFn=8PLOT69,X+1,Y+5:PLOT69,X+1,Y+13:PLOT69,X+6,Y+5:PLOT69,X+6,Y+13:MOVEX+2,Y+7:DRAWX+3,Y+6:DRAWX+4,Y+6:DRAWX+5,Y+7:DRAWX+5,Y+8:DRAWX+4,Y+9:DRAWX+3,Y+9:DRAWX+2,Y+10:DRAWX+2,Y+11:DRAWX+3,Y+12:DRAWX+4,Y+12:DRAWX+5,Y+11 1300 IFn=9MOVEX+1,Y+1:PLOT101,X+13,Y+4:MOVEX+1,Y+9:PLOT101,X+7,Y+13:MOVEX+11,Y+5:PLOT101,X+13,Y+7:MOVEX+6,Y+6:PLOT101,X+7,Y+8:PLOT71,X+6,Y+7 1310 IFn=9MOVEX+1,Y+5:DRAWX+7,Y+5:MOVEX+9,Y+6:DRAWX+9,Y+12:DRAWX+12,Y+12:MOVEX+9,Y+9:DRAWX+12,Y+9 1320 IFn=10MOVEX+1,Y+1:PLOT101,X+13,Y+13:MOVEX+1,Y+6:PLOT103,X+13,Y+8:MOVEX+2,Y+4:PLOT7,X+2,Y+2:PLOT7,X+12,Y+2:PLOT7,X+12,Y+4:MOVEX+2,Y+10:PLOT7,X+2,Y+12:PLOT7,X+12,Y+12:PLOT7,X+12,Y+10 1330 IFn=13MOVEX+6,Y+2:DRAWX+8,Y+2:DRAWX+9,Y+3:DRAWX+10,Y+3:DRAWX+11,Y+4:DRAWX+11,Y+5:DRAWX+12,Y+6:DRAWX+12,Y+8:DRAWX+11,Y+9:DRAWX+11,Y+10:DRAWX+10,Y+11:DRAWX+9,Y+11:MOVEX,Y:DRAWX+14,Y:DRAWX+14,Y+14:DRAWX,Y+14:DRAWX,Y 1340 IFn=13MOVEX+8,Y+12:DRAWX+6,Y+12:DRAWX+5,Y+11:DRAWX+4,Y+11:DRAWX+3,Y+10:DRAWX+3,Y+9:DRAWX+2,Y+8:DRAWX+2,Y+6:DRAWX+3,Y+5:DRAWX+3,Y+4:DRAWX+4,Y+3:DRAWX+5,Y+3:MOVEX+4,Y+7:DRAWX+5,Y+8:DRAWX+7,Y+6:DRAWX+9,Y+8:DRAWX+10,Y+7 1350 IFn=14MOVEX+1,Y+1:PLOT101,X+13,Y+13:MOVEX+1,Y+6:PLOT103,X+13,Y+8:MOVEX+3,Y+11:PLOT7,X+11,Y+11:MOVEX+10,Y+10:PLOT7,X+10,Y+12:MOVEX+3,Y+3:PLOT7,X+11,Y+3:MOVEX+10,Y+2:PLOT7,X+10,Y+4 1360 IFn=15MOVEX+1,Y+1:PLOT101,X+13,Y+13:MOVEX+1,Y+6:PLOT103,X+13,Y+8:MOVEX+3,Y+11:PLOT7,X+11,Y+11:MOVEX+4,Y+10:PLOT7,X+4,Y+12:MOVEX+3,Y+3:PLOT7,X+11,Y+3:MOVEX+4,Y+2:PLOT7,X+4,Y+4 1370 ENDPROC 1380 DEF PROCeggicon(X,Y) 1390 MOVEX+1,Y:DRAWX+18,Y:MOVEX+1,Y+24:DRAWX+18,Y+24:MOVEX+3,Y:DRAWX+3,Y+24:MOVEX+16,Y:DRAWX+16,Y+24 1400 MOVEX+8,Y+1:DRAWX+11,Y+1:DRAWX+14,Y+5:DRAWX+14,Y+6:DRAWX+12,Y+10:DRAWX+10,Y+12:DRAWX+9,Y+12:DRAWX+7,Y+14:DRAWX+5,Y+19:DRAWX+7,Y+22 1410 MOVEX+8,Y+23:DRAWX+11,Y+23:DRAWX+14,Y+19:DRAWX+12,Y+14:DRAWX+10,Y+12:DRAWX+9,Y+12:DRAWX+7,Y+10:DRAWX+5,Y+5:DRAWX+6,Y+3:DRAWX+7,Y+2 1420 MOVEX+6,Y+18:DRAWX+6,Y+19:MOVEX+7,Y+16:DRAWX+7,Y+22:MOVEX+8,Y+14:DRAWX+8,Y+22:MOVEX+9,Y+13:DRAWX+9,Y+22:MOVEX+10,Y+13:DRAWX+10,Y+22:MOVEX+11,Y+14:DRAWX+11,Y+22:MOVEX+12,Y+16:DRAWX+12,Y+22:MOVEX+13,Y+18:DRAWX+13,Y+19 1430 ENDPROC 1440 DEF PROCeggcount(X,Y,n) 1450 IFn<=10MOVEX+8,Y+22:PLOT7,X+11,Y+22:MOVEX+8,Y+2:DRAWX+11,Y+2 1460 IFn<=9MOVEX+7,Y+21:PLOT7,X+12,Y+21:MOVEX+7,Y+3:DRAWX+12,Y+3 1470 IFn<=8MOVEX+7,Y+20:PLOT7,X+12,Y+20:MOVEX+7,Y+4:DRAWX+12,Y+4 1480 IFn<=7MOVEX+6,Y+19:PLOT7,X+13,Y+19:MOVEX+6,Y+5:DRAWX+13,Y+5 1490 IFn<=6MOVEX+6,Y+18:PLOT7,X+13,Y+18:MOVEX+6,Y+6:DRAWX+13,Y+6 1500 IFn<=5MOVEX+7,Y+17:PLOT7,X+12,Y+17:MOVEX+7,Y+7:DRAWX+12,Y+7 1510 IFn<=4MOVEX+7,Y+16:PLOT7,X+12,Y+16:MOVEX+7,Y+8:DRAWX+12,Y+8 1520 IFn<=3MOVEX+8,Y+15:PLOT7,X+11,Y+15:MOVEX+8,Y+9:DRAWX+11,Y+9 1530 IFn<=2MOVEX+8,Y+14:PLOT7,X+11,Y+14:MOVEX+8,Y+10:DRAWX+11,Y+10 1540 IFn<=1MOVEX+9,Y+13:PLOT7,X+10,Y+13:MOVEX+9,Y+11:DRAWX+10,Y+11 1550 ENDPROC 1560 DEF PROCadvance 1570 n=icon(wx(water),wy(water)):cvrd(wx(water),wy(water))=1 1580 IFn=10cvrd(wx(water),wy(water))=2 1590 IFn=14ANDwdx(water)=1cvrd(wx(water),wy(water))=3 1600 IFn=15ANDwdx(water)=-1cvrd(wx(water),wy(water))=4 1610 IFwx(water)=0score=score-1:GOTO1690 1620 IFn=0PROClose:ENDPROC 1630 IFwdy(water)=0MOVEwgx(water),wgy(water)-k-1:PLOT21,wgx(water),wgy(water)+2 1640 IFn=7ANDwdx(water)=0AND(wgy(water)wy(water)*14+3)MOVEwgx(water)-k-1,wgy(water):PLOT21,wgx(water)+2,wgy(water):GOTO1660 1650 IFwdx(water)=0ANDn<>7MOVEwgx(water)-k-1,wgy(water):PLOT21,wgx(water)+2,wgy(water) 1660 wgx(water)=wgx(water)+wdx(water):wgy(water)=wgy(water)+wdy(water) 1670 wx(water)=(wgx(water)-114)DIV14:wy(water)=(wgy(water)+6)DIV14 1680 IFPOINT(wgx(water),wgy(water))=1PROCdirection 1690 IFwater9ANDn<>7PROClose 1820 IFfin=0PROCwin 1830 ENDPROC 1840 DEF PROCwin 1850 pass=TRUE 1860 FORX=1TO16:FORY=1TO8 1870 IFicon(X,Y)=10ANDcvrd(X,Y)=0pass=FALSE:X=16:Y=8 1880 IF(icon(X,Y)=14ORicon(X,Y)=15)ANDcvrd(X,Y)=0pass=FALSE:X=16:Y=8 1890 NEXT:NEXT 1900 IFpass=FALSE PROClose:ENDPROC 1910 PROCborder(100,50,380,78):pscore=score 1920 eflag=TRUE:level=level+1:PRINTTAB(18,7)"Well done! -- You have completed the level."TAB(18,8)"Press any key to move onto level ";level;"...":G=GET 1930 ENDPROC 1940 DEF PROClose 1950 PROCborder(90,50,390,78) 1960 IFlevel=0PRINTTAB(16,7)"You have completed the game so far...":GOTO1980 1970 eflag=FALSE:PRINTTAB(16,7)"Bad luck! You have lost the game.":score=pscore 1980 pos=0 1990 FORI=1TO5 2000 IFscore>leadscr(I)pos=I:I=5 2010 NEXT 2020 IFpos=0PRINTTAB(16,8)"Press any key to exit...":G=GET:ENDPROC ELSEPRINTTAB(16,8)"Please type in your name :":INPUTTAB(43,8)name$ 2030 FORA=5TOpos STEP-1:leadnom$(A+1)=leadnom$(A):leadscr(A+1)=leadscr(A):NEXT 2040 leadnom$(pos)=name$:leadscr(pos)=score 2050 PROCborder(190,50,290,68):PRINTTAB(33,8)"Please wait..." 2060 K=OPENOUT("HISCORE.PIP") 2070 FORI=1TO5:PRINT#K,leadnom$(I),leadscr(I):NEXT 2080 CLOSE#0 2090 ENDPROC 2100 DEF PROCleague 2110 PROCborder(140,20,340,108) 2120 PRINTTAB(31,4)"---League Table---"TAB(26,12)"Press any key..." 2130 FORI=1TO5 2140 IFI MOD2=1VDU17ELSEVDU18 2150 PRINTTAB(26,I+5)leadnom$(I)TAB(49,I+5);leadscr(I) 2160 NEXT:VDU18:G=GET 2170 ENDPROC 2180 DEF PROCquit 2190 PROCborder(100,50,380,78):PRINTTAB(18,7)"Are you sure you want to quit? (Y/N)":REPEAT:G$=GET$:UNTILG$="Y"ORG$="N"ORG$=CHR$27 2200 IFG$="N"ORG$=CHR$27 ENDPROC 2210 OSCLI("QUIT") 2220 DATA10,.5,15,.33,17,.33,20,.33,22,1,20,.5,17,1,15,.5,13,.5,15,1,17,.25 ,15,.25,13,.5,15,1,17,.5,8,1,10,.33,8,.33,10,.33,13,.33,10,.33,13,.33, 15,.33,13,.33,15,.33,17,1,22,1