Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 10 REM *****************************************************
- 20 REM * *
- 30 REM * SPACE WAR *
- 40 REM * For one or two Players on a Graphics Terminal *
- 50 REM * Jobst Brandt *
- 60 REM * Hewlett-Packard *
- 61 REM * (01 Apr 82) *
- 65 REM * *
- 66 REM * Modified for the Atari 8-bit *
- 67 REM * by Gibstov *
- 68 REM * (15 Mar 2015) *
- 80 REM * *
- 90 REM *****************************************************
- 100 DIM C(46),O(21,3),S(16,2),E(8,2),Q(4)
- 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)
- 115 CH$="BDHS/E"
- 120 REM Star locs and size: Xmax=720, Ymax=360, Smax=0, Smin=0
- 130 DATA 0,0,0,0,10,0,-2,0,0,2,-1,0,3,2,-8,0,-2,-2,-4,0,-4
- 140 DATA -2,4,-2,4,0,2,-2,8,0,-3,2,1,0,0,2
- 145 DATA -2,6,-2,-6,-6,-2,6,-2,2,-6,2,6,6,2,-6,2
- 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
- 160 GOSUB 2740:G=R1
- 170 REM - Q CONTAINS Xlim,Ylim(screen),Distance,Maxsize(stars)
- 220 M=INT(2*RND(1)+ 1):O = 0
- 230 N1$ = "9":P$ = "2"
- 250 GOSUB 2370
- 270 GR.0
- 280 F1=0:F2=0:F3=0:V1(1)=20:V1(2)=20
- 290 POS.2,21:PRINT "(";P$;") One or two players";
- 300 INPUT A$:P1$ = A$
- 310 GOSUB 2000: ON R1 GOTO 290,290,290,270,290,2980
- 320 IF A$ = "" THEN A$ = P$
- 330 Q=VAL(A$)
- 340 IF Q <> 1 AND Q <> 2 THEN 290
- 350 NP=Q
- 360 P$=STR$(NP)
- 370 IF NP=2 THEN 400
- 380 NAM1$="Player":NAM2$= "Enemy"
- 390 GOTO 470
- 400 NAM1$="Spock":NAM2$ = "Darth": FOR J=1 TO 2:N$=NAM1$:IF J=2 THEN N$=NAM2$
- 410 POS.2,21: PRINT "(";N$;") Name of captain #";J;" ";
- 420 INPUT A$
- 430 P1$ = A$: GOSUB 2000
- 440 IF A$ = "" THEN 460
- 450 P1$ = A$:GOSUB 2610:IF J=1 THEN NAM1$= R1$:GOTO 460
- 455 NAM2$=R1$
- 460 NEXT J
- 470 POS.2,21: PRINT "(";N1$;") How many stars? (0 to 18): ";
- 480 INPUT A$
- 490 P1$ = A$: GOSUB 2000: ON R1 GOTO 280,470,470,470,280,2980
- 500 IF A$ = "" THEN A$ = N1$
- 510 N = VAL (A$)
- 530 IF ABS(N)<0 OR ABS(N)> 18 THEN 470
- 540 N1$ = STR$ (N)
- 550 REM O=Black hole
- 560 O=(N<0)
- 570 N=ABS(N)
- 580 Q(4)=INT(10-N/6)
- 590 Q(3)=INT(Q(2)/3)-N
- 600 GR.0
- 610 REM -------------------- MAKE STARS ---------------------
- 620 N=N+O
- 630 FOR I=1 TO N
- 640 R=0
- 650 R=R+1
- 660 IF R>20 THEN I=N+1: NEXT I: GOTO 630
- 670 O(I,3)=Q(4)
- 680 REM -- J: 1 = Xpos, 2 = Ypos, 3 = Mass/Size --
- 690 FOR J=3 TO 1 STEP -1
- 700 O(I,J)=INT((Q(J)-2*O(I,3))*RND(1)+O(I,3))
- 710 NEXT J
- 720 FOR J=1 TO I-1:IF J>I-1 THEN 750
- 730 T=(O(I,3)+O(J,3)+ 10)^2
- 740 IF (O(I,1)-O(J,1))^2+(O(I,2)-O(J,2))^2 < T THEN NEXT J:GOTO 650
- 750 NEXT J
- 760 NEXT I
- 770 REM ----------------- PLACE SPACE SHIPS -----------------
- 780 REM -- Space ship size = 5 --
- 790 O(N + 1,3)=5:O(N + 2,3)=5
- 800 FOR J=1 TO 2
- 810 T = 40
- 820 IF J=1 THEN I=.28*Q(1):Q=0:GOTO 840
- 830 T=-T:I=- .28*Q(1):Q= Q(1)
- 840 R=0
- 850 R=R + 1
- 860 IF R > 20 THEN J = 3: NEXT J: GOTO 630
- 870 X = INT(I * RND (1)) + Q + T
- 880 Y = INT((Q(2) - 30) * RND (1) + 20)
- 890 FOR K = 1 TO N
- 900 IF (X - O(K,1))^2+(Y- O(K,2))^2<(O(K,3)*2)^2 THEN NEXT K:GOTO 850
- 910 NEXT K
- 920 O(N + J,1) = X
- 930 O(N + J,2) = Y
- 940 NEXT J
- 950 A1$(1) = "0":A1$(2) = "180"
- 960 IF NP > 1 THEN A$ = N$(1):N$(1) = N$(2):N$(2) = A$
- 970 REM -------------------- PLOT STARS ---------------------
- 980 GR.8: COLOR 1:POKE 710,0
- 990 Z1=3.14159 * (1 / 180)
- 1000 FOR I = 0 TO 45
- 1010 C(I + 1)=COS(I * 10 * Z1)
- 1020 NEXT I
- 1030 FOR I = 1 TO N - O
- 1040 FOR J = 1 TO 37
- 1050 X=INT(O(I,1) + O(I,3) * C(J) + .5)
- 1060 Y=INT (O(I,2) - O(I,3) * C(J + 9) + .5)
- 1070 IF J = 1 THEN PLOT X,Y
- 1080 DR. X,Y
- 1090 NEXT J
- 1110 NEXT I
- 1130 REM ------------------ PLOT SPACE SHIPS -----------------
- 1140 FOR I = 1 TO 2
- 1150 P1 = O(N + I,1):P2 = O(N + I,2):P4= I:GOSUB 2120
- 1160 NEXT I
- 1170 IF A$(1,1) = "I" THEN 1450
- 1180 GOTO 1210
- 1190 REM --------------------- PLAY GAME ---------------------
- 1200 M=M-INT(M / 2) * 2 + 1
- 1210 IF NP = 1 THEN M = 1
- 1220 N$=NAM1$:IF M=2 THEN N$=NAM2$
- 1240 POS.26,23: PRINT "(";A1$(M);") ";N$;"'s, launch angle: ";
- 1250 B=20:F1 = 1
- 1260 INPUT A$
- 1270 IF A$ = "" THEN A$ = A1$(M)
- 1280 P1$ = A$: GOSUB 2000: ON R1 GOTO 1240,980,1240,270,1240,2980
- 1290 A=VAL (A$)
- 1300 A=-SGN(A)*(ABS(A)-INT(ABS(A)/360)*360)
- 1310 A1$(M)=STR$(-A)
- 1320 IF N = 0 THEN 1450
- 1330 POS.26,23
- 1335 N$=NAM1$:IF M=2 THEN N$=NAM2$
- 1340 PRINT "(";V1(M);") ";N$;"'s initial velocity: ";
- 1350 INPUT A$
- 1360 IF A$="" THEN A$=STR$(V1(M))
- 1370 P1$=A$:GOSUB 2000:ON R1 GOTO 1240,980,1330,270,1240,2980
- 1380 B=VAL(A$)
- 1390 IF B >= 0 AND B<=20 THEN 1420
- 1400 POS.26,22: PRINT "Velocity must be from 0 to 20"
- 1410 GOTO 1330
- 1420 V1(M)=B
- 1450 U1=0:U2=0:V1=0:V2=0:F3=0
- 1460 X=.35*B*COS(A*Z1)
- 1470 Y=.35*B*SIN(A*Z1)
- 1480 U=X+O(N+M,1)+8*COS (A*Z1)
- 1490 V=Y+O(N+M,2)+8*SIN (A*Z1)
- 1500 P1 = U:P2 = V: GOSUB 2230
- 1510 IF F2 THEN 1570
- 1520 REM ----------------- DRAW ROCKET PATH ------------------
- 1530 U1 = INT(U + .5):V1=INT (V + .5)
- 1540 IF U1<>U2 OR V1<>V2 THEN P1=U1:P2=V1: GOSUB 2290
- 1550 U2=U1:V2=V1
- 1560 REM -- E = Xforce, F = Yforce --
- 1570 E=0:F=0
- 1580 FOR J=1 TO N
- 1590 R5=O(J,1)-U
- 1600 R6=O(J,2)-V
- 1610 R4=R5^2+R6^2
- 1620 R3=SQR(R4)
- 1630 R2=R5/R3
- 1640 R1=R6/R3
- 1650 G=.017*(O(J,3)^3)/R4
- 1660 E=E+G*R2
- 1670 F=F+G*R1
- 1680 NEXT J
- 1690 X=X+E
- 1700 Y=Y+F
- 1710 U=U+X
- 1720 V=V+Y
- 1730 REM ------------------ FIND COLLISIONS ------------------
- 1740 IF F2 THEN 1790
- 1750 FOR J = 1 TO N + 2
- 1755 IF J = N + 1 THEN 1780
- 1760 IF O AND J = N THEN 1780
- 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
- 1780 NEXT J
- 1790 IF U<-Q(1) OR U>Q(1)*2 OR V<-Q(2) OR V>Q(2)*2 THEN 1200
- 1800 F2 = (U<0 OR U>Q(1) OR V<0 OR V>Q(2))
- 1810 REM -- F2=F3 (no change............) --
- 1820 REM -- F2=1 (just went off screen.) --
- 1830 REM -- F3=1 (just came onto screen) --
- 1840 IF F2 = F3 THEN 1510
- 1850 IF F3 THEN P1=U:P2=V:GOSUB 2230
- 1860 F3 = F2
- 1870 GOTO 1510
- 1880 REM ------------------ MAKE EXPLOSIONS ------------------
- 1890 P1 = U + 2:P2 = V + 2: GOSUB 2230
- 1900 FOR I = 1 TO 8:P1 = E(I,1):P2=E(I,2):GOSUB 2250:NEXT I
- 1910 IF J <= N THEN 1200
- 1920 POS.16,23
- 1925 N$=NAM1$:IF M=2 THEN N$=NAM2$
- 1930 PRINT N$;" destroyed ";
- 1933 N$=NAM1$:IF M=2 THEN N$=NAM2$
- 1935 PRINT N$;"'s ship!";
- 1940 PRINT " (Y) Again? : ";
- 1950 INPUT A$
- 1970 IF A$(1,2) = "//" THEN 2980
- 1980 A$ = A$(1,1): IF A$ = "D" OR A$ = "I" THEN 980
- 1985 IF A$ = "N" OR A$ = "E" THEN 2980
- 1990 GOTO 270
- 2000 REM ******************* INPUT ******************* FNC ***
- 2010 IF LEN(P1$)>1 THEN P1$=P1$(1,1)
- 2060 IF P1$ = "" THEN R1 = 0: RETURN
- 2061 P = 7
- 2062 P = P - 1: IF P = 0 THEN 2100
- 2063 IF CH$(P,P) = P1$ THEN 2080
- 2064 GOTO 2062
- 2080 IF A$(1,2) = "//" THEN P = 6
- 2090 IF P = 3 THEN GOSUB 2370
- 2100 R1 = P: RETURN
- 2120 REM **************** MAKE SHIPS ***************** FNS ***
- 2140 S = (P4-1)*2-1
- 2150 GOSUB 2230
- 2160 FOR K=1 TO 16:P1=S(K,1)*S:P2=S(K,2):GOSUB 2250:NEXT K
- 2210 RETURN
- 2230 REM ***************** G CURSOR ****************** FNG$ **
- 2240 CX = P1:CY = P2: RETURN
- 2250 REM ***************** DRAW LINE *************************
- 2260 IF NOT (CX>=0 AND CX<=Q(1) AND CY>=0 AND CY<=Q(2)) THEN 2270
- 2261 IF NOT (CX+P1>=0 AND CX+P1<=Q(1) AND CY+P2>=0 AND CY+P2<=Q(2)) THEN 2270
- 2265 PL.CX,CY:DR.CX+P1,CY+P2
- 2270 CX=CX+P1:CY=CY+P2
- 2280 RETURN
- 2290 IF NOT (CX>=0 AND CX<=Q(1) AND CY>=0 AND CY<=Q(2)) THEN 2300
- 2291 IF NOT (P1>=0 AND P1<= Q(1) AND P2>=0 AND P2<= Q(2)) THEN 2300
- 2295 PLOT CX,CY:DR.P1,P2
- 2300 CX = P1:CY = P2: RETURN
- 2370 REM ******************* HELP ******************** FNH ***
- 2410 GR.0
- 2420 PRINT "SPACE WAR ": POS.1,7
- 2430 PRINT CHR$(127);"Commands:": PRINT
- 2440 PRINT CHR$(127);"H = Help"
- 2450 PRINT CHR$(127);"S = Start"
- 2460 PRINT CHR$(127);"D = Display"
- 2470 PRINT CHR$(127);"I = Instant replay after hit"
- 2480 PRINT CHR$(127);" / or B = Back"
- 2490 PRINT CHR$(127);"// or E = Exit": POS.2,17
- 2500 PRINT "Negative number of stars gives a BLACK HOLE"
- 2510 POS.2,19: PRINT "(Y) Are you ready to play? (Y/N): ";
- 2520 INPUT A$:IF LEN(A$)>2 THEN A$=A$(1,2)
- 2530 IF A$ > "" THEN A=ASC(A$):A$(1,1)=CHR$(A-32*(A>96 AND A<123))
- 2540 IF A$ = "N" OR A$ = "E" OR A$ = "//" THEN 2580
- 2550 IF A$ = "H" THEN 2410
- 2560 RETURN
- 2570 RETURN
- 2580 GR.0
- 2590 END
- 2610 REM ************** FUNCTION DOWNSHIFT *********** FNS$ **
- 2640 M = 0: IF P1$ = "" THEN RETURN
- 2650 FOR I = 1 TO LEN (P1$)
- 2660 K= ASC(P1$(I,I))
- 2670 IF K=32 THEN M = 0
- 2680 IF K<65 OR K>91 THEN 2710
- 2690 REM IF M THEN P1$=P1$(1,I-1)+CHR$(K+32)+P1$(I+1)
- 2700 M = 1
- 2710 NEXT I
- 2720 R1$ = P1$: RETURN
- 2740 REM *********** POLL TERMINAL CAPABILITY ******** FNi ***
- 2750 R1=1:Q(1)=319:Q(2)=159
- 2760 RETURN
- 2970 REM ******************** EXIT ***************************
- 2980 IF G THEN GR.0
- 3000 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement