'=========================================================================== ' Subject: WORMS Date: 02-24-97 (16:00) ' Author: Dave Navarro, Jr. Code: QB, QBasic, PDS, PB ' Origin: harryst@castel.nl Packet: GAMES.ABC '=========================================================================== 'modified for PowerBASIC by Dave Navarro, Jr 10 DEF SEG=&H40 20 IF (PEEK(&H10) AND 48)=32 THEN WIDTH 40 30 DEF SEG:DIM NC(4),NR(4),XP(6),YP(6) 40 KEY OFF: COLOR ,0:SCREEN 0,0:RANDOMIZE TIMER 50 FOR X=0 TO 4:READ NC(X),NR(X):NEXT X:HS=0 60 GOSUB 1000:COLOR 2:LOCATE 5,1 70 PRINT "SET THE SPEED FACTOR BY ENTERING A" 80 PRINT "NUMBER BETWEEN 1 (FASTEST) AND 7" 90 PRINT "(SLOWEST). 100 GOSUB 2000:SP=(VAL(K$)-1)*1000 'modified for PB3 120 COLOR 3:PRINT TAB(3);"THESE KEYS CONTROL THE WORM'S MOVEMENT:" 130 GOSUB 3000:PRINT:PRINT 140 COLOR 2:PRINT:PRINT "PRESS TO START," 150 PRINT TAB(7);" TO CHANGE SPEED FACTOR, OR" 160 PRINT TAB(7);" TO QUIT." 170 GOSUB 2000:IF K$="S" THEN 200 180 IF K$="C" THEN CLS:GOTO 60 190 IF K$="Q" THEN COLOR 7:CLS:KEY ON:END ELSE 170 200 LVL=1:KO=1:WC=10:SC=0 210 K$=INKEY$: IF K$<>"" THEN 210 220 CLS:NO=1:HP=1 230 TOT=LVL+2: IF TOT>7 THEN TOT=7 240 FOR X=1 TO 6:XP(X)=9-X:YP(X)=16:NEXT X 250 COLOR KO:PRINT TAB(2);STRING$(38,46) 260 FOR X=1 TO 16:PRINT TAB(2);".";STRING$(36,219);"." 270 NEXT X: PRINT TAB(2);STRING$(38,46) 280 COLOR 12,KO:FOR X=1 TO INT(RND*32)+9 290 LOCATE INT(RND*12)+4,INT(RND*32)+5 300 PRINT CHR$(INT(RND*26)+65) 310 NEXT X: COLOR 15,KO:FOR X=1 TO TOT 320 A=INT(RND*12)+4:B=INT(RND*30)+6 330 IF SCREEN(A,B)<>219 THEN 320 340 LOCATE A,B: PRINT ;CHR$(48+X):NEXT X 350 COLOR WC,0:LOCATE 16,3: PRINT STRING$(6,42) 360 COLOR 12: LOCATE 19,7:PRINT"SCORE:";SC:COLOR 14 370 LOCATE 19,25:PRINT "LEVEL:";LVL:GOSUB 3000 380 DX=1:DY=0:MC=0 390 FOR DE=0 TO SP*30+20:NEXT DE 400 K$=INKEY$:IF K$="" THEN 430 410 GOSUB 2010:DK=INSTR("IJKL",K$): IF DK=0 THEN 430 420 DX=NC(DK):DY=NR(DK) 430 TX=XP(HP)+DX:TY=YP(HP)+DY 440 FOR DE=0 TO SP*20:NEXT DE 450 CH=SCREEN(TY,TX):IF CH=219 THEN 510 460 IF CH-48 <>NO THEN 570 470 NO=NO+1:SOUND 200,5.000000E-01:SOUND 300,5.000000E-01 480 SC=SC+(CH-48)*3*(7-SP) 490 COLOR 12:LOCATE 19,13:PRINT SC 500 IF NO=TOT+1 THEN KO=KO MOD 7+1:LVL=LVL+1:GOTO 210 510 HP=(HP+4) MOD 6+1 520 LOCATE YP(HP),XP(HP):PRINT CHR$(32) 530 XP(HP)=TX:YP(HP)=TY:MC=MC+1:IF MC<16 THEN 560 540 MC=0:WC=WC+1-(WC=7) 550 WC=WC-(WC=KO):IF WC=16 THEN WC=1-(KO=1) 560 COLOR WC: LOCATE TY,TX:PRINT "*":GOTO 390 570 FOR X=1 TO 30:COLOR INT(RND*15)+1 580 LOCATE TY,TX:PRINT "*": SOUND INT(RND*100)+100,5.000000E-01 590 NEXT X: GOSUB 1000:COLOR 14 600 LOCATE 4,1:PRINT "TOUGH LUCK! YOU RAN INTO"; 610 IF CH=42 THEN PRINT "YOURSELF." ELSE PRINT " SOMETHING." 620 PRINT:PRINT "YOUR SCORE WAS";STR$(SC);"." 630 IF SC>HS THEN HS=SC 640 PRINT "THE HIGH SCORE IS";STR$(HS);".":COLOR 2 650 PRINT:PRINT "PRESS TO START AGAIN,":GOTO 150 1000 KO=10:CLS:LOCATE 2,10,0:FOR X=1 TO 22:COLOR KO 1010 PRINT MID$("*--THE NUMBERS WORM--*",X,1); 1020 KO=KO+1:KO=KO+(KO>15)*6: NEXT X: RETURN 2000 K$=INKEY$:IF K$="" THEN 2000 2010 K=ASC(K$):K$=CHR$(K-(K>96)*(K<123)*32): RETURN 3000 PRINT: COLOR 2 3010 PRINT TAB(3);"=LEFT =RIGHT =UP =DOWN" 3020 PRINT:COLOR 3 3030 PRINT "EAT ALL NUMBERS IN ORDER. DON'T RUN INTO"; 3040 PRINT "LETTERS, YOUR TRAIL, OR THE BORDER."; 3050 RETURN 4000 DATA 0,0,0,-1,-1,0,0,1,1,0