home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib22a.dsk / JANUARY.1985 / CLAUSTROPHOBIA.bas next >
BASIC Source File  |  2023-02-26  |  10KB  |  161 lines

  1. 10  REM  **********************
  2. 20  REM  *   CLAUSTROPHOBIA   *
  3. 30  REM  *   BY RUDY A. GUY   *
  4. 40  REM  * COPYRIGHT (C) 1985 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA. 01742 *
  7. 70  REM  **********************
  8. 80  LOMEM: 25600
  9. 90  ONERR  GOTO 1560
  10. 100  GOSUB 690: GOSUB 1410
  11. 110  GOSUB 1430: GOTO 130: REM     INITIALIZE
  12. 120  CLEAR : GOSUB 1410
  13. 130 SC$ = "000000":SC = 0
  14. 140  DIM R(14),SC(13): FOR I = 0 TO 13: READ SC(I): NEXT : DATA  100,50,25,10,5,5,5,5,5,5,10,25,50,100
  15. 150  HGR2 : SCALE= 1: ROT= 0: HCOLOR= 3:X = 130
  16. 160  HPLOT 0,0 TO 279,0 TO 279,180 TO 0,180 TO 0,0: HPLOT 279,180 TO 279,191 TO 0,191 TO 0,180
  17. 170  DRAW 15 AT 7,183: DRAW 16 AT 45,183: DRAW 17 AT 115,184: DRAW 18 AT 145,184
  18. 180  DRAW 14 AT 203,182: GOSUB 760
  19. 190 MI = 12:MA = 252:Y1 = 9
  20. 200  HCOLOR= 3:Z =  PEEK( -16384): IF Z = 136  OR Z = 149  THEN  POKE  -16368,0:M =  ABS(X -X1):X =  INT(X +(5 *(M < = 20) +.5 *(M >20) *M) *((Z = 149) -(Z = 136)))
  21. 210  IF MA -MI <20  THEN 830
  22. 220  IF SC -RE > = 10000  THEN RE = RE +10000: FOR I = 0 TO 13:R(I) = 0: NEXT : GOTO 150
  23. 230  IF Y1 = 9  AND  INT(( RND(1) *10)/3) = ( INT( RND(0) *10))/3  THEN 990
  24. 240  IF X <MI  THEN X = MI: GOTO 260
  25. 250  IF X >(MA)  THEN X = MA
  26. 260  XDRAW 11 AT X,179
  27. 270  IF Y1 >9  THEN 290
  28. 280 R =  INT( RND(1) *14):X1 = (R *20) +2: IF X1 <MI  OR X1 >(MA)  THEN 280
  29. 290  GOSUB 380: REM  CHECK POSITION
  30. 300  DRAW 12 AT X1,Y1
  31. 310 Z =  PEEK( -16384): IF Z = 160  THEN  POKE  -16368,0: GOSUB 470
  32. 320  GOSUB 410
  33. 330  HCOLOR= 0
  34. 340  IF Y1 < = 179  THEN  DRAW 12 AT X1,Y1:Y1 = Y1 +5
  35. 350  IF Y1 >169  THEN  GOSUB 860
  36. 360  IF Y1 = 179  OR Y1 = 179 -(R(R) *5)  THEN Y1 = 9:R(R) = R(R) +1: GOSUB 710: GOSUB 420
  37. 370  GOTO 200
  38. 380  REM :CHECK FOR TOP OF COLUMN POSITION
  39. 390  IF Y1 = 179 -(R(R) *5) -5  THEN  HCOLOR= 3: XDRAW 12 AT X1,Y1 +5:Y1 = 9:R(R) = R(R) +1: GOSUB 410: GOSUB 710: GOSUB 420: POP : GOTO 200
  40. 400  RETURN 
  41. 410  XDRAW 11 AT X,179: RETURN 
  42. 420  REM :SET RANGE OF GUN
  43. 430  IF X1 = MI  OR X1 = (MA)  THEN  RETURN 
  44. 440  IF X1 <X  AND X1 >MI  THEN MI = X1 +10: RETURN 
  45. 450  IF X1 >X  AND X1 <(MA)  THEN MA = X1 -10
  46. 460  RETURN 
  47. 470  REM :FIRE SHOT
  48. 480  HPLOT X +5,169 TO X +5,Y1: GOSUB 680: HCOLOR= 0: HPLOT X +5,169 TO X +5,Y1: HCOLOR= 3
  49. 490  IF X = X1  OR X = X1 +1  OR X = X1 -1  THEN 560
  50. 500  IF X = X1 +2  OR X = X1 +3  OR X = X1 +4  OR X = X1 +5  THEN  GOSUB 600:X1 = X1 -20:R = R -1: GOTO 530
  51. 510  IF X = X1 -2  OR X = X1 -3  OR X = X1 -4  OR X = X1 -5  THEN  GOSUB 620:X1 = X1 +20:R = R +1: GOTO 530
  52. 520  RETURN 
  53. 530  IF X1 <2  THEN X1 = 2: RETURN 
  54. 540  IF X1 >262  THEN X1 = 262
  55. 550  RETURN 
  56. 560  REM :RANDOM MOVE FOR CENTER STRIKE
  57. 570 RM =  INT( RND(1) *2) +1: IF RM/2 =  INT(RM/2)  THEN 590
  58. 580  GOSUB 620:X1 = X1 +20:R = R +1: GOSUB 380: GOTO 530
  59. 590  GOSUB 600:X1 = X1 -20:R = R -1: GOSUB 380: GOTO 530
  60. 600 TX = X1 -20:TY = Y1 +5: IF 179 -(R(R -1) *5) < = TY  THEN  POP : POP : GOTO 320
  61. 610  HCOLOR= 0: DRAW 12 AT X1,Y1: HCOLOR= 3: RETURN 
  62. 620  IF R = 13  THEN  POP : POP : GOTO 320
  63. 630 TX = X1 +20:TY = Y1 +5: IF 179 -(R(R +1) *5) < = TY  THEN  POP : POP : GOTO 320
  64. 640  GOTO 610
  65. 650  REM  : SOUND OF EXPLOSION
  66. 660  FOR J = 1 TO 4: POKE  -16336, PEEK( -16336): NEXT : RETURN 
  67. 670  REM :SOUND OF SHOT
  68. 680  CALL 770: RETURN 
  69. 690  POKE 768,124: POKE 769,10: POKE 770,173: POKE 771,48: POKE 772,192: POKE 773,165: POKE 774,0: POKE 775,233: POKE 776,1: POKE 777,208: POKE 778,252: POKE 779,230
  70. 700  POKE 780,0: POKE 781,208: POKE 782,243: POKE 783,96: RETURN 
  71. 710  REM :UPDATE SCORE
  72. 720  HCOLOR= 0: FOR J = 1 TO 6:C =  ASC( MID$ (SC$,J,1)) -47: ON J GOSUB 770,780,790,800,810,820: NEXT : HCOLOR= 3
  73. 730  IF FL  THEN  RETURN 
  74. 740 SC = SC +SC(R):SC$ =  STR$(SC)
  75. 750  IF  LEN(SC$) <6  THEN SC$ = "0" +SC$: GOTO 750
  76. 760  FOR J = 1 TO 6:C =  ASC( MID$ (SC$,J,1)) -47: ON J GOSUB 770,780,790,800,810,820: NEXT : RETURN 
  77. 770  DRAW C AT 233,188: RETURN 
  78. 780  DRAW C AT 240,188: RETURN 
  79. 790  DRAW C AT 247,188: RETURN 
  80. 800  DRAW C AT 254,188: RETURN 
  81. 810  DRAW C AT 261,188: RETURN 
  82. 820  DRAW C AT 268,188: RETURN 
  83. 830  DRAW 11 AT MI,179
  84. 840  FOR I = 9 TO 179  STEP 5: DRAW 12 AT MI,I: POKE  -16336, PEEK( -16336): NEXT 
  85. 850 X = MI: GOTO 880
  86. 860  IF X = X1  OR X = X1 +1  OR X = X1 +2  OR X = X1 +3  OR X = X1 +4  OR X = X1 +5  OR X = X1 -1  OR X = X1 -2  OR X = X1 -3  OR X = X1 -4  OR X = X1 -5  THEN 880
  87. 870  RETURN 
  88. 880  HCOLOR= 3: FOR I = 1 TO 5: SCALE= I: GOSUB 650: DRAW 11 AT X,179: NEXT 
  89. 890  HCOLOR= 0: FOR I = 1 TO 5: SCALE= I: GOSUB 650: DRAW 11 AT X,179: NEXT : SCALE= 1
  90. 900  FOR I = 1 TO 1000: NEXT : TEXT : HOME 
  91. 910  IF SC <HS  THEN 960
  92. 920  VTAB 12: FLASH : PRINT "NEW HIGH SCORE :"SC:HS = SC: NORMAL : PRINT 
  93. 930  INPUT "PLEASE ENTER YOUR NAME :";PL$: IF PL$ = ""  THEN 930
  94. 940  PRINT  CHR$(4)"OPEN HIGH.SCORE": PRINT  CHR$(4)"WRITE HIGH.SCORE": PRINT HS: PRINT PL$: PRINT  CHR$(4)"CLOSE"
  95. 950  GOTO 970
  96. 960  VTAB 12: PRINT "HIGH SCORE IS ";: FLASH : PRINT HS;: NORMAL : PRINT " BY "PL$"."
  97. 970  VTAB 22: INPUT "PLAY AGAIN ?";YN$: IF  LEFT$(YN$,1) = "Y"  THEN  FOR I = 0 TO 14:R(I) = 0: NEXT :SC = 0:SC$ = "000000": GOTO 120
  98. 980  HOME : FOR I = 38 TO 1  STEP  -1: GOSUB 650: VTAB 24: HTAB I: PRINT  CHR$(93)" ";: NEXT : VTAB 23: END 
  99. 990  REM :BOMB SEQUENCE
  100. 1000 B =  INT( RND(1) *3 +1)
  101. 1010 S =  INT( RND(1) *5) *10:S = Y1 +S:Y1 = S
  102. 1020  HCOLOR= 3:Z =  PEEK( -16384): IF Z = 136  OR Z = 149  THEN  POKE  -16368,0:M =  ABS(X -X1):X =  INT(X +(5 *(M < = 20) +.5 *(M >20) *M) *((Z = 149) -(Z = 136)))
  103. 1030  IF X <MI  THEN X = MI
  104. 1040  IF X >(MA)  THEN X = MA
  105. 1050  XDRAW 11 AT X,179
  106. 1060  IF Y1 >S  THEN 1090
  107. 1070 R =  INT( RND(1) *14):X1 = (R *20) +2: IF X1 <MI  OR X1 >(MA)  THEN 1070
  108. 1080  FOR I = 1 TO B:B(I) = X1:X1 = X1 +5: NEXT 
  109. 1090  FOR I = 1 TO B: DRAW 13 AT B(I),Y1: NEXT 
  110. 1100 Z =  PEEK( -16384): IF Z = 160  THEN  POKE  -16368,0: GOSUB 1190
  111. 1110  HCOLOR= 0
  112. 1120  FOR I = 1 TO B: DRAW 13 AT B(I),Y1: NEXT 
  113. 1130  DRAW 11 AT X,179: FOR L = 168 TO 170: HPLOT X +3,L TO X +6,L: NEXT : GOSUB 410:Y1 = Y1 +10
  114. 1140  FOR I = 1 TO B: IF Y1 = 179  THEN  GOSUB 1360: IF B = I  THEN BG = 1:Y1 = 9: GOSUB 410
  115. 1150  NEXT 
  116. 1160  IF EG = 1  THEN EG = 0:BG = 0: GOTO 880
  117. 1170  IF BG = 1  THEN BG = 0: GOTO 200
  118. 1180  GOSUB 410: GOTO 1020
  119. 1190  REM :SHOOT AT BOMBS
  120. 1200  HPLOT X +5,169 TO X +5,Y1 +1: GOSUB 680: HCOLOR= 0: HPLOT X +5,169 TO X +5,Y1 +1: HCOLOR= 3
  121. 1210  FOR J = 1 TO B: IF X >B(J) -2.5  AND X <B(J) +2.5  THEN I = J:J = B:EX = 1
  122. 1220  NEXT 
  123. 1230  IF EX = 1  THEN EX = 0: GOTO 1250
  124. 1240  RETURN 
  125. 1250  HCOLOR= 3: FOR K = 1 TO 3: SCALE= K: XDRAW 13 AT B(I),Y1: GOSUB 650: NEXT 
  126. 1260  HCOLOR= 0: FOR K = 2 TO 3: SCALE= K: XDRAW 13 AT B(I),Y1: GOSUB 650: NEXT : SCALE= 1
  127. 1270 FL = 1: GOSUB 710:FL = 0
  128. 1280 SC = SC +150:SC$ =  STR$(SC)
  129. 1290  IF  LEN(SC$) <6  THEN SC$ = "0" +SC$: GOTO 1290
  130. 1300  GOSUB 760
  131. 1310  IF I = B  AND B = 1  THEN Y1 = 9: HCOLOR= 0: DRAW 11 AT X,179: FOR L = 168 TO 170: HPLOT X +3,L TO X +6,L: NEXT : POP : GOTO 200
  132. 1320  IF I = B  THEN B = B -1: RETURN 
  133. 1330  IF I = 1  AND B = 2  THEN B(I) = B(I +1):B = 1: RETURN 
  134. 1340  IF I = 1  AND B = 3  THEN B(I) = B(I +1):B(I +1) = B(I +2):B = 2: RETURN 
  135. 1350  IF I = 2  AND B = 3  THEN B(I) = B(I +1):B = 2: RETURN 
  136. 1360  IF X >B(I) -2.5  AND X <B(I) +2.5  THEN  HCOLOR= 3: FOR K = 1 TO 3: SCALE= K: XDRAW 13 AT B(I),179: GOSUB 650: NEXT 
  137. 1370  IF X >B(I) -2.5  AND X <B(I) +2.5  THEN  HCOLOR= 0: FOR K = 1 TO 3: SCALE= K: XDRAW 13 AT B(I),179: GOSUB 650: NEXT : HCOLOR= 3: SCALE= 1:EG = 1: RETURN 
  138. 1380  HCOLOR= 3: FOR K = 1 TO 3: SCALE= K: XDRAW 13 AT B(I),179: GOSUB 650: NEXT : HCOLOR= 0: FOR K = 1 TO 3: SCALE= K: XDRAW 13 AT B(I),179: GOSUB 650: NEXT : HCOLOR= 3: SCALE= 1
  139. 1390  IF B(I)/20 < > INT(B(I)/20)  THEN B(I) = B(I) -1: GOTO 1390
  140. 1400 X1 = B(I): GOSUB 420: RETURN 
  141. 1410  PRINT  CHR$(4)"VERIFY HIGH.SCORE": PRINT  CHR$(4)"OPEN HIGH.SCORE": PRINT  CHR$(4)"READ HIGH.SCORE": INPUT HS,PL$: PRINT  CHR$(4)"CLOSE"
  142. 1420  RETURN 
  143. 1430  TEXT : HOME 
  144. 1440  VTAB 12: HTAB 13: INVERSE : PRINT "CLAUSTROPHOBIA": PRINT : HTAB 12: PRINT "BY:  RUDY A. GUY": PRINT : PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC. **": NORMAL 
  145. 1450  IF HS >0  THEN  PRINT : PRINT "PRESENT HIGH SCORE IS "HS" BY "PL$
  146. 1460  PRINT  CHR$(4)"BLOAD PHOBIA.S"
  147. 1470  POKE 232,0: POKE 233,96
  148. 1480  VTAB 22: INPUT "DO YOU NEED INSTRUCTIONS ?";YN$: IF  LEFT$(YN$,1) = "N"  THEN  RETURN 
  149. 1490  HOME : HTAB 14: INVERSE : PRINT "CLAUSTROPHOBIA": NORMAL : PRINT 
  150. 1500  PRINT "THE OBJECT OF THE GAME IS TO SHOOT THE  DESCENDING ALIENS IN SUCH A MANNER THAT THEY WILL MOVE TO THE EXTREME LEFT OR   RIGHT SIDE OF THE SCREEN. ";
  151. 1510  PRINT "THE COLUMNS ONEITHER SIDE OF THE SCREEN ARE WORTH AS  FOLLOWS:": PRINT 
  152. 1520  PRINT "  OUTSIDE COLUMNS" TAB( 27)"100 PTS.": PRINT "  ONE COLUMN IN" TAB( 28)"50 PTS.": PRINT "  TWO COLUMNS IN" TAB( 28)"25 PTS.": PRINT "  THREE COLUMNS IN" TAB( 28)"10 PTS.": PRINT "  FOUR COLUMNS TO CENTER" TAB( 29)"5 PTS.": PRINT 
  153. 1530  PRINT "FROM TIME TO TIME, A SERIES OF BOMBS MAYAPPEAR. EACH BOMB IS WORTH 150 POINTS.  WHEN A BOMB OR AN ALIEN CRAFT REACHES   THE BOTTOM OF THE PLAYING AREA, IT WILL REDUCE THE AREA THAT YOUR GUN CAN MOVE."
  154. 1540  PRINT "A FRESH SCREEN IS OBTAINED BY SCORING   10,000 POINTS !": PRINT : PRINT "PRESS ANY KEY TO CONTINUE";: GET YN$
  155. 1550  HOME : PRINT "USE THE LEFT AND RIGHT ARROW KEYS TO    MOVE YOUR GUN, AND THE SPACE BAR TO     FIRE.": PRINT : PRINT "PRESS ANY KEY TO BEGIN": GET YN$: PRINT : RETURN 
  156. 1560  REM : ERROR ROUTINE
  157. 1570 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256: POKE 216,0
  158. 1580  IF ER = 6  THEN  PRINT  CHR$(4)"OPEN HIGH.SCORE": PRINT  CHR$(4)"WRITE HIGH.SCORE": PRINT 0: PRINT : PRINT  CHR$(4)"CLOSE": RUN 
  159. 1590  IF ER = 255  THEN  TEXT : GOTO 980
  160. 1600  TEXT : HOME : VTAB 12: PRINT "ERROR #"ER" HAS OCCURRED IN LINE "EL
  161. 1610  PRINT : PRINT "PLEASE REFER TO YOUR APPLESOFT MANUAL."