10 REM .. KRIEG.ECB ..(A 2-D TACTICAL SPACE WAR GAME ) Feb 78 20 REM ...by BOB O'ROURKE of BLOOMINGTON...MECC H7LT024 30 REM ...COMPLETED on 12/14/77 after 1.75 months 35 REM ...Puttered around for 1.5 months 40 REM ...My thanks to PORTLAND JUNIOR HIGH and M.E.C.C. 50 DEF FNT(Z)=Z-(INT(Z/10)*10) 60 DIM S(50,8),M(50,4),T(100,4),H(4,3),F(50,3),O(50),P(5) 70 DIM A$(50),B$(50) 80 DATA "###-######/###" 90 GOTO 3050 100 LET T=1,M=1,Y1=1 110 FOR X=1 TO 50 115 LET M(X,1)=0,M(X,2)=0,M(X,3)=0,M(X,4)=0 120 NEXT X 130 PRINT " A TACTICAL LEVEL SPACE WAR GAME " 140 PRINT " RUN KRIEGIN FOR INSTRUCTIONS" 150 PRINT " HOW MANY PLAYERS ---=>"; 160 INPUT N 165 LET X9=(N*2)*50 170 FOR Z=1 TO N 180 LET E=INT(RND(0)*(N*2)+1)*50 190 LET X1=INT(RND(0)*(N*2)+1)*50 195 PRINT "PLAYER ";Z;" STARTING CO.-ORDS. ARE ";E;"-";X1 200 FOR Y=1 TO 10 220 PRINT "SHIP#";Y;" -CHANGE on X-Y AXISES ---=>"; 230 INPUT Q,P 240 IF ABS(Q)>20 OR ABS(P)>20 THEN 220 250 PRINT "VELOCITY ---=>"; 260 INPUT Z8,Z9 270 IF ABS(Z8)>20 OR ABS(Z9)>20 THEN 250 361 LET S(Y1,1)=E+Q 362 LET S(Y1,2)=X1+P 363 LET S(Y1,3)=Z8 365 LET S(Y1,4)=Z9 370 LET S(Y1,5)=1 380 LET S(Y1,6)=2 390 LET S(Y1,7)=75 400 LET S(Y1,8)=Z 410 LET Y1=Y1+1 420 NEXT Y 430 NEXT Z 440 FOR E=1 TO 15 450 PRINT "SHIP POS(X-Y) MOTION MINES TOR FUEL OWN." 460 FOR Z=1 TO 50 470 IF S(Z,8)=0 THEN 500 480 LET A$=" ## ### ### ### ### # # ### # " 490 PRINT %3I;Z;%6I;S(Z,1);%4I;S(Z,2);%5I;S(Z,3); 495 PRINT %4I;S(Z,4);S(Z,5);%6I;S(Z,6);S(Z,7);%3I;S(Z,8) 510 PRINT 520 PRINT 530 PRINT TAB(12);" MINES " 540 FOR Z=1 TO 50 550 IF M(Z,1)=0 THEN 590 560 PRINT " X/Y MOTION" 570 REM #####GOTO HELL*** 580 PRINT %3I;M(Z,1);"-";%6I;M(Z,2);"/";%3I;M(Z,3),M(Z,4) 590 NEXT Z 600 PRINT TAB(10);" TORPEDOES" 610 FOR Z=1 TO 100 620 IF T(Z,1)=0 THEN 650 630 PRINT " X/Y MOTION" 640 PRINT %3I;T(Z,1);"-";%6I;T(Z,2);"/";%3I;T(Z,3),T(Z,4) 650 NEXT Z 660 PRINT "PLAYER#,SHIP# ---=>"; 670 INPUT P,S 680 IF S>50 THEN 660 690 IF P=0 THEN 1430 700 IF S(S,8)<>0 THEN 730 710 PRINT "NON-EXISTENT SHIP REQUESTED." 720 GOTO 660 730 IF S(S,8)=P THEN 760 740 PRINT "NOT YOUR SHIP." 750 GOTO 660 760 IF O(S)<1 THEN 790 770 PRINT "ORDERS FOR THAT SHIP ALREADY RECORDED." 790 PRINT "ORDER FOR SHIP#";S;" ---=>"; 800 INPUT O 810 ON O GOTO 820,920,1080 820 PRINT "SPEED CHANGE (X,Y) ---=>"; 830 INPUT A,B 840 LET C=INT(SQR(A*A+B*B)) 850 IF S(S,7)-C<0 THEN 820 860 LET S(S,3)=S(S,3)+A 870 LET S(S,4)=S(S,4)+B 880 IF C<10 THEN 900 890 LET S(S,7)=S(S,7)-C 900 LET O(S)=O 910 GOTO 660 920 IF S(S,7)>9 THEN 950 930 PRINT "NOT FUEL ON SHIP ";S;" TO FIRE." 940 GOTO 660 950 PRINT "FIRE at SHIP ---=>"; 960 INPUT A 970 LET F(S,1)=A 980 LET S(S,7)=S(S,7)-10 990 PRINT "FIRING DIRECTION (360-0) ---=>"; 1000 INPUT D 1010 LET F(S,2)=D 1020 PRINT "RANGE (1-4) ---=>"; 1030 INPUT D 1040 IF D>4 OR D<1 THEN 1020 1050 LET F(S,3)=INT(D) 1060 LET O(S)=0 1070 GOTO 660 1080 PRINT "(1) MINE, or (2) TORPEDO ---=>"; 1090 INPUT (1,0)B 1100 IF B=2 THEN 1320 1110 IF S(S,5)=0 THEN 660 1120 PRINT "SPEED CHANGE ---=>"; 1130 INPUT A,B 1140 LET C=INT(SQR(A*A+B*B)) 1150 IF S(S,7)-C<0 THEN 1220 1160 LET M(M,1)=S(S,1) 1170 LET M(M,2)=S(S,2) 1180 LET M(M,3)=S(S,3) 1190 LET M(M,4)=S(S,4) 1200 LET M=M+1 1210 GOTO 1240 1220 PRINT "NOT ENOUGH FUEL" 1230 GOTO 660 1240 LET S(S,3)=S(S,3)+A 1250 LET S(S,4)=S(S,4)+B 1260 IF C<10 THEN 1290 1270 LET S(S,7)=S(S,7)-C 1280 LET S(S,5)=S(S,5)-1 1290 LET O(S)=O 1300 GOTO 660 1310 IF S(S,6)=0 THEN 660 1320 PRINT "INPUT TORPEDO ACCELERATION ---=>"; 1330 INPUT A,B 1340 IF ABS(A)>5 OR ABS(B)>5 THEN 1320 1350 LET T(T,1)=S(S,1) 1360 LET T(T,2)=S(S,2) 1370 LET T(T,3)=S(S,3)+A 1380 LET T(T,4)=S(S,4)+B 1390 LET T=T+1 1400 LET O(S)=O 1410 LET S(S,6)=S(S,6)-1 1420 GOTO 660 1430 FOR M1=1 TO 50 1440 IF M(M1,1)=0 THEN 1490 1450 IF M(M1,1)<=X9 AND M(M1,2)<=X9 AND M(M1,1)>=0 AND M(M1,2)>=0 THEN 1470 1460 LET M(M1,1)=0 1470 LET M(M1,1)=M(M1,1)+M(M1,3) 1480 LET M(M1,2)=M(M1,2)+M(M1,4) 1490 NEXT M1 1500 FOR T1=1 TO 100 1510 IF T(T1,1)=0 THEN 1570 1520 IF T(T1,1)<=X9 AND T(T1,2)<=X9 AND T(T1,1)>=0 AND T(T1,2)>=0 THEN 1520 1530 LET T(T1,1)=0 1540 LET T(T1,1)=T(T1,1)+T(T1,3) 1550 LET T(T1,2)=T(T1,2)+T(T1,4) 1560 LET T=T+1 1570 NEXT T1 1590 FOR Z=1 TO 50 1600 IF S(Z,8)=0 THEN 1670 1610 LET S(Z,1)=S(Z,1)+S(Z,3) 1620 LET S(Z,2)=S(Z,2)+S(Z,4) 1630 IF S(Z,1)<=X9 AND S(Z,2)<=X9 AND S(Z,1)>=0 AND S(Z,2)>=0 THEN 1660 1640 PRINT "SHIP ";Z;" OFF PLAYING AREA." 1650 LET S(Z,8)=0 1660 LET S(Z,7)=S(Z,7)+10 1670 NEXT Z 1680 GOTO 2720 1690 FOR Z=1 TO 50 1700 IF F(Z,1)=0 THEN 2700 1710 LET J=F(Z,1) 1720 LET Q=F(Z,2) 1730 LET R=F(Z,3) 1740 IF F(Z,1)=O THEN 2700 1750 LET X=S(Z,1) 1760 LET A=S(J,1) 1770 LET Y=S(Z,2) 1780 LET B=S(J,2) 1790 LET D=INT(SQR((X-A)*(X-A)+(Y-B)*(Y-B))) 1800 LET T5=FNT(Z) 1810 IF T5=0 THEN 1880 1820 IF T5<7 AND T5>0 THEN 1900 1830 LET U=1 1840 LET H=H(R,U) 1850 IF D<=H THEN 1920 1860 PRINT "MISS BY SHIP ";Z;" ,NOT IN RANGE." 1870 GOTO 2700 1880 LET U=2 1890 GOTO 1840 1900 LET U=3 1910 GOTO 1840 1920 IF XA AND YA AND Y>B THEN 2240 1950 IF XB THEN 2270 1960 IF X=A AND YB THEN 2340 1990 IF X>A AND Y=B THEN 2360 2000 GOTO 2300 2010 LET A=X-A 2020 LET B=Y-B 2030 LET C=A/B 2040 LET D=B/A 2050 LET C=ABS(C*45) 2060 LET D=ABS(D*45) 2070 IF I=1 THEN 2130 2080 IF D>C THEN 2110 2090 LET A=W+D 2100 GOTO 2370 2110 LET A=W+D 2120 GOTO 2370 2130 IF C>D THEN 2160 2140 LET A=W+C 2150 GOTO 2370 2160 LET A=W+(C-D) 2170 GOTO 2370 2180 LET I=0 2190 LET W=0 2200 GOTO 2010 2210 LET I=1 2220 LET W=90 2230 GOTO 2010 2240 LET I=0 2250 LET W=180 2260 GOTO 2010 2270 LET I=1 2280 LET W=270 2290 GOTO 2010 2300 LET A=0 2310 GOTO 2370 2320 LET A=90 2330 GOTO 2370 2340 LET A=180 2350 GOTO 2370 2360 LET A=270 2370 LET D=Q 2380 FOR P=1 TO R 2390 READ V 2400 NEXT P 2410 RESTORE 2420 LET H=0 2430 IF D+V>360 THEN 2580 2440 IF D-V<0 THEN 2550 2450 IF D-V<=A AND A<=D+V THEN 2470 2460 GOTO 2600 2470 IF 5=0 THEN 2580 2480 PRINT "SHIP ";R(Z,1);" DESTROYED BY SHIP ";Z 2490 LET H=1 2500 LET S(F(Z,1),8)=0 2510 GOTO 2610 2520 PRINT ";SHIP ";F(Z,1);" CAPTURED. NEW OWNER PLAYER ";S(Z,8) 2530 LET S(F(Z,1),8)=S(Z,8) 2540 GOTO 2700 2550 LET B=360+(D-V) 2560 IF B<=A AND A<=D+V THEN 2470 2570 GOTO 2600 2580 LET B=(D+V)-360 2590 IF D-V<=A AND A<=B THEN 2470 2600 PRINT "SHIP ";Z;" FIRES AND MISSES" 2610 IF H=0 THEN 2700 2620 IF FNT(J)=0 THEN 2660 2630 IF FNT(J)>0 AND FNT(J)<7 THEN 2680 2640 LET B=30 2650 GOTO 2690 2660 LET B=50 2670 GOTO 2690 2680 LET B=10 2690 LET P(S(Z,8))=P(S(Z,8))+B 2700 NEXT Z 2710 GOTO 1590 2720 FOR Z=1 TO 50 2730 FOR Z1=1 TO 50 2740 IF M(Z,1)=0 THEN 2820 2750 IF S(Z1,8)=0 THEN 2810 2760 IF S(Z1,1)=M(Z,1) AND S(Z1,2)=M(Z,2) THEN 2780 2770 GOTO 2810 2780 PRINT "SHIP ";Z1;" DESTROYED BY MINE" 2790 LET S(Z1,8)=0 2800 LET M(Z,1)=0 2810 NEXT Z1 2820 NEXT Z 2830 FOR Z=1 TO 100 2840 FOR Z1=1 TO 50 2850 IF T(Z,1)=0 THEN 2930 2860 IF S(Z1,8)=0 THEN 2920 2870 IF T(Z,1)=S(Z1,1) AND T(Z,2)=S(Z1,2) THEN 2890 2880 GOTO 2920 2890 PRINT "SHIP ";Z1;" DESTROYED BY TORPEDOE" 2900 LET T(Z,1)=0 2910 LET S(Z1,8)=0 2920 NEXT Z1 2930 NEXT Z 2940 MAT F=ZER 2950 MAT O=ZER 2960 NEXT E 2970 FOR E=1 TO 5 2980 PRINT "PLAYER ";E;" -SCORE=";P(E) 2990 IF P(E)>H THEN 3010 3000 GOTO 3030 3010 LET H=P(E) 3020 LET W=E 3030 NEXT E 3040 GOTO 3190 3050 LET H(1,1)=30 3060 LET H(1,2)=20 3070 LET H(1,3)=10 3080 LET H(2,1)=60 3090 LET H(2,2)=40 3100 LET H(2,3)=30 3110 LET H(3,1)=90 3120 LET H(3,2)=60 3130 LET H(3,3)=50 3140 LET H(4,1)=100 3150 LET H(4,2)=80 3160 LET H(4,3)=60 3170 GOTO 100 3180 DATA 180,45,30,15 3190 PRINT "THE WINNER IS PLAYER ";W;" WHOSE-" 3200 PRINT "SCORE =";H 3210 END