Advertisement
gibstov

Interstellar War

Mar 24th, 2015
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.96 KB | None | 0 0
  1. 10 REM *****************************************************
  2. 20 REM * *
  3. 30 REM * SPACE WAR *
  4. 40 REM * For one or two Players on a Graphics Terminal *
  5. 50 REM * Jobst Brandt *
  6. 60 REM * Hewlett-Packard *
  7. 61 REM * (01 Apr 82) *
  8. 65 REM * *
  9. 66 REM * Modified for the Atari 8-bit *
  10. 67 REM * by Gibstov *
  11. 68 REM * (15 Mar 2015) *
  12. 80 REM * *
  13. 90 REM *****************************************************
  14. 100 DIM C(46),O(21,3),S(16,2),E(8,2),Q(4)
  15. 110 DIM N1$(2),P$(1),V$(2),V1(2),A$(10),N$(10),NAM1$(10),NAM2$(10),P1$(10),R1$(10),CH$(6),A1$(10)
  16. 115 CH$="BDHS/E"
  17. 120 REM Star locs and size: Xmax=720, Ymax=360, Smax=0, Smin=0
  18. 130 DATA 0,0,0,0,10,0,-2,0,0,2,-1,0,3,2,-8,0,-2,-2,-4,0,-4
  19. 140 DATA -2,4,-2,4,0,2,-2,8,0,-3,2,1,0,0,2
  20. 145 DATA -2,6,-2,-6,-6,-2,6,-2,2,-6,2,6,6,2,-6,2
  21. 150 FOR I=1 TO 4:READ A:Q(I)=A:NEXT I:FOR I=1 TO 16:FOR J=1 TO 2:READ A:S(I,J)=A:NEXT J:NEXT I:FOR I=1 TO 8:FOR J=1 TO 2:READ A:E(I,J)=A:NEXT J:NEXT I
  22. 160 GOSUB 2740:G=R1
  23. 170 REM - Q CONTAINS Xlim,Ylim(screen),Distance,Maxsize(stars)
  24. 220 M=INT(2*RND(1)+ 1):O = 0
  25. 230 N1$ = "9":P$ = "2"
  26. 250 GOSUB 2370
  27. 270 GR.0
  28. 280 F1=0:F2=0:F3=0:V1(1)=20:V1(2)=20
  29. 290 POS.2,21:PRINT "(";P$;") One or two players";
  30. 300 INPUT A$:P1$ = A$
  31. 310 GOSUB 2000: ON R1 GOTO 290,290,290,270,290,2980
  32. 320 IF A$ = "" THEN A$ = P$
  33. 330 Q=VAL(A$)
  34. 340 IF Q <> 1 AND Q <> 2 THEN 290
  35. 350 NP=Q
  36. 360 P$=STR$(NP)
  37. 370 IF NP=2 THEN 400
  38. 380 NAM1$="Player":NAM2$= "Enemy"
  39. 390 GOTO 470
  40. 400 NAM1$="Spock":NAM2$ = "Darth": FOR J=1 TO 2:N$=NAM1$:IF J=2 THEN N$=NAM2$
  41. 410 POS.2,21: PRINT "(";N$;") Name of captain #";J;" ";
  42. 420 INPUT A$
  43. 430 P1$ = A$: GOSUB 2000
  44. 440 IF A$ = "" THEN 460
  45. 450 P1$ = A$:GOSUB 2610:IF J=1 THEN NAM1$= R1$:GOTO 460
  46. 455 NAM2$=R1$
  47. 460 NEXT J
  48. 470 POS.2,21: PRINT "(";N1$;") How many stars? (0 to 18): ";
  49. 480 INPUT A$
  50. 490 P1$ = A$: GOSUB 2000: ON R1 GOTO 280,470,470,470,280,2980
  51. 500 IF A$ = "" THEN A$ = N1$
  52. 510 N = VAL (A$)
  53. 530 IF ABS(N)<0 OR ABS(N)> 18 THEN 470
  54. 540 N1$ = STR$ (N)
  55. 550 REM O=Black hole
  56. 560 O=(N<0)
  57. 570 N=ABS(N)
  58. 580 Q(4)=INT(10-N/6)
  59. 590 Q(3)=INT(Q(2)/3)-N
  60. 600 GR.0
  61. 610 REM -------------------- MAKE STARS ---------------------
  62. 620 N=N+O
  63. 630 FOR I=1 TO N
  64. 640 R=0
  65. 650 R=R+1
  66. 660 IF R>20 THEN I=N+1: NEXT I: GOTO 630
  67. 670 O(I,3)=Q(4)
  68. 680 REM -- J: 1 = Xpos, 2 = Ypos, 3 = Mass/Size --
  69. 690 FOR J=3 TO 1 STEP -1
  70. 700 O(I,J)=INT((Q(J)-2*O(I,3))*RND(1)+O(I,3))
  71. 710 NEXT J
  72. 720 FOR J=1 TO I-1:IF J>I-1 THEN 750
  73. 730 T=(O(I,3)+O(J,3)+ 10)^2
  74. 740 IF (O(I,1)-O(J,1))^2+(O(I,2)-O(J,2))^2 < T THEN NEXT J:GOTO 650
  75. 750 NEXT J
  76. 760 NEXT I
  77. 770 REM ----------------- PLACE SPACE SHIPS -----------------
  78. 780 REM -- Space ship size = 5 --
  79. 790 O(N + 1,3)=5:O(N + 2,3)=5
  80. 800 FOR J=1 TO 2
  81. 810 T = 40
  82. 820 IF J=1 THEN I=.28*Q(1):Q=0:GOTO 840
  83. 830 T=-T:I=- .28*Q(1):Q= Q(1)
  84. 840 R=0
  85. 850 R=R + 1
  86. 860 IF R > 20 THEN J = 3: NEXT J: GOTO 630
  87. 870 X = INT(I * RND (1)) + Q + T
  88. 880 Y = INT((Q(2) - 30) * RND (1) + 20)
  89. 890 FOR K = 1 TO N
  90. 900 IF (X - O(K,1))^2+(Y- O(K,2))^2<(O(K,3)*2)^2 THEN NEXT K:GOTO 850
  91. 910 NEXT K
  92. 920 O(N + J,1) = X
  93. 930 O(N + J,2) = Y
  94. 940 NEXT J
  95. 950 A1$(1) = "0":A1$(2) = "180"
  96. 960 IF NP > 1 THEN A$ = N$(1):N$(1) = N$(2):N$(2) = A$
  97. 970 REM -------------------- PLOT STARS ---------------------
  98. 980 GR.8: COLOR 1:POKE 710,0
  99. 990 Z1=3.14159 * (1 / 180)
  100. 1000 FOR I = 0 TO 45
  101. 1010 C(I + 1)=COS(I * 10 * Z1)
  102. 1020 NEXT I
  103. 1030 FOR I = 1 TO N - O
  104. 1040 FOR J = 1 TO 37
  105. 1050 X=INT(O(I,1) + O(I,3) * C(J) + .5)
  106. 1060 Y=INT (O(I,2) - O(I,3) * C(J + 9) + .5)
  107. 1070 IF J = 1 THEN PLOT X,Y
  108. 1080 DR. X,Y
  109. 1090 NEXT J
  110. 1110 NEXT I
  111. 1130 REM ------------------ PLOT SPACE SHIPS -----------------
  112. 1140 FOR I = 1 TO 2
  113. 1150 P1 = O(N + I,1):P2 = O(N + I,2):P4= I:GOSUB 2120
  114. 1160 NEXT I
  115. 1170 IF A$(1,1) = "I" THEN 1450
  116. 1180 GOTO 1210
  117. 1190 REM --------------------- PLAY GAME ---------------------
  118. 1200 M=M-INT(M / 2) * 2 + 1
  119. 1210 IF NP = 1 THEN M = 1
  120. 1220 N$=NAM1$:IF M=2 THEN N$=NAM2$
  121. 1240 POS.26,23: PRINT "(";A1$(M);") ";N$;"'s, launch angle: ";
  122. 1250 B=20:F1 = 1
  123. 1260 INPUT A$
  124. 1270 IF A$ = "" THEN A$ = A1$(M)
  125. 1280 P1$ = A$: GOSUB 2000: ON R1 GOTO 1240,980,1240,270,1240,2980
  126. 1290 A=VAL (A$)
  127. 1300 A=-SGN(A)*(ABS(A)-INT(ABS(A)/360)*360)
  128. 1310 A1$(M)=STR$(-A)
  129. 1320 IF N = 0 THEN 1450
  130. 1330 POS.26,23
  131. 1335 N$=NAM1$:IF M=2 THEN N$=NAM2$
  132. 1340 PRINT "(";V1(M);") ";N$;"'s initial velocity: ";
  133. 1350 INPUT A$
  134. 1360 IF A$="" THEN A$=STR$(V1(M))
  135. 1370 P1$=A$:GOSUB 2000:ON R1 GOTO 1240,980,1330,270,1240,2980
  136. 1380 B=VAL(A$)
  137. 1390 IF B >= 0 AND B<=20 THEN 1420
  138. 1400 POS.26,22: PRINT "Velocity must be from 0 to 20"
  139. 1410 GOTO 1330
  140. 1420 V1(M)=B
  141. 1450 U1=0:U2=0:V1=0:V2=0:F3=0
  142. 1460 X=.35*B*COS(A*Z1)
  143. 1470 Y=.35*B*SIN(A*Z1)
  144. 1480 U=X+O(N+M,1)+8*COS (A*Z1)
  145. 1490 V=Y+O(N+M,2)+8*SIN (A*Z1)
  146. 1500 P1 = U:P2 = V: GOSUB 2230
  147. 1510 IF F2 THEN 1570
  148. 1520 REM ----------------- DRAW ROCKET PATH ------------------
  149. 1530 U1 = INT(U + .5):V1=INT (V + .5)
  150. 1540 IF U1<>U2 OR V1<>V2 THEN P1=U1:P2=V1: GOSUB 2290
  151. 1550 U2=U1:V2=V1
  152. 1560 REM -- E = Xforce, F = Yforce --
  153. 1570 E=0:F=0
  154. 1580 FOR J=1 TO N
  155. 1590 R5=O(J,1)-U
  156. 1600 R6=O(J,2)-V
  157. 1610 R4=R5^2+R6^2
  158. 1620 R3=SQR(R4)
  159. 1630 R2=R5/R3
  160. 1640 R1=R6/R3
  161. 1650 G=.017*(O(J,3)^3)/R4
  162. 1660 E=E+G*R2
  163. 1670 F=F+G*R1
  164. 1680 NEXT J
  165. 1690 X=X+E
  166. 1700 Y=Y+F
  167. 1710 U=U+X
  168. 1720 V=V+Y
  169. 1730 REM ------------------ FIND COLLISIONS ------------------
  170. 1740 IF F2 THEN 1790
  171. 1750 FOR J = 1 TO N + 2
  172. 1755 IF J = N + 1 THEN 1780
  173. 1760 IF O AND J = N THEN 1780
  174. 1770 IF (U-O(J,1))^2+(V-O(J,2))^2<O(J,3)^2 THEN F1=J:J=N+3:NEXT J:J=F1:GOTO 1880
  175. 1780 NEXT J
  176. 1790 IF U<-Q(1) OR U>Q(1)*2 OR V<-Q(2) OR V>Q(2)*2 THEN 1200
  177. 1800 F2 = (U<0 OR U>Q(1) OR V<0 OR V>Q(2))
  178. 1810 REM -- F2=F3 (no change............) --
  179. 1820 REM -- F2=1 (just went off screen.) --
  180. 1830 REM -- F3=1 (just came onto screen) --
  181. 1840 IF F2 = F3 THEN 1510
  182. 1850 IF F3 THEN P1=U:P2=V:GOSUB 2230
  183. 1860 F3 = F2
  184. 1870 GOTO 1510
  185. 1880 REM ------------------ MAKE EXPLOSIONS ------------------
  186. 1890 P1 = U + 2:P2 = V + 2: GOSUB 2230
  187. 1900 FOR I = 1 TO 8:P1 = E(I,1):P2=E(I,2):GOSUB 2250:NEXT I
  188. 1910 IF J <= N THEN 1200
  189. 1920 POS.16,23
  190. 1925 N$=NAM1$:IF M=2 THEN N$=NAM2$
  191. 1930 PRINT N$;" destroyed ";
  192. 1933 N$=NAM1$:IF M=2 THEN N$=NAM2$
  193. 1935 PRINT N$;"'s ship!";
  194. 1940 PRINT " (Y) Again? : ";
  195. 1950 INPUT A$
  196. 1970 IF A$(1,2) = "//" THEN 2980
  197. 1980 A$ = A$(1,1): IF A$ = "D" OR A$ = "I" THEN 980
  198. 1985 IF A$ = "N" OR A$ = "E" THEN 2980
  199. 1990 GOTO 270
  200. 2000 REM ******************* INPUT ******************* FNC ***
  201. 2010 IF LEN(P1$)>1 THEN P1$=P1$(1,1)
  202. 2060 IF P1$ = "" THEN R1 = 0: RETURN
  203. 2061 P = 7
  204. 2062 P = P - 1: IF P = 0 THEN 2100
  205. 2063 IF CH$(P,P) = P1$ THEN 2080
  206. 2064 GOTO 2062
  207. 2080 IF A$(1,2) = "//" THEN P = 6
  208. 2090 IF P = 3 THEN GOSUB 2370
  209. 2100 R1 = P: RETURN
  210. 2120 REM **************** MAKE SHIPS ***************** FNS ***
  211. 2140 S = (P4-1)*2-1
  212. 2150 GOSUB 2230
  213. 2160 FOR K=1 TO 16:P1=S(K,1)*S:P2=S(K,2):GOSUB 2250:NEXT K
  214. 2210 RETURN
  215. 2230 REM ***************** G CURSOR ****************** FNG$ **
  216. 2240 CX = P1:CY = P2: RETURN
  217. 2250 REM ***************** DRAW LINE *************************
  218. 2260 IF NOT (CX>=0 AND CX<=Q(1) AND CY>=0 AND CY<=Q(2)) THEN 2270
  219. 2261 IF NOT (CX+P1>=0 AND CX+P1<=Q(1) AND CY+P2>=0 AND CY+P2<=Q(2)) THEN 2270
  220. 2265 PL.CX,CY:DR.CX+P1,CY+P2
  221. 2270 CX=CX+P1:CY=CY+P2
  222. 2280 RETURN
  223. 2290 IF NOT (CX>=0 AND CX<=Q(1) AND CY>=0 AND CY<=Q(2)) THEN 2300
  224. 2291 IF NOT (P1>=0 AND P1<= Q(1) AND P2>=0 AND P2<= Q(2)) THEN 2300
  225. 2295 PLOT CX,CY:DR.P1,P2
  226. 2300 CX = P1:CY = P2: RETURN
  227. 2370 REM ******************* HELP ******************** FNH ***
  228. 2410 GR.0
  229. 2420 PRINT "SPACE WAR ": POS.1,7
  230. 2430 PRINT CHR$(127);"Commands:": PRINT
  231. 2440 PRINT CHR$(127);"H = Help"
  232. 2450 PRINT CHR$(127);"S = Start"
  233. 2460 PRINT CHR$(127);"D = Display"
  234. 2470 PRINT CHR$(127);"I = Instant replay after hit"
  235. 2480 PRINT CHR$(127);" / or B = Back"
  236. 2490 PRINT CHR$(127);"// or E = Exit": POS.2,17
  237. 2500 PRINT "Negative number of stars gives a BLACK HOLE"
  238. 2510 POS.2,19: PRINT "(Y) Are you ready to play? (Y/N): ";
  239. 2520 INPUT A$:IF LEN(A$)>2 THEN A$=A$(1,2)
  240. 2530 IF A$ > "" THEN A=ASC(A$):A$(1,1)=CHR$(A-32*(A>96 AND A<123))
  241. 2540 IF A$ = "N" OR A$ = "E" OR A$ = "//" THEN 2580
  242. 2550 IF A$ = "H" THEN 2410
  243. 2560 RETURN
  244. 2570 RETURN
  245. 2580 GR.0
  246. 2590 END
  247. 2610 REM ************** FUNCTION DOWNSHIFT *********** FNS$ **
  248. 2640 M = 0: IF P1$ = "" THEN RETURN
  249. 2650 FOR I = 1 TO LEN (P1$)
  250. 2660 K= ASC(P1$(I,I))
  251. 2670 IF K=32 THEN M = 0
  252. 2680 IF K<65 OR K>91 THEN 2710
  253. 2690 REM IF M THEN P1$=P1$(1,I-1)+CHR$(K+32)+P1$(I+1)
  254. 2700 M = 1
  255. 2710 NEXT I
  256. 2720 R1$ = P1$: RETURN
  257. 2740 REM *********** POLL TERMINAL CAPABILITY ******** FNi ***
  258. 2750 R1=1:Q(1)=319:Q(2)=159
  259. 2760 RETURN
  260. 2970 REM ******************** EXIT ***************************
  261. 2980 IF G THEN GR.0
  262. 3000 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement