home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib15.dsk / DIGGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  142 lines

  1. 10  REM   **********************
  2. 11  REM   *    D I G G E R     *
  3. 12  REM   *   BY DONALD NUTE   *
  4. 13  REM   * COPYRIGHT (C) 1983 *
  5. 14  REM   * BY MICROSPARC, INC *
  6. 15  REM   * CONCORD, MA. 01742 *
  7. 16  REM   **********************
  8. 20  LOMEM: 16672: DIM B(12,12): TEXT : HOME : POKE  -16368,0: VTAB 10: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": PRINT  CHR$(4)"BLOAD DIG.OBJ": POKE 232,0: POKE 233,64: SCALE= 1: ROT= 0
  9. 30  FOR I = 770 TO 790: READ J: POKE I,J: NEXT : GOTO 750
  10. 40  DATA  173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96  
  11. 50  FOR JQ = 0 TO  LEN(MELODY$)/9 -1: POKE 768, VAL( MID$ (MELODY$,9 *JQ +1,3)): POKE 769, VAL( MID$ (MELODY$,9 *JQ +4,3)): CALL 770: FOR QJ = 1 TO  VAL( MID$ (MELODY$,9 *JQ +7,3)): NEXT : NEXT : RETURN 
  12. 60 ME$ = "152070025203035000203035000181070000203075100161070000152070000": GOTO 50
  13. 70 ME$ = "181100000255150000": GOTO 50
  14. 80 ME$ = "192070000192070000144140025192070000144070000114140025192070000144070000114070000192070000144070000114070000192070000144070000114140025144070000114070000096140025114070000144070000192140000": GOSUB 50
  15. 90 MELODY$ = "192070000192070000144140025144070000144070000144140000": GOTO 50
  16. 100  HOME : HGR : HCOLOR= 3: FOR I = 0 TO 7: HPLOT I,I TO 279 -I,I TO 279 -I,159 -I TO I,159 -I TO I,I: NEXT : FOR TX = 0 TO 11: FOR TY = 0 TO 11: DRAW 1 AT 8 +22 *TX,8 +12 *TY:B(TX,TY) = 1: NEXT : NEXT 
  17. 110  FOR TX = 4 TO 7: FOR TY = 4 TO 7: DRAW 5 AT 8 +22 *TX,8 +12 *TY:B(TX,TY) = 5: NEXT : NEXT : FOR J = 1 TO DB +1: FOR I = 1 TO 4
  18. 120 TX =  INT( RND(1) *12):TY =  INT( RND(1) *12): IF B(TX,TY) >1  OR (TX = DX  AND TY = DY)  THEN 120
  19. 130  DRAW 5 AT 8 +22 *TX,8 +12 *TY:B(TX,TY) = 5: NEXT : NEXT : FOR K = 1 TO 10 +DB
  20. 140 TX =  INT( RND(1) *12):TY =  INT( RND(1) *12): IF B(TX,TY) >1  THEN 140
  21. 150  GOSUB 200: DRAW 6 AT 8 +22 *TX,8 +12 *TY:B(TX,TY) = 6: NEXT 
  22. 160 DX =  INT( RND(1) *12): IF B(DX,0) >1  THEN 160
  23. 170 DY = 0:CX = DX:GX = DX:SX = DX:CY = DY:GY = DY:SY = DY:E = 0:S = 0:TI = 0:FC = 0:FG = 0:FS = 0:F = 0:P = 0:TX = DX:TY = DY: GOSUB 200: DRAW 2 AT 8 +22 *DX,8 +12 *DY
  24. 180 OX =  INT( RND(1) *12): IF B(OX,11) = 5  THEN 180
  25. 190 L = L +1: VTAB 23: PRINT "YOUR SCORE: "OS;: HTAB 20: PRINT "HIGH SCORE: "HS: HTAB 16: PRINT "LEVEL "L;: VTAB 21: PRINT : POKE  -16368,0: RETURN 
  26. 200  HCOLOR= 0: FOR I = 8 +12 *TY TO 19 +12 *TY: HPLOT 8 +22 *TX,I TO 29 +22 *TX,I: NEXT : HCOLOR= 3: RETURN 
  27. 210  HCOLOR= 0: FOR Y = 152 TO 159: HPLOT 8 +22 *OX,Y TO 29 +22 *OX,Y: NEXT : HCOLOR= 3:F = 1: PRINT  CHR$(7);: RETURN 
  28. 220  IF HOLD  THEN HOLD = 0: RETURN 
  29. 230 M =  PEEK( -16384): IF M <128  THEN 230
  30. 240  POKE  -16368,0:M = M -128:TX = DX +(M = 21) -(M = 8):TY = DY +(M = 90) -(M = 65): IF TX <0  OR TX >11  OR TY <0  OR (TY = 12  AND (TX < >OX  OR S <10))  THEN 230
  31. 250 E = B(TX,TY) = 5:S = S +(B(TX,TY) = 6): IF B(TX,TY) < >0  THEN TI = TI +1:HOLD = 1: FOR I = 1 TO 10:B =  PEEK( -16336): NEXT 
  32. 260 TI = TI +1: XDRAW 2 AT 8 +22 *DX,8 +12 *DY:B(DX,DY) = 0:DX = TX:DY = TY: GOSUB 200: DRAW 2 AT 8 +22 *DX,8 +12 *DY:B(DX,DY) = 2: IF DY = 12  THEN E = 2
  33. 270  IF E = 1  THEN  HOME : VTAB 21: PRINT "TOO BAD, DIGGER, YOU JUST GOBBLED SOME  DIGGERBANE.  CHOKE!  GASP!  YOU'RE DEAD!": GOTO 80
  34. 280  RETURN 
  35. 290  IF B(SX,SY) >0  THEN FS = 0: RETURN 
  36. 300  DRAW 3 AT 8 +22 *SX,8 +12 *SY:B(SX,SY) = 3: VTAB 20: PRINT : PRINT "HERE COMES SENDER!                      ": GOTO 70
  37. 310  IF  ABS(SX -DX) + ABS(SY -DY) >1  THEN 370
  38. 320 X =  RND(1): IF X <.1 *(DB +1)  THEN TX = 6:TY = 6: GOTO 340
  39. 330 TX =  INT( RND(1) *12):TY =  INT( RND(1) *12): IF B(TX,TY) < >0  AND B(TX,TY) < >1  THEN 330
  40. 340 E = B(TX,TY) = 5:P = P +1: IF P >S  THEN P = S
  41. 350 HOLD = 0: XDRAW 2 AT 8 +22 *DX,8 +12 *DY:B(DX,DY) = 0:DX = TX:DY = TY: GOSUB 200: DRAW 2 AT 8 +22 *DX,8 +12 *DY:B(DX,DY) = 2: GOSUB 70: IF E  THEN 270
  42. 360  RETURN 
  43. 370 TX = SX:TY = SY +(SY <DY  AND B(SX,SY +1) = 0) -(DY <SY  AND B(SX,SY -1 *(SY >0)) = 0): IF TY < >SY  THEN 420
  44. 380 TX = SX +(SX <DX  AND B(SX +1,SY) = 0) -(DX <SX  AND B(SX -1 *(SX >0),SY) = 0): IF TX < >SX  THEN 420
  45. 390  PRINT  CHR$(7);
  46. 400 HOLD = 0:TX =  INT( RND(1) *10):TY =  INT( RND(1) *10): IF SX = TX  AND SY = TY  THEN 420
  47. 410  IF B(TX,TY) < >0  OR  ABS(TX -DX) + ABS(TY -DY) <2  THEN 400
  48. 420  XDRAW 3 AT 8 +22 *SX,8 +12 *SY:B(SX,SY) = 0:SX = TX:SY = TY: GOSUB 200: DRAW 3 AT 8 +22 *SX,8 +12 *SY:B(SX,SY) = 3: IF  ABS(SX -DX) + ABS(SY -DY) <2  THEN 320
  49. 430  RETURN 
  50. 440  DRAW 4 AT 8 +22 *CX,8 +12 *CY: VTAB 20: PRINT : PRINT "HERE COMES CRUNCHER!                    ";: GOTO 70
  51. 450  IF CHOLD  THEN CHOLD = 0: RETURN 
  52. 460  IF  ABS(CX -DX) + ABS(CY -DY) = 1  THEN E = 1: HOME : VTAB 21: PRINT "GOODBYE, DIGGER.  CRUNCHER ATE YA!": GOTO 80
  53. 470 TX = CX:TY = CY: GOSUB 200:CHOLD = 1:TX = CX +(CX <DX) -(DX <CX):TY = CY +(CY <DY) -(DY <CY): IF TX = CX  OR TY = CY  THEN 500
  54. 480  IF  ABS(CX -DX) < ABS(CY -DY)  THEN TX = CX: GOTO 500
  55. 490 TY = CY
  56. 500  IF B(TX,TY) >1  THEN  DRAW B(TX,TY) AT 8 +22 *CX,8 +12 *CY:B(CX,CY) = B(TX,TY): GOTO 520
  57. 510 B(CX,CY) = 0
  58. 520 CX = TX:CY = TY: GOSUB 200: DRAW 4 AT 8 +22 *CX,8 +12 *CY:B(CX,CY) = 4: IF  ABS(CX -DX) + ABS(CY -DY) = 1  THEN 460
  59. 530  RETURN 
  60. 540  IF B(GX,GY) < >0  THEN FG = 0: RETURN 
  61. 550  DRAW 1 AT 8 +22 *GX,8 +12 *GY:B(GX,GY) = 1: VTAB 20: PRINT : PRINT "HERE COMES THE GHOST!                   ";: GOTO 70
  62. 560  IF  ABS(GX -DX) + ABS(GY -DY) = 0  THEN GHOLD = 5:HOLD = 0:P = S: VTAB 21: PRINT "THE GHOST ROBBED YA...                  ";: GOSUB 70: GOSUB 70: VTAB 21: PRINT "                                       ";: RETURN 
  63. 570  IF CHOLD  THEN GHOLD = GHOLD -(GHOLD >1): RETURN 
  64. 580  IF GHOLD >1  THEN GHOLD = GHOLD -1: RETURN 
  65. 590  IF   NOT GHOLD  THEN 630
  66. 600 TX = GX:TY = GY:GX =  INT( RND(1) *12):GY =  INT( RND(1) *12): IF GX = TX  AND GY = TY  THEN  RETURN 
  67. 610  IF B(GX,GY) < >0  OR  ABS(GX -DX) + ABS(GY -DY) = 1  THEN 600
  68. 620 GHOLD = 0: GOTO 730
  69. 630  IF GX <11  THEN  IF B(GX +1,GY) = 0  THEN 680
  70. 640  IF GY <11  THEN  IF B(GX,GY +1) = 0  THEN 680
  71. 650  IF GX >0  THEN  IF B(GX -1,GY) = 0  THEN 680
  72. 660  IF GY >0  THEN  IF B(GX,GY -1) = 0  THEN 680
  73. 670 GHOLD = 25: RETURN 
  74. 680  ON M GOTO 690,700,710,720
  75. 690  IF GX <11  THEN  IF B(GX +1,GY) = 0  THEN GX = GX +1:M = 1: GOTO 730
  76. 700  IF GY <11  THEN  IF B(GX,GY +1) = 0  THEN GY = GY +1:M = 2: GOTO 730
  77. 710  IF GX >0  THEN  IF B(GX -1,GY) = 0  THEN GX = GX -1:M = 3: GOTO 730
  78. 720  IF GY >0  THEN  IF B(GX,GY -1) = 0  THEN GY = GY -1:M = 4
  79. 730 I = 6 -5 *( RND(1) <.9): DRAW I AT 8 +22 *GX,8 +12 *GY:B(GX,GY) = I: IF  ABS(GX -DX) + ABS(GY -DY) = 1  THEN 560
  80. 740  RETURN 
  81. 750  GOSUB 100: VTAB 21: PRINT "SENDER IS COMING..."
  82. 760  GOSUB 220: ON E GOTO 1340,830
  83. 770 NS = OS +10 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS
  84. 780  IF TI <(50 -4 *DB)  THEN 760
  85. 790  IF   NOT FS  THEN FS = 1: GOSUB 290: GOTO 760
  86. 800  GOSUB 310:NS = OS +10 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS" ";: IF E = 1  THEN 1340
  87. 810  IF S = 10  AND   NOT F  THEN  GOSUB 210
  88. 820  GOTO 760
  89. 830 OS = NS +200 *(DB +1): GOSUB 60
  90. 840  GOSUB 100: VTAB 21: PRINT "SENDER AND THE GHOST ARE COMING..."
  91. 850  GOSUB 220: ON E GOTO 1340,940
  92. 860 NS = OS +15 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS: IF TI <50 -4 *DB  THEN 850
  93. 870  IF   NOT FS  THEN FS = 1: GOSUB 290: GOTO 850
  94. 880  GOSUB 310:NS = OS +15 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS" ": IF E = 1  THEN 1340
  95. 890  IF F = 0  AND S = 10  THEN  GOSUB 210
  96. 900  IF TI <70 -4 *DB  THEN 850
  97. 910  IF   NOT FG  THEN FG = 1: GOSUB 540: GOTO 850
  98. 920  GOSUB 560: IF S = P  THEN NS = OS: VTAB 23: HTAB 13: PRINT "     ": VTAB 23: HTAB 13: PRINT NS
  99. 930  GOTO 850
  100. 940 OS = NS +300 *(DB +1): GOSUB 60
  101. 950  GOSUB 100: VTAB 21: PRINT "CRUNCHER IS COMING..."
  102. 960  GOSUB 220: ON E GOTO 1340,1040
  103. 970 NS = OS +20 *(DB +1) *S: VTAB 23: HTAB 13: PRINT NS: IF TI <55 -4 *DB  THEN 960
  104. 980  IF CX = DX  AND CY = DY  THEN 960
  105. 990  IF   NOT FC  THEN FC = 1: GOSUB 440: GOTO 1010
  106. 1000  GOSUB 450
  107. 1010  IF E = 1  THEN 1340
  108. 1020  IF F = 0  AND S = 10  THEN  GOSUB 210
  109. 1030  GOTO 960
  110. 1040 OS = NS +500 *(DB +1): GOSUB 60
  111. 1050  GOSUB 100: VTAB 21: PRINT "SENDER AND CRUNCHER ARE COMING..."
  112. 1060  GOSUB 220: ON E GOTO 1340,1190
  113. 1070 NS = OS +25 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS
  114. 1080  IF TI <(50 -4 *DB)  THEN 1060
  115. 1090  IF   NOT FS  THEN FS = 1: GOSUB 290: GOTO 1060
  116. 1100  GOSUB 310:NS = OS +25 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS" ";: IF E = 1  THEN 1340
  117. 1110  IF S = 10  AND   NOT F  THEN  GOSUB 210
  118. 1120  IF TI <70 -4 *DB  THEN 1060
  119. 1130  IF CX = DX  AND CY = DY  THEN 1060
  120. 1140  IF   NOT FC  THEN FC = 1: GOSUB 440: GOTO 1160
  121. 1150  GOSUB 450
  122. 1160  IF E = 1  THEN 1340
  123. 1170  IF F = 0  AND S = 10  THEN  GOSUB 210
  124. 1180  GOTO 1060
  125. 1190 OS = NS +700 *(DB +1): GOSUB 60
  126. 1200  GOSUB 100: VTAB 21: PRINT "CRUNCHER AND THE GHOST ARE COMING..."
  127. 1210  GOSUB 220: ON E GOTO 1340,1320
  128. 1220 NS = OS +30 *(DB +1) *(S -P): VTAB 23: HTAB 13: PRINT NS: IF TI <55 -4 *DB  THEN 1210
  129. 1230  IF CX = DX  AND CY = DY  THEN 1210
  130. 1240  IF   NOT FC  THEN FC = 1: GOSUB 440: GOTO 1260
  131. 1250  GOSUB 450
  132. 1260  IF E = 1  THEN 1340
  133. 1270  IF   NOT F  AND S = 10  THEN  GOSUB 210
  134. 1280  IF TI <75 -4 *DB  THEN 1210
  135. 1290  IF   NOT FG  THEN FG = 1: GOSUB 540: GOTO 1210
  136. 1300  GOSUB 560: IF S = P  THEN NS = OS: VTAB 23: HTAB 13: PRINT "     ": VTAB 23: HTAB 13: PRINT NS
  137. 1310  GOTO 1210
  138. 1320 OS = NS +1000 *(DB +1): GOSUB 60
  139. 1330  HOME :DB = DB +1: GOTO 750
  140. 1340  IF HS <NS  THEN HS = NS
  141. 1350  TEXT : HOME : PRINT "YOUR SCORE: "NS: PRINT : PRINT "HIGH SCORE: "HS: PRINT : VTAB 12: HTAB 14: PRINT "PLAY AGAIN? ";: POKE  -16368,0: GET A$: IF A$ < >"Y"  THEN  HOME : END 
  142. 1360  PRINT :NS = 0:OS = 0:DB = 0:L = 0: GOTO 750