10REM>IWAR 20REM Jobst Brandt (1/4/82); Chris Osborn (22/3/15); /u/to3m (25/3/15) 30D$="25/3/15":DIM OA(21,3),Q(4),V1$(2),N$(2),A1$(2) 40DATA 10,0,-2,0,0,2,-1,0,3,2,-8,0,-2,-2,-4,0,-4,-2,4,-2,4,0,2,-2,8,0,-3,2,1,0,0,2 50DATA -2,6,-2,-6,-6,-2,6,-2,2,-6,2,6,6,2,-6,2 60GOSUB1400:G=R1:M=INT(2*FNRND+1):O=0:N1$="9":P$="2":GOSUB1230 70CLS 80F1=0:F2=0:F3=0:V1$(1)="20":V1$(2)="20" 90PRINTTAB(21,1)"("P$") One or two players? ";:INPUT""A$:P1$=A$:GOSUB1070:IFR1<>0ONR1 GOTO90,90,90,70,90,1430 100IFA$=""THENA$=P$ 110Q=VAL(A$):IFQ<>1ANDQ<>2THEN90 120NP=Q:P$=STR$(NP):IFNP=2THEN140 130N$(1)="Player":N$(2)="Enemy":GOTO180 140N$(1)="Spock":N$(2)="Darth":FORJ=1TO2:PRINTTAB(21,1)"("N$(J)") Name of captain #";J;" ";:INPUT"";A$:P1$=A$:GOSUB1070:IFR1<>0ONR1 GOTO80,150,80,70,80,1430 150IFA$=""THEN170 160P1$=A$:GOSUB1330:N$(J)=R1$ 170NEXTJ 180PRINTTAB(21,1)"("N1$") How many stars? (0 to 18): ";:INPUT""A$:P1$=A$:GOSUB1070:IFR1<>0ONR1 GOTO80,180,180,180,80,1430 190IFA$=""THENA$=N1$ 200N=VAL(A$):IFABS(N)<0ORABS(N)>18THEN180 210N1$=STR$(N) 220REM 230O=0:IFN<0THENO=1 240N=ABS(N):Q(4)=INT(10-N/6):Q(3)=INT(Q(2)/3)-N 250CLS 260REM 270N=N+O 280ResetI=0:FORI=1TON 290R=0 300R=R+1:ResetJ=0 310IFR>20THENResetI=1:I=N+1:GOTO410 320OA(I,3)=Q(4) 330REM 340FORJ=3TO1STEP-1 350OA(I,J)=INT((Q(J)-2*OA(I,3))*FNRND+OA(I,3)) 360NEXTJ 370FORJ=1TOI-1:IFJ>I-1THEN400 380T=(OA(I,3)+OA(J,3)+10)^2 390IF(OA(I,1)-OA(J,1))^2+(OA(I,2)-OA(J,2))^220THENJ=3:ResetJ=1:GOTO520 490X=INT(I*FNRND)+Q+T:Y=INT((Q(2)-30)*FNRND+20):FORK=1TON:IF(X-OA(K,1))^2+(Y-OA(K,2))^2<(OA(K,3)*2)^2THENK=N+1:ResetK=1 500NEXTK:IFResetK THEN480 510OA(N+J,1)=X:OA(N+J,2)=Y 520NEXTJ:IFResetJ THEN280 530A1$(1)="0":A1$(2)="180":IFNP>1THENA$=N$(1):N$(1)=N$(2):N$(2)=A$ 540REM 550MODE0 560Z1=PI/180 570FORI=1TON-O:FORJ=0TO36:X=INT(OA(I,1)+OA(I,3)*COS(J*10*Z1)+.5):Y=INT(OA(I,2)-OA(I,3)*SIN(J*10*Z1)+.5):IFJ=0THENPROCMOVE(X,Y)ELSEPROCLINETO(X,Y) 580NEXTJ:NEXTI 590REM 600FORI=1TO2:P1=OA(N+I,1):P2=OA(N+I,2):P3$=N$(I):P4=I:GOSUB1160:NEXTI 610IFMID$(A$,1,1)="I"THEN760 620GOTO650 630REM 640M=M-INT(M/2)*2+1 650IFNP=1THENM=1 660PROCCLR:PRINTTAB(23,26)"("A1$(M)") "N$(M)"'s, launch angle: ";:B=20:F1=1:INPUT""A$:IFA$=""THENA$=A1$(M) 670P1$=A$:GOSUB1070:IFR1<>0ONR1 GOTO660,550,660,70,660,1430 680A=VAL(A$):A=-SGN(A)*(ABS(A)-INT(ABS(A)/360)*360):A1$(M)=STR$(-A) 690IFN=0THEN760 700PROCCLR:PRINTTAB(23,26)"("V1$(M)") "N$(M)"'s initial velocity (0-20): ";:INPUT""A$ 710IFA$=""THENA$=V1$(M) 720P1$=A$:GOSUB1070:IFR1<>0ONR1 GOTO660,550,700,70,660,1430 730B=VAL(A$) 740IFB<0ORB>20THEN700 750V1$(M)=STR$(B) 760U1=0:U2=0:V1=0:V2=0:F3=0:X=.35*B*COS(A*Z1):Y=.35*B*SIN(A*Z1):U=X+OA(N+M,1)+8*COS(A*Z1):V=Y+OA(N+M,2)+8*SIN(A*Z1):P1=U:P2=V:GOSUB1180 770IFF2 THEN820 780REM 790U1=INT(U+.5):V1=INT(V+.5):IFU1<>U2 ORV1<>V2 THENP1=U1:P2=V1:GOSUB1220 800U2=U1:V2=V1 810REM 820E=0:F=0 830FORJ=1TON:R5=OA(J,1)-U:R6=OA(J,2)-V:R4=R5^2+R6^2:R3=SQR(R4):R2=R5/R3:R1=R6/R3:G=.017*(OA(J,3)^3)/R4:E=E+G*R2:F=F+G*R1:NEXTJ 840X=X+E:Y=Y+F:U=U+X:V=V+Y 850REM 860IFF2 THEN920 870SkipJ=0:FORJ=1TON+2 880IFJ=N+1THEN910 890IFO ANDJ=N THEN910 900IF(U-OA(J,1))^2+(V-OA(J,2))^2Q(1)*2ORV<-Q(2)ORV>Q(2)*2THEN640 930F2=(U<0 ORU>Q(1)ORV<0ORV>Q(2)) 940IFF2=F3 THEN770 950IFF3 THENP1=U:P2=V:GOSUB1180 960F3=F2 970GOTO770 980REM 990P1=U+2:P2=V+2:GOSUB1180 1000RESTORE50:PROCSHAPE(8,1,1) 1010IFJ<=N THEN640 1020PRINTTAB(23,16)N$(M)" destroyed "N$(J-N)"'s ship! (Y) Again? : ";:INPUT"";A$ 1030IFLEFT$(A$,2)="//"THEN1430 1040A$=LEFT$(A$,1):IFA$="D"ORA$="I"THEN550 1050IFA$="N"ORA$="E"THEN1430 1060GOTO70 1070P1$=LEFT$(P1$,1) 1080IFP1$=""THENR1=0:RETURN 1090P=7 1100P=P-1:IFP=0THEN1150 1110IFMID$("BDHS/E",P,1)=P1$THEN1130 1120GOTO1100 1130IFMID$(A$,1,2)="//"THENP=6 1140IFP=3THENGOSUB1230 1150R1=P:RETURN 1160REM 1170S=(P4-1)*2-1:GOSUB1180:RESTORE40:PROCSHAPE(16,2*S,2):RETURN 1180REM 1190CX=P1:CY=P2:RETURN 1200REM 1210PROCLINE(CX,CY,CX+P1,CY+P2):CX=CX+P1:CY=CY+P2:RETURN 1220PROCLINE(CX,CY,P1,P2):CX=P1:CY=P2:RETURN 1230REM 1240MODE0 1250PRINT"SPACE WAR ";D$:PRINTTAB(31,2)"Commands"TAB(32,4)"H = Help"TAB(32,5)"S = Start"TAB(32,6)"D = Display"TAB(32,7)"I = Instant replay after hit"TAB(27,8)"/ or B = Back"TAB(26,9)"// or E = Exit" 1260PRINTTAB(17,17)"Negative number of stars gives a BLACK HOLE" 1270PRINTTAB(19,22)"(Y) Are you ready to play? (Y/N): ";:INPUT"";A$ 1280A$=LEFT$(A$,2):IFA$>""THENA=ASC(A$):A$=CHR$(A-32*(A>96ANDA<123))+MID$(A$,2) 1290IFA$="N"ORA$="E"ORA$="//"THEN1320 1300IFA$="H"THEN1240 1310RETURN 1320CLS:END 1330REM 1340M=0:IFP1$=""THENRETURN 1350FORI=1TOLEN(P1$):K=ASC(MID$(P1$,I,1)):IFK=32THENM=0 1360IFK<65ORK>91THEN1390 1370IFM THENP1$=MID$(P1$,1,I-1)+CHR$(K+32)+MID$(P1$,I+1) 1380M=1 1390NEXTI:R1$=P1$:RETURN 1400REM 1410R1=1:Q(1)=639:Q(2)=350:RETURN 1420REM 1430MODE7:END 1440: 1450DEFFNRND:=RND(1) 1460DEFFNX(X):=X*2 1470DEFFNY(Y):=1023-Y*2 1480DEFPROCMOVE(X,Y):MOVEFNX(X),FNY(Y):ENDPROC 1490DEFPROCLINETO(X,Y):DRAWFNX(X),FNY(Y):ENDPROC 1500DEFPROCLINE(X0,Y0,X1,Y1):PROCMOVE(X0,Y0):PROCLINETO(X1,Y1):ENDPROC 1510DEFPROCSHAPE(N,SX,SY):LOCALI:FORI=1TON:READP1:READP2:P1=P1*SX:P2=P2*SY:GOSUB1200:NEXT:ENDPROC 1520DEFPROCCLR:LOCALI:PRINTTAB(0,26);:FORI=1TO79:VDU32:NEXT:ENDPROC