home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 1: Collection A / 17Bit_Collection_A.iso / files / 36.dms / 36.adf / INVADER.bas < prev    next >
BASIC Source File  |  1988-05-22  |  7KB  |  140 lines

  1. 10    SCREEN 0,4
  2. 20    ?"  - INVADER -":?:?"By Andrew Eckert":?"(C) Eckwell Inc."
  3. 30    ?" January 1986"
  4. 40    ?:?:?"Prepare for battle!":? AT (1,23);" ";
  5. 100   X%=126: Y%=122: HP%=1000
  6. 105   RANDOMIZE 1
  7. 110   DIM ENEMY%(10,5): DIM SHOT%(3): DIM ESHOT%(3): DIM K%(2)
  8. 120   DIM P%(512): DIM H%(128): DIM D%(128): DIM S%(128): DIM STARS%(5,3)
  9. 130   OPEN "I",1,"DRONE.INV": OPEN "I",2,"HOVERER.INV": OPEN "I",3,"SPIKER.INV"
  10. 140   INPUT #1,Q: INPUT #2,Q: INPUT #3,Q
  11. 150   FOR Q=0 TO 128: INPUT #1,D%(Q): INPUT #2,H%(Q): INPUT #3,S%(Q)
  12. 160   NEXT Q: CLOSE 1,2,3
  13. 170   OPEN "I",1,"SHIP.INV":INPUT #1,Q
  14. 180   FOR Q=0 TO 512: INPUT #1,P%(Q): NEXT Q: CLOSE 1
  15. 185   FOR Q=1 TO 5: STARS%(Q,1)=INT(RND(1)*300)+1: STARS%(Q,2)=INT(RND(1)*170)+3: STARS%(Q,3)=(INT(RND(1)*4)+1)*5: NEXT Q
  16. 190   PENO 1: PENA 1: BOX(0,0 ; 300,175),1
  17. 200   ? AT (1,23);"";
  18. 210   W=1: QQ=INT(RND(1)*3)+1: FOR Q=1 TO QQ: ENEMY%(Q,1)=1: ENEMY%(Q,4)=(INT(RND(1)*3)+1)
  19. 215   ENEMY%(Q,5)=INT(RND(1)*7)-3
  20. 220   ENEMY%(Q,2)=INT(RND(1)*255)+10: ENEMY%(Q,3)=0
  21. 225   IF ENEMY%(Q,5)=0 AND ENEMY%(Q,4)=2 THEN 215
  22. 230   IF ENEMY%(Q,4)=1 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), D%()
  23. 240   IF ENEMY%(Q,4)=2 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), H%()
  24. 250   IF ENEMY%(Q,4)=3 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), S%()
  25. 260   NEXT Q
  26. 270   GSHAPE (X%,Y%), P%()
  27. 500   ' - MAIN ROUTINE -
  28. 505   IF HP%<0 THEN 5000
  29. 510   ASK MOUSE XX%,YY%,BB%
  30. 520   IF XX%+9<X%+23 THEN XD%=-10
  31. 525   IF XX%-9>X%+23 THEN XD%=10
  32. 530   IF XX%>X%+19 AND XX%<X%+30 THEN XD%=XX%-(X%+23)
  33. 540   X%=X%+XD%: IF X%<0 THEN X%=0: XD%=0
  34. 550   IF X%>253 THEN X%=253: XD%=0
  35. 560   IF YY%+9<Y% THEN Y%=Y%-10: IF Y%<81 THEN Y%=81
  36. 570   IF YY%-9>Y% THEN Y%=Y%+10: IF Y%>121 THEN Y%=121
  37. 580   GSHAPE (X%,Y%), P%()
  38. 590   GOSUB 1000: GOSUB 2000: GOSUB 3000: GOSUB 4000: GOSUB 6000
  39. 650   IF BB%=4 AND SHOT%(1)=0 THEN SHOT%(1)=1: SHOT%(2)=X%+23: SHOT%(3)=Y%+34
  40. 660   ? AT(1,23);"H.P.:";HP%;TAB(14);"WAVE:";W;TAB(24);"KILLS:";K%(1);
  41. 670   IF K%(2)>W*5 THEN HP%=HP%+INT(RND(1)*100)+200: W=W+1: K%(2)=0
  42. 990   GOTO 500
  43. 1000  ' - MOVE/DRAW ENEMIES -
  44. 1005  PENO 1: PENA 1
  45. 1010  FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 1500
  46. 1020  QQ=ENEMY%(Q,4): ON QQ GOTO 1030,1100,1300
  47. 1030  ' DRONE
  48. 1040  ENEMY%(Q,3)=ENEMY%(Q,3)+4: IF ENEMY%(Q,3)>146 THEN ENEMY%(Q,1)=0:BOX(ENEMY%(Q,2)+3,146 ; ENEMY%(Q,2)+13,175),1: GOTO 1500
  49. 1050  ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5): IF ENEMY%(Q,2)>284 THEN ENEMY%(Q,1)=0: BOX(284,ENEMY%(Q,3) ; 300,ENEMY%(Q,3)+19),1: GOTO 1500
  50. 1060  IF ENEMY%(Q,2)<0 THEN ENEMY%(Q,1)=0: BOX(16,ENEMY%(Q,3) ; 0,ENEMY%(Q,3)+19),1: GOTO 1500
  51. 1070  GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), D%(): GOTO 1500
  52. 1100  ' HOVERER
  53. 1110  ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5)
  54. 1120  IF ENEMY%(Q,2)<0 THEN ENEMY%(Q,1)=0: BOX (0,0 ; 23,6),1: GOTO 1500
  55. 1130  IF ENEMY%(Q,2)>275 THEN ENEMY%(Q,1)=0: BOX(277,0 ; 300,6),1: GOTO 1500
  56. 1140  GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), H%()
  57. 1150  IF INT(RND(1)*50)+1<>5 THEN 1500
  58. 1160  LINEPAT &B1011010110101101: FOR QQ=1 TO 20: PENA INT(RND(1)*14)+1
  59. 1170  DRAW (ENEMY%(Q,2)+13,5 TO ENEMY%(Q,2)+13,175): NEXT QQ: PENA 1
  60. 1175  LINEPAT &B1111111111111111: DRAW (ENEMY%(Q,2)+13,5 TO ENEMY%(Q,2)+13,175)
  61. 1180  IF ENEMY%(Q,2)>X%-3 AND ENEMY%(Q,2)<X%+25 THEN HP%=HP%-(INT(RND(1)*100)+100)
  62. 1190  GOTO 1500
  63. 1300  ' SPIKER
  64. 1310  ENEMY%(Q,3)=ENEMY%(Q,3)+5
  65. 1320  IF ENEMY%(Q,3)>151 THEN ENEMY%(Q,1)=0: BOX (ENEMY%(Q,2),151 ; ENEMY%(Q,2)+19,175),1: GOTO 1500
  66. 1330  IF X%<ENEMY%(Q,2) THEN ENEMY%(Q,5)=ENEMY%(Q,5)-1: IF ENEMY%(Q,5)<-5 THEN ENEMY%(Q,5)=-5
  67. 1340  IF X%>ENEMY%(Q,2) THEN ENEMY%(Q,5)=ENEMY%(Q,5)+1: IF ENEMY%(Q,5)>5 THEN ENEMY%(Q,5)=5
  68. 1350  ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5)
  69. 1380  GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), S%()
  70. 1500  NEXT Q
  71. 1510  RETURN
  72. 2000  ' - CRASH? -
  73. 2010  FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 OR ENEMY%(Q,4)=2 THEN 2500
  74. 2020  ON ENEMY%(Q,4) GOTO 2030,2000,2200
  75. 2030  IF ENEMY%(Q,2)>X%+2 AND ENEMY%(Q,2)<X%+34 AND ENEMY%(Q,3)>Y%-9 AND ENEMY%(Q,3)<Y%+44 THEN GOSUB 2600
  76. 2040  GOTO 2500
  77. 2200  IF ENEMY%(Q,2)>X%-8 AND ENEMY%(Q,2)<X%+32 AND ENEMY%(Q,3)>Y%-14 AND ENEMY%(Q,3)<Y%+39 THEN GOSUB 2600
  78. 2210  GOTO 2500
  79. 2500  NEXT Q
  80. 2510  RETURN
  81. 2600  ' - BOOM -
  82. 2610  FOR QQ=1 TO 30: RGB 1,15,9,10: RGB 1,15,15,2: RGB 1,14,3,0: RGB 1,0,0,0: NEXT QQ
  83. 2620  HP%=HP%-(INT(RND(1)*50)+80)
  84. 2630  ENEMY%(Q,1)=0: PENO 1: PENA 1: BOX(ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+18, ENEMY%(Q,3)+24),1
  85. 2640  RETURN
  86. 3000  ' - MOVE STARS -
  87. 3010  FOR Q=1 TO 5: PENA 1: DRAW(STARS%(Q,1),STARS%(Q,2))
  88. 3020  STARS%(Q,2)=STARS%(Q,2)+STARS%(Q,3): IF STARS%(Q,2)>175 THEN 3030
  89. 3025  GOTO 3040
  90. 3030  STARS%(Q,1)=INT(RND(1)*280)+10: STARS%(Q,2)=0: STARS%(Q,3)=INT(RND(1)*4)+1: STARS%(Q,3)=STARS%(Q,3)*5
  91. 3040  PENA 2: DRAW (STARS%(Q,1),STARS%(Q,2))
  92. 3050  NEXT Q: RETURN
  93. 4000  ' - NEW ENEMIES -
  94. 4010  QQ=0: FOR Q=1 TO 10: QQ=QQ+ENEMY%(Q,1): NEXT Q: IF QQ>W+3 THEN RETURN
  95. 4020  IF INT(RND(1)*5)+1<>3 THEN RETURN
  96. 4030  FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 4050
  97. 4040  NEXT Q: RETURN
  98. 4050  ENEMY%(Q,1)=1: ENEMY%(Q,2)=INT(RND(1)*250)+25: ENEMY%(Q,3)=0
  99. 4060  ENEMY%(Q,4)=INT(RND(1)*3)+1: ENEMY%(Q,5)=INT(RND(1)*7)-3: IF ENEMY%(Q,4)=3 THEN ENEMY%(Q,5)=0
  100. 4065  IF ENEMY%(Q,4)=2 AND ENEMY%(Q,5)=0 THEN 4050
  101. 4070  RETURN
  102. 5000  REM - PLAYER DEATH -
  103. 5010  FOR Q=1 TO 150: RGB 1,15,15,15: RGB 1,15,15,2: RGB 1,15,6,0: RGB 1,0,0,0: NEXT Q
  104. 5130  FOR QQ=1 TO 100 STEP 5: PENO INT(RND(1)*14)+2: CIRCLE(X%+23,Y%+29),QQ,.5: NEXT QQ
  105. 5140  PENO 1: FOR QQ=1 TO 100 STEP 5: CIRCLE(X%+23,Y%+29),QQ,.5: NEXT QQ
  106. 5150  SLEEP (10^5): SCNCLR: ? AT(1,1);" ";
  107. 5160  ? AT (14,6);"GAME  OVER":? AT (1,17);
  108. 5170  ?"LAST WAVE:   ";W:?"KILLS:       ";K%(1)
  109. 5180  ?:?
  110. 5990  END
  111. 6000  ' - SHOTS -
  112. 6010  IF SHOT%(1)=0 THEN RETURN
  113. 6020  PENA 1: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
  114. 6030  SHOT%(3)=SHOT%(3)-25: IF SHOT%(3)<0 THEN SHOT%(1)=0: RETURN
  115. 6040  PENA 4: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
  116. 6050  FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 6400
  117. 6060  ON ENEMY%(Q,4) GOTO 6070,6150,6250
  118. 6070  IF SHOT%(2)>ENEMY%(Q,2)+1 AND SHOT%(2)<ENEMY%(Q,2)+13 AND SHOT%(3)>ENEMY%(Q,3) AND SHOT%(3)<ENEMY%(Q,3)+44 THEN 6090
  119. 6080  GOTO 6400
  120. 6090  ENEMY%(Q,1)=0: K%(1)=K%(1)+1: PENO 1: PENA 1
  121. 6100  BOX (ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+13,ENEMY%(Q,3)+19),1: SHOT%(1)=0: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
  122. 6120  FOR Q=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT Q: GOTO 6400
  123. 6150  IF SHOT%(2)>ENEMY%(Q,2)+2 AND SHOT%(2)<ENEMY%(Q,2)+22 AND SHOT%(3)<25 THEN 6170
  124. 6160  GOTO 6400
  125. 6170  FOR QQ=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT QQ
  126. 6180  PENO 1: PENA 1: BOX (ENEMY%(Q,2),0 ; ENEMY%(Q,2)+23,5),1: DRAW (SHOT%(2),0 TO SHOT%(2),175): SHOT%(1)=0
  127. 6183  FOR QQ=1 TO 13: PENA INT(RND(1)*14)+2: DRAW (ENEMY%(Q,2)-QQ,QQ): DRAW (ENEMY%(Q,2)+QQ,QQ): DRAW (ENEMY%(Q,2),QQ)
  128. 6185  SLEEP (10^3)
  129. 6186  PENA 1: DRAW (ENEMY%(Q,2)-QQ,QQ): DRAW (ENEMY%(Q,2)+QQ,QQ): DRAW (ENEMY%(Q,2),QQ): NEXT QQ
  130. 6190  ENEMY%(Q,1)=0: K%(2)=K%(2)+1: K%(1)=K%(1)+1: GOTO 6400
  131. 6250  IF SHOT%(2)>ENEMY%(Q,2)+5 AND SHOT%(2)<ENEMY%(Q,2)+19 AND SHOT%(3)<ENEMY%(Q,3)+49 AND SHOT%(3)>ENEMY%(Q,3)+5 THEN 6270
  132. 6260  GOTO 6400
  133. 6270  FOR QQ=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT QQ
  134. 6280  PENO 1: PENA 1: BOX (ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+17,ENEMY%(Q,3)+23),1: DRAW (SHOT%(2),0 TO SHOT%(2),175): SHOT%(1)=0
  135. 6290  ENEMY%(Q,1)=0: K%(1)=K%(1)+1
  136. 6300  FOR QQ=1 TO 15 STEP 3: PENO INT(RND(1)*14)+2: CIRCLE(ENEMY%(Q,2)+12,ENEMY%(Q,3)+15),QQ
  137. 6310  PENO 1: CIRCLE(ENEMY%(Q,2)+12,ENEMY%(Q,3)+15),QQ: NEXT QQ
  138. 6400  NEXT Q: RETURN
  139. 6500  RETURN
  140.