1 ! SPACEWAR - A STARTREK SIMULATION 2 ! 5 PRINT:PRINT:PRINT 8 DIM G(8,8),Q(8,8),D(6),K(9,3),N(3) 9 DIM Q$[2](5),D$[12](6),Z$[2](8),C$V,A$V 10 !RESTART ENTRY 11 Q$(1)=". " 12 Q$(2)="E " 13 Q$(3)="K " 14 Q$(4)="B " 15 Q$(5)="* " 20 T0=INT(RND(-.10)*20+20)*100 21 T=T0 22 T9=40 23 E0=3000:E=E0 25 P0=10:P=P0 27 S9=200 28 P5=.5 29 S=0 30 DEF FND(D)=SQR((K(I,1)-S1)**2 + (K(I,2)-S2)**2) 32 Q1=INT(RND(0)*8+1) 34 Q2=INT(RND(0)*8+1) 40 FOR I=1 TO 8 41 FOR J=1 TO 8 45 G(I,J)=0 48 NEXT J 49 NEXT I 50 FOR I=1 TO 6 55 D(I)=0 59 NEXT I 60 !LOOPS FOR "MAT" STATEMENTS 62 S1=INT(RND(0)*8+1) 64 S2=INT(RND(0)*8+1) 66 D$(1)="WARP ENGINES" 67 D$(2)="S.R. SENSORS" 68 D$(3)="L.R. SENSORS" 69 D$(4)="PHASOR CNTRL" 70 D$(5)="PHOTON TUBES" 71 D$(6)="DAMAGE CNTRL" 75 !**REMOVED LOG FILE CODE** 80 Z1=8:K9=0:B9=0 81 PRINT "ENTER DEGREE OF DIFFICULTY (AVERAGE=3) "; 82 INPUT H1 83 IF H1 < 0 THEN 81 84 IF H1 = 0 THEN 90 85 H1=ABS(H1) 86 PRINT "ENTER GALAXY SIZE (1-8)"; 87 INPUT Z1 88 IF Z1<=0 THEN 86 89 IF Z1>8 THEN 86 90 IF H1=4 THEN PRINT "OK, YOU ASKED FOR IT..." 91 FOR I=1 TO Z1 92 FOR J=1 TO Z1 95 R=RND(0)*192/H1 96 K3=0 97 IF R<.0001 THEN K3=K3+1 98 IF R<.01 THEN K3=K3+1 99 IF R<.03 THEN K3=K3+1 100 IF R<.08 THEN K3=K3+1 102 IF R<.28 THEN K3=K3+1 104 IF R<1.28 THEN K3=K3+1 106 IF R<3.28 THEN K3=K3+1 108 IF R<6.28 THEN K3=K3+1 110 IF R<13.28 THEN K3=K3+1 120 K9=K9+K3 190 B3=0 200 IF RND(0)>.96 THEN B3=1 205 IF H1<1 THEN 221 210 IF B3=1 THEN 221 215 IF RND(0)>.97 THEN B3=1 221 B9=B9+B3 230 S3=INT(RND(0)*8+1) 235 G(I,J)=K3*100+B3*10+S3 250 NEXT J 260 NEXT I 265 K0=K9 270 IF B9=0 THEN 300 271 I=RND(0)*Z1+P5 272 J=RND(0)*Z1+P5 275 G(I,J)=G(I,J)+10 276 B9=1 300 GOTO 9050 400 !SETUP QUADRANT 405 K3=0 406 B3=0 407 S3=0 410 IF Q1<1 THEN 500 420 IF Q1>8 THEN 500 430 IF Q2<1 THEN 500 440 IF Q2>8 THEN 500 450 X=G(Q1,Q2)/100 460 K3=INT(X) 470 B3=INT((X-K3)*10+.005) 480 S3=G(Q1,Q2)-INT(G(Q1,Q2)*.1+.1)*10 490 FOR I=1 TO 9 491 FOR J=1 TO 3 495 K(I,J)=0 498 NEXT J 499 NEXT I 500 FOR I=1 TO 8 501 FOR J=1 TO 8 505 Q(I,J)=0 508 NEXT J 509 NEXT I 550 Q(S1,S2)=1 560 FOR I=1 TO K3 570 GOSUB 9000 580 Q(R1,R2)=2 590 K(I,1)=R1 591 K(I,2)=R2 593 K(I,3)=S9 600 NEXT I 610 FOR I=1 TO B3 620 GOSUB 9000 630 Q(R1,R2)=3 640 NEXT I 650 FOR I=1 TO S3 660 GOSUB 9000 670 Q(R1,R2)=4 680 NEXT I 690 A=-1 700 !SHORT RANGE SENSOR SCAN 701 M8=S1-1 702 IF M8<1 THEN M8=1 703 M9=S1+1 704 IF M9>8 THEN M9=8 705 M6=S2-1 706 M7=S2+1 707 IF M6<1 THEN M6=1 708 IF M7>8 THEN M7=8 709 FOR I=M8 TO M9 710 FOR J=M6 TO M7 735 IF Q(I,J)<>3 THEN 740 736 C$="DOCKED" 737 E=E0:P=P0 739 GOTO 801 740 NEXT J 745 NEXT I 750 IF S>0 THEN C$="SHIELDED" 755 IF S>0 THEN 801 770 IF K3>0 THEN 790 775 IF E= 0 THEN 830 810 PRINT 815 PRINT "***SHORT RANGE SENSORS ARE OUT ***" 820 PRINT 825 GOTO 955 830 PRINT "-----------------------------" 840 FOR I=1 TO 8 841 FOR J=1 TO 8 842 Z$(J)=Q$(Q(I,J)+1) 843 NEXT J 844 PRINT Z$(1);Z$(2);Z$(3);Z$(4);Z$(5);Z$(6);Z$(7);Z$(8);" "; 845 IF I<8 THEN GOTO I*5+850 846 PRINT 847 NEXT I 848 PRINT "-----------------------------" 849 GOTO 955 855 PRINT "STARDATE ";T 856 GOTO 847 860 PRINT "CONDITION ";C$ 861 GOTO 847 865 PRINT "QUADRANT ";Q1;"-";Q2 866 GOTO 847 870 PRINT "SECTOR ";S1;"-";S2 871 GOTO 847 875 PRINT "ENERGY ";E 876 GOTO 847 880 PRINT "PHOTON TORPEDO";P 881 GOTO 847 885 PRINT "KLINGONS LEFT ";K9 886 GOTO 847 955 PRINT "COMMAND "; 960 INPUT A 965 IF A<0 THEN 970 966 IF A<8 THEN GOTO 1001+A 970 !LIST OPTIONS- 980 PRINT 982 PRINT " 0 = SET COURSE" 984 PRINT " 1 = SHORT RANGE SENSOR SCAN" 986 PRINT " 2 = LONG RANGE SENSOR SCAN" 988 PRINT " 3 = FIRE PHASERS" 990 PRINT " 4 = FIRE PHOTON TORPEDOES" 992 PRINT " 5 = DAMAGE CONTROL REPORT" 994 PRINT " 6 = SURRENDER" 1000 !DISPATCH TABLE TO FUNCTIONS 1001 GOTO 1030 1002 GOTO 700 1003 GOTO 1600 1004 GOTO 1800 1005 GOTO 3000 1006 GOTO 4001 1007 GOTO 5250 1010 PRINT 1020 GOTO 955 1030 !WARP DRIVE 1040 PRINT "COURSE (1-8.9999) "; 1050 INPUT C1 1060 IF C1=0 THEN 955 1070 IF C1<1 THEN 1040 1080 IF C1>=9 THEN 1040 1090 PRINT "WARP FACTOR (0-12) "; 1100 INPUT W1 1110 IF W1<0 THEN 1040 1114 S=INT(W1/100) 1118 IF W1>=100 THEN W1=W1-100 1120 IF W1>12 THEN 1170 1130 IF W1<=0.2 THEN 1170 1140 IF D(1)>=0 THEN 1170 1150 PRINT "WARP ENGINES ARE DAMAGED, MAXIMUM SPEED = WARP .2" 1160 GOTO 1040 1170 E=E-S*1000 1172 IF K3 <= 0 THEN 1200 1180 GOSUB 5000 1190 IF E<= 0 THEN 5230 1200 FOR I=1 TO 6 1220 D(I)=D(I)+1 1222 IF D(I)>0 THEN D(I)=0 1230 NEXT I 1240 IF RND(0)>.25 THEN 1320 1250 R1=INT(RND(0)*6+1) 1260 IF RND(0)>P5 THEN 1300 1270 D(R1)=D(R1)-(RND(0)*5+1) 1280 PRINT "*** SPACE STORM, "; 1282 PRINT D$(R1) ;" DAMAGED ***" 1290 GOTO 1320 1300 FOR I=R1 TO 6 1301 IF D(I)<0 THEN 1307 1302 NEXT I 1303 FOR I=1 TO R1-1 1304 IF D(I)<0 THEN 1307 1305 NEXT I 1306 GOTO 1314 1307 R1=1 1308 D(I)=D(I)+RND(0)*5+1 1309 IF D(I)>0 THEN D(I)=0 1310 PRINT "*** TRUCE, "; 1312 PRINT D$(R1) ;" STATE OF REPAIR IMPROVED ***" 1314 ! 1320 N=INT(W1*8) 1322 E=E-N-N+5 1324 T=T+1 1326 Q(S1,S2)=0 1327 X=S1 1328 Y=S2 1330 IF T>T0+T9 THEN 5200 1340 GOSUB 3460 1350 FOR I=1 TO N 1360 S1=S1+X1 1365 S2=S2+X2 1370 IF S1=8.5 THEN 1480 1376 IF S2>=8.5 THEN 1480 1410 IF Q(S1,S2)=0 THEN 1450 1420 PRINT "ENTERPRISE BLOCKED BY OBJECT AT SECTOR ";S1;"-";S2 1424 IF Q(S1,S2)=3 THEN PRINT "YOU RAMMED A STARBASE....TURKEY!" 1428 IF Q(S1,S2)=2 THEN PRINT "A KLINGON...OUCH....(BETTER GET HIM QUICK)" 1430 S1=S1-X1 1435 S2=S2-X2 1440 GOTO 1460 1450 NEXT I 1460 Q(S1,S2)=1 1465 S1=INT(S1+P5) 1466 S2=INT(S2+P5) 1470 GOTO 700 1480 Q1=INT(Q1+W1*X1+(X-P5)/8) 1482 IF Q1>8 THEN Q1=8 1484 IF Q1<1 THEN Q1=1 1490 Q2=INT(Q2+W1*X2+(Y-P5)/8) 1492 IF Q2>8 THEN Q2=8 1494 IF Q2<1 THEN Q2=1 1496 S1=X+W1*X1*8 1498 S2=Y+W1*X2*8 1500 S1=S1-INT(S1/8)*8 1502 S2=S2-INT(S2/8)*8 1504 IF S1=0 THEN 1640 1620 PRINT "LONG RANGE SENSORS ARE INOPERABLE" 1630 GOTO 955 1640 PRINT "LONG RANGE SENSOR SCAN FOR QUADRANT ";Q1;",";Q2 1645 PRINT "----------------- #" 1660 FOR I=Q1-1 TO Q1+1 1670 N(1)=0:N(2)=0:N(3)=0 1680 FOR J=Q2-1 TO Q2+1 1690 IF I<1 THEN 1740 1700 IF I>8 THEN 1740 1710 IF J<1 THEN 1740 1720 IF J>8 THEN 1740 1730 N(J-Q2+2)=G(I,J) 1740 NEXT J 1750 PRINT " ";N(1);" ";N(2);" ";N(3) 1760 PRINT "----------------- #" 1770 NEXT I 1780 GOTO 955 1800 !PHASER CONTROL 1810 IF D(4)>=0 THEN 1840 1820 PRINT "PHASER CONTROL IS DISABLED" 1830 GOTO 955 1840 PRINT "PHASERS LOCKED ON TARGET, ENERGY AVAILABLE = ";E 1850 PRINT "NUMBER OF UNITS TO FIRE "; 1860 INPUT X 1870 IF X<= 0 THEN 955 1880 IF X-X<0 THEN 1840 1890 E=E-X 1895 IF K3=0 THEN 2000 1900 FOR I=1 TO 9 1910 IF K(I,3)<=0 THEN 1990 1929 H=X/RND(0)*(2+RND(0)) 1930 K(I,3)=K(I,3)-H 1940 PRINT H;" UNIT HIT ON KLINGON AT SECTOR ";K(I,1);"-";K(I,2) 1950 PRINT "(";K(I,3);" LEFT " 1960 IF K(I,3)=0 THEN 1990 1970 GOSUB 4500 1980 IF K9<= THEN 5300 1990 NEXT I 2000 GOSUB 5000 2010 IF E<=0 THEN 5230 2020 GOTO 955 3000 !PHOTON TORPEDOES 3010 IF D(5)>=0 THEN 3040 3020 PRINT "PHOTON TUBES ARE NOT OPERATIONAL" 3030 GOTO 955 3040 IF P>0 THEN 3070 3050 PRINT "ALL PHOTON TORPEDOES EXPENDED" 3060 GOTO 955 3070 PRINT "TORPEDO COURSE (1-8.9999) "; 3080 INPUT C1 3090 IF C1=0 THEN 955 3100 IF C1<1 THEN 3070 3110 IF C1>= 9 THEN 3070 3120 GOSUB 3460 3130 X=S1 3132 Y=S2 3134 P=P-1 3140 PRINT "TORPEDO TRACK "; 3150 X=X+X1 3155 Y=Y+X2 3160 IF X=8.5 THEN 3425 3166 IF Y>=8.5 THEN 3425 3200 PRINT INT(X+P5);"-";INT(Y+P5);" "; 3210 IF Q(X,Y)<=0 THEN 3230 3220 GOTO 3150 3230 IF Q(X,Y)<= 2 THEN 3330 3240 PRINT "*** KLINGON DESTROYED ***" 3250 K3=K3-1 3255 K9=K9-1 3260 IF K9<=0 THEN 5300 3270 FOR I=1 TO 9 3280 IF INT(X+P5)<=K(I,1) THEN 3301 3282 IF INT(Y+P5)=K(I,2) THEN 3310 3301 NEXT I 3310 K(I,3)=0 3320 GOTO 3401 3330 IF Q(X,Y)<>4 THEN 3370 3340 PRINT "STAR DESTROYED" 3350 S3=S3-1 3360 GOTO 3401 3370 PRINT 3380 PRINT "*** STAR BASE DESTROYED ... CONGRATULATIONS ***" 3390 B3=B3-1 3401 Q(X,Y)=0 3410 G(Q1,Q2)=K3*100+B3*10+S3 3420 GOTO 3430 3425 PRINT "TORPEDO MISSED" 3430 GOSUB 5000 3440 IF E<=0 THEN 5230 3450 GOTO 955 3460 X2=COS((C1-1)*.785398) 3470 X1=-SIN((C1-1)*.785398) 3480 RETURN 4000 ! 4001 !DAMAGE CONTROL REPORT 4010 IF D(6)>=0 THEN 4040 4020 PRINT "DAMAGE CONTROL REPORT IS NOT AVAILABLE" 4030 GOTO 955 4040 PRINT 4060 FOR I=1 TO 6 4070 PRINT D$(I),D(I) 4080 NEXT I 4090 PRINT 4100 GOTO 955 4201 ! 4500 PRINT "KLINGON AT SECTOR ";K(I,1);"-";K(I,2);" DESTROYED..." 4510 K3=K3-1 4520 K9=K9-1 4530 Q(K(I,1),K(I,2))=0 4540 G(Q1,Q2)=K3*100+B3*10+S3 4550 RETURN 5000 !KLINGON ATTACK 5002 IF S=0 THEN 5010 5004 PRINT "ENTERPRISE SHIELDS REPEL KLINGON ATTACK..." 5006 RETURN 5010 IF C$<>"DOCKED" THEN 5040 5020 PRINT "STAR BASE SHIELDS PROTECT THE ENTERPRISE" 5030 RETURN 5040 FOR I=1 TO 9 5050 IF K(I,3)<=0 THEN 5100 5060 H=(K(I,3)/RND(0))*(2+RND(0)) 5070 E=E-H 5080 PRINT H;" UNIT HIT ON ENTERPRISE FROM KLINGON AT ";K(I,1);"-";K(I,2) 5090 PRINT "(";E;" LEFT)" 5100 NEXT I 5110 RETURN 5200 !LOSE 5210 GOSUB 9985 5220 PRINT "IT IS STARDATE ";T 5230 GOTO 5250 5240 GOSUB 9985 5250 !ADD LOG FILE: PRINT #1,0:RESTORE #1 5252 PRINT "THE ENTERPRISE HAS BEEN DESTROYED " 5260 PRINT "THE FEDERATION WILL BE CONQUERED." 5270 PRINT "THERE ARE STILL";K9;"KLINGON BATTLE CRUISERS." 5280 PRINT "YOU ARE #+++++D#+++++E#+++++A#+++++D#+++++...#" 5281 PRINT "THE ENTERPRISE HAS BEEN REBUILT." 5282 PRINT "WOULD YOU LIKE TO WRECK IT AGAIN (NEW MISSION) "; 5284 INPUT A$ 5285 IF A$="YES" THEN 10 5287 IF A$<>"NO" THEN 5282 5290 STOP 5300 !WIN 5301 !LOG FILE STUFF:PRINT #1,0:RESTORE #1 5310 GOSUB 9985 5320 PRINT "IT IS STARDATE"T 5330 PRINT "THE LAST KLINGON BATTLE CRUISER IN THE GALAXY" 5331 PRINT "HAS BEEN DESTROYED." 5340 PRINT "THE FEDERATION HAS BEEN SAVED." 5350 PRINT "YOU HAVE BEEN PROMOTED TO ADMIRAL." 5360 PRINT K0;"KLINGONS IN";T-T0;"YRS. RATING=";INT(K0/(T-T0)*1000) 5362 PRINT "#HOW ABOUT A NEW MISSION, ADMIRAL"; 5363 INPUT A$ 5364 IF A$="YES" THEN 10 5366 IF A$<>"NO" THEN 5362 5370 STOP 9000 !RANDOM NO. GENERATOR 9010 R1=INT(RND(0)*8+1) 9020 R2=INT(RND(0)*8+1) 9030 IF Q(R1,R2)<=0 THEN 9010 9040 RETURN 9050 PRINT "ORDERS: STARDATE=";T 9060 PRINT 9070 PRINT " AS COMMANDER OF THE UNITED STARSHIP ENTERPRISE," 9080 PRINT "YOUR MISSION IS TO RID THE GALAXY OF THE DEADLY" 9090 PRINT "KLINGON MENACE. TO DO THIS, YOU MUST DESTROY THE" 9100 PRINT "KLINGON INVASION FORCE OF ";K9;" BATTLE CRUISERS." 9110 PRINT "YOU HAVE";T9;"SOLAR YEARS TO COMPLETE YOUR MISSION." 9120 PRINT "(I.E. UNTIL STARDATE";T0+T9;")." 9125 PRINT 9162 PRINT "ENTERPRISE CURRENTLY IN QUAD";Q1;"-";Q2;" SEC";S1;"-";S2 9163 PRINT "DO YOU NEED FURTHER INSTRUCTIONS"; 9164 INPUT A$ 9170 !IF A$="RESTART" THEN 5 9172 IF A$<="YES" THEN 400 9175 PRINT "...INSTRUCTIONS HERE..." 9965 GOTO 400 9966 PRINT 9970 PRINT "END OF PAGE, INPUT ANY NUMBER TO CONTINUE"; 9975 INPUT X 9980 REM 9985 FOR I=1 TO 3 9986 PRINT 9990 NEXT I 9992 IF X<0 THEN 400 9995 RETURN 9999 END