File STARTR.BA (BASIC source file)

Directory of image this file is from
This file as a plain text file

10 REM ********** STAR TREK SPACE SIMULATOR **********
20 REM
30 PRINT\PRINT\PRINT "STAR TREK SPACE SIMULATOR"
40 RANDOMIZE
70 DEF FNA(X)=INT(X*RND(1)+1)
80 DIM G(8,8),Z$(20),X$(24)
90 T0=(FNA(20)+20)*100
91 T=T0
100 E=3000
110 P=15
120 S=0
130 X$="------------------------"
140 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
150 Q1=FNA(8)
151 Q2=Q1
152 S1=Q1
153 S2=Q1
160 DIM C(9,2)
161 FOR I=1 TO 9\FOR J=1 TO 2\C(I,J)=1\NEXT J\NEXT I
170 C(2,1)=-1\C(3,1)=-1\C(4,1)=-1\C(4,2)=-1\C(5,2)=-1\C(6,2)=-1
180 C(1,1)=0\C(3,2)=0\C(5,1)=0\C(7,2)=0\C(9,1)=0
190 DIM D(6)\FOR I=1 TO 6\D(I)=0\NEXT I
200 B9=0\K9=0
210 FOR I=1 TO 8
220 FOR J=1 TO 8
230 K3=0\B3=0
240 IF RND(1)<.8 THEN 270
250 K3=FNA(3)
260 K9=K9+K3
270 IF RND(1)<.96 THEN 300
280 B3=1
290 B9=B9+1
300 S3=FNA(5)
310 G(I,J)=K3*100+B3*10+S3
320 NEXT J
330 NEXT I
340 IF K9=0 THEN 200\IF B9=0 THEN 200
350 GOTO 3570
360 IF Q1>=1 THEN 380
370 S1=1\Q1=1
380 IF Q1<=8 THEN 400
390 S1=8\Q1=8
400 IF Q2>=1 THEN 420
410 S2=1\Q2=1
420 IF Q2<=8 THEN 440
430 S2=8\Q2=8
440 X=G(Q1,Q2)/100
450 K3=INT(X)
460 B3=INT((X-K3)*10)
470 S3=G(Q1,Q2)-((B3*10)+(K3*100))
480 IF K3=0 THEN 520
490 PRINT "COMBAT AREA","CONDITION RED"

500 IF S>(K3*100) THEN 520 510 PRINT " SHIELDS DANGEROUSLY LOW" 520 DIM K(3,3)\FOR I=1 TO 3\FOR J=1 TO 3\K(I,J)=0\NEXT J\NEXT I 530 DIM Q(8,8)\FOR I=1 TO 8\FOR J=1 TO 8\Q(I,J)=0\NEXT J\NEXT I 540 Q(S1,S2)=1 550 FOR I=1 TO K3 560 GOSUB 3500 570 Q(R1,R2)=2 580 K(I,1)=R1 590 K(I,2)=R2 600 K(I,3)=200 610 NEXT I 620 IF B3=0 THEN 650 630 GOSUB 3500 640 Q(R1,R2)=4 650 FOR I=1 TO S3 660 GOSUB 3500 670 Q(R1,R2)=3 680 NEXT I 690 GOSUB 2600 700 PRINT "COMMAND"; 710 INPUT A 720 IF A<1 THEN 780\IF A>5 THEN 780\IF A<>INT(A) THEN 780 730 R1=A+1 740 IF D(R1)>=0 THEN 780 750 GOSUB 3420 760 PRINT Z$;" NOT OPERATIONAL." 770 GOTO 700 780 IF A+1=1 GOTO 890\IF A+1=2 GOTO 1520\IF A+1=3 GOTO 1640 781 IF A+1=4 GOTO 1800\IF A+1=5 GOTO 2200\IF A+1=6 GOTO 3010 782 IF A+1=7 GOTO 3550 790 PRINT 800 PRINT "0=SET COURSE";TAB(20);"4 3 2" 810 PRINT "1=LONG RANGE SCAN";TAB(21);PNT(220);" ^ /" 820 PRINT "2=PHASER CTRL.";TAB(22);PNT(220);"^/" 830 PRINT "3=TORPEDO CTRL.";TAB(18);"5 ------- 1" 840 PRINT "4=SHIELDS";TAB(22);"/^";PNT(220) 850 PRINT "5=LIBRARY COMPUTER";TAB(21);"/ ^ ";PNT(220) 860 PRINT "6=RESIGNATION";TAB(20);"6 7 8" 870 PRINT 880 GOTO 700 890 PRINT "COURSE (1-8)"; 900 INPUT C1 910 IF C1<1 THEN 700\IF C1>=9 THEN 700 920 PRINT "WARP FACTOR (0-8)"; 930 INPUT W1 940 IF W1<=0 THEN 700\IF W1>8 THEN 700 950 IF D(1)>=0 THEN 980\IF W1<=.5 THEN 980 960 PRINT "ENGINES ARE DAMAGED. MAXIMUM SPEED = WARP 0.5" 970 GOTO 920 980 IF E-(W1*8)>0 THEN 1030 990 IF S<1 THEN 2470
1000 PRINT "YOU ONLY HAVE";E;"UNITS. SUGGEST YOU TRANSFER FROM" 1010 PRINT "SHIELDS WHICH HAVE";S;"UNITS." 1020 GOTO 700 1030 FOR I=1 TO 6 1040 IF D(I)>=0 THEN 1060 1050 D(I)=D(I)+1 1060 NEXT I 1070 IF FNA(10)<>5 THEN 1120\IF W1<2 THEN 1120 1080 R1=FNA(6) 1090 D(R1)=D(R1)-FNA(5) 1100 GOSUB 3420 1110 PRINT\PRINT "DAMAGE CONTROL REPORTS '";Z$;"' DAMAGED."\PRINT 1120 N=INT(W1*8) 1130 Q(S1,S2)=0 1140 X=S1 1150 Y=S2 1160 C2=INT(C1) 1170 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2) 1180 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2) 1190 FOR I=1 TO N 1200 S1=S1+X1 1210 S2=S2+X2 1220 IF S1<1 THEN 1360\IF S1>8 THEN 1360\IF S2<1 THEN 1360 1221 IF S2>8 THEN 1360 1230 IF Q(INT(S1),INT(S2))=0 THEN 1270 1240 S1=S1-X1 1250 S2=S2-X2 1260 PRINT "DANGER AHEAD, ENTERPRISE STOPPED"\GOTO 1280 1270 NEXT I 1280 S1=INT(S1) 1290 S2=INT(S2) 1300 Q(S1,S2)=1 1310 E=E-N 1320 IF W1<1 THEN 690 1330 T=T+1 1340 IF T>T0+30 THEN 2500 1350 GOTO 690 1360 X=Q1*8+X+X1*N 1370 Y=Q2*8+Y+X2*N 1380 Q1=INT(X/8) 1390 Q2=INT(Y/8) 1400 S1=INT(X-Q1*8+.5) 1410 S2=INT(Y-Q2*8+.5) 1420 IF S1>0 THEN 1450 1430 Q1=Q1-1 1440 S1=8 1450 IF S2>0 THEN 1480 1460 Q2=Q2-1 1470 S2=8 1480 T=T+1 1490 E=E-N+5
1500 IF T>T0+30 THEN 2500 1510 GOTO 360 1520 PRINT X$(1,17) 1525 DIM N(3) 1530 FOR I=Q1-1 TO Q1+1 1540 N(1)=0\N(2)=0\N(3)=0 1550 FOR J=Q2-1 TO Q2+1 1560 IF I<1 THEN 1580\IF I>8 THEN 1580 1565 IF J<1 THEN 1580\IF J>8 THEN 1580 1570 N(J-Q2+2)=G(I,J) 1580 NEXT J 1590 PRINT ":";N(1);TAB(7);":";N(2);TAB(13);":";N(3);TAB(19);":"; 1600 PRINT X$(1,17) 1610 NEXT I 1620 GOTO 700 1640 IF K3=0 THEN 2350 1650 PRINT "ENERGY AVAILABLE =";E 1660 PRINT "NUMBER OF UNITS TO FIRE ="; 1670 INPUT X 1680 IF X<1 THEN 700 1690 IF E-X<0 THEN 1660 1700 E=E-X 1710 FOR I=1 TO 3 1720 IF K(I,3)=0 THEN 1780 1730 H=INT(X/K3/(FND(0))) 1740 K(I,3)=K(I,3)-H 1750 PRINT H;"UNIT HIT ON KLINGON" 1760 IF K(I,3)>0 THEN 1780 1770 GOSUB 2050 1780 NEXT I 1790 GOTO 2030 1800 IFP>0 THEN 1830 1810 PRINT "ALL PHOTON TORPEDOES EXPENDED." 1820 GOTO 700 1830 PRINT "TORPEDO COURSE (1-9)"; 1840 INPUT C1 1850 IF C1<1 THEN 700\IF C1=>9 THEN 700 1860 C2=INT(C1) 1870 X1=C(C2,1)+(C(C2+1,1)-C(C2,1))*(C1-C2) 1880 X2=C(C2,2)+(C(C2+1,2)-C(C2,2))*(C1-C2) 1890 X=S1 1900 Y=S2 1910 P=P-1 1920 PRINT 1930 X=X+X1 1940 Y=Y+X2 1950 IF X<1 THEN 2180\IF X>8 THEN 2180\IF Y<1 THEN 2180\IF Y>8 THEN 2180 1960 IF Q(INT(X),INT(Y))<>0 THEN 1970 1961 IF Q(INT(X+.5),INT(Y+.5))<>0 THEN 1970 1962 GOTO 1930 1970 FOR I=1 TO 3 1980 IF INT(X)<>K(I,1) THEN 1990 1981 IF INT(Y)<>K(I,2) THEN 1990 1982 GOTO 2020 1990 IF INT(X+.5)<>K(I,1) THEN 2000 1991 IF INT(Y+.5)<>K(I,2) THEN 2000 1993 GOTO 2020
2000 NEXT I 2010 GOTO 2120 2020 GOSUB 2050 2030 GOSUB 2370 2040 GOTO 700 2050 K(I,3)=0\Q(K(I,1),K(I,2))=0 2060 PRINT "***KLINGON DESTROYED***" 2070 K3=K3-1 2080 K9=K9-1 2090 IF K9=0 THEN 2550 2100 G(Q1,Q2)=G(Q1,Q2)-100 2110 RETURN 2120 IF Q(INT(X),INT(Y))<>3 THEN 2150 2130 PRINT "YOU CAN'T DESTROY STARS, SILLY!" 2140 GOTO 2180 2150 PRINT "***STARBASE DESTROYED***" 2160 PRINT "YOU ARE HEREBY RELIEVED OF DUTY!! CONGRATULATIONS!" 2170 GOTO 2530 2180 PRINT "TORPEDO MISSED." 2190 GOTO 2030 2200 PRINT "ENERGY AVAILABLE";E+5 2210 PRINT "NUMBER OF UNITS TO SHIELDS"; 2220 INPUT X 2230 IF X<0 THEN 700 2240 IF E+S-X<0 THEN 2210 2250 E=E+S-X 2260 S=X 2270 GOTO 700 2280 PRINT\PRINT "DEVICE","STATE OF REPAIR" 2290 FOR R1=1 TO 6 2300 GOSUB 3420 2310 PRINT Z$,D(R1) 2320 NEXT R1 2330 PRINT 2340 GOTO 700 2350 PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRENT." 2360 GOTO 700 2370 IF C$="DOCKED" THEN 2460 2380 IF K3=0 THEN 2460 2390 FOR I=1 TO 3 2400 IF K(I,3)=0 THEN 2450 2410 H=INT(K(I,3)/FND(0)+1) 2420 S=S-H 2430 PRINT H;"UNIT HIT ON ENTERPRISE." 2440 IF S<0 THEN 2520 2450 NEXT I 2460 RETURN 2470 PRINT "***FATAL ERROR***" 2480 PRINT "THE ENTERPRISE IS DEAD IN SPACE, AND MUST BE EVACUATED!!" 2490 GOTO 2530
2500 PRINT\PRINT "IT IS STARDATE";T 2510 GOTO 2530 2520 PRINT\PRINT " *** THE ENTERPRISE HAS BEEN DESTROYED ***" 2530 PRINT\PRINT "THE FEDERATION WILL BE CONQUERED!!!" 2540 GOTO 3560 2550 PRINT 2560 PRINT "THE LAST KLINGON CRUSER HAS BEEN DESTROYED!!" 2570 PRINT "THE FEDERATION HAS BEEN SAVED!!" 2580 PRINT 2590 GOTO 3560 2600 FOR I=S1-1 TO S1+1 2610 FOR J=S2-1 TO S2+1 2620 IF I<1 THEN 2640\IF I>8 THEN 2640 2621 IF J<1 THEN 2640\IF J>8 THEN 2640 2630 IF Q(I,J)=4 THEN 2670 2640 NEXT J 2650 NEXT I 2660 GOTO 2730 2670 C$="DOCKED" 2680 E=3000 2690 P=15 2700 FOR I=1 TO 6\D(I)=0\NEXT I 2710 S=0 2720 GOTO 2810 2730 PRINT 2740 IF K3>0 THEN 2780 2750 IF E<300 THEN 2800 2760 C$="GREEN" 2770 GOTO 2810 2780 C$="RED" 2790 GOTO 2810 2800 C$="YELLOW" 2810 PRINT X$ 2820 Z=0 2830 GOSUB 3330 2840 PRINT 2850 GOSUB 3330 2860 PRINT "STARDATE ";T 2870 GOSUB 3330 2880 PRINT "CONDITION ";C$ 2890 GOSUB 3330 2900 PRINT "ENERGY ";E 2910 GOSUB 3330 2920 PRINT "TORPEDOES ";P 2930 GOSUB 3330 2940 PRINT "SHIELDS ";S 2950 GOSUB 3330 2960 PRINT "KLINGONS ";K9 2970 GOSUB 3330 2980 PRINT 2990 PRINT X$
3000 RETURN 3010 PRINT "COMPUTER ACTIVE AND AWAITING COMMAND"; 3020 INPUT A 3030 IF A+1=1 GOTO 2280\IF A+1=2 GOTO 3100\IF A+1=3 GOTO 3310 3040 PRINT "FUNCTIONS AVAILABLE FROM COMPUTER:" 3050 PRINT " 0=DAMAGE REPORT" 3060 PRINT " 1=PHOTON TORPEDO DATA" 3070 PRINT " 2=SHORT RANGE SCAN" 3080 PRINT 3090 GOTO 3010 3100 PRINT 3110 FOR I=1 TO 3 3120 IF K(I,3)<=0 THEN 3200 3130 X=K(I,2)-S2 3140 Y=S1-K(I,1) 3150 IF X=0 THEN 3240 3160 A=INT(((57.3*ATN(Y/X))/45+1)*100)/100 3170 IF X<=0 THEN 3180\IF Y=>0 THEN 3180\GOTO 3290 3180 IF X<0 THEN 3220 3190 PRINT "DIRECTION=";A 3200 NEXT I 3210 GOTO 700 3220 A=A+4 3230 GOTO 3190 3240 IF Y<0 THEN 3270 3250 A=3 3260 GOTO 3190 3270 A=7 3280 GOTO 3190 3290 A=A+8 3300 GOTO 3190 3310 GOSUB 2600 3320 GOTO 700 3330 REM *****OUTPUT QUADRENT***** 3340 Z=Z+1 3350 FOR I=1 TO 8 3360 Z$=" <*>+++ * >!<" 3370 PRINT SEG$(Z$,Q(Z,I)*3+1,Q(Z,I)*3+3); 3380 NEXT I 3390 IF Z=1 THEN 3410\IF Z=8 THEN 3410 3400 PRINT " "; 3410 RETURN 3420 REM *****PRINTS DEVICE NAME***** 3430 DIM Z9$(6,15)\Z9$(1)="WARP ENGINES"\Z9$(2)="SCANNERS" 3440 Z9$(3)="PHASER BANKS"\Z9$(4)="TORPEDO TUBES" 3450 Z9$(5)="SHIELD CONTROL"\Z9$(6)="COMPUTER" 3470 Z$=Z9$(R1) 3490 RETURN
3500 REM ***PLACEMENT IN QUADRANT ARRAY*** 3510 R1=FNA(8) 3520 R2=FNA(8) 3530 IF Q(R1,R2)<>0 THEN 3510 3540 RETURN 3550 PRINT\PRINT "YOUR RESIGNATION HAS BEEN ACCEPTED." 3560 STOP 3570 PRINT 3572 PRINT "DO YOU NEED INSTRUCTIONS"; 3580 INPUT A4$ 3590 PRINT\PRINT\PRINT 3600 IF A4$="N" THEN 440\IF A$="NO" THEN 440 3601 IF A4$="Y" THEN 3605\IF A4$="YES" THEN 3605\GOTO 3570 3605 PRINT TAB(20);"STAR TREK SPACE SIMULATOR"\PRINT 3606 PRINT "AS CAPTAIN OF THE ENTERPRISE, YOU HAVE 30 STARDATES" 3607 PRINT "TO DESTROY THE KLINGONS. ONE STARDATE TRANSPIRES EACH TIME" 3608 PRINT "YOU MOVE TO A NEW SECTOR. (THE UNIVERSE IS 8X8 SECTORS)." 3609 PRINT\PRINT "SCAN CHART SYMBOLS:" 3610 PRINT TAB(5);"<*> = ENTERPRISE" 3620 PRINT TAB(5);" * = STAR" 3630 PRINT TAB(5);"+++ = KLINGON" 3640 PRINT TAB(5);">!< = STARBASE" 3650 PRINT\PRINT "OPERATING COMMANDS FOR THE ENTERPRISE:" 3660 PRINT\PRINT "COMMAND 0 = WARP ENGINES." 3670 PRINT " COURSE IS IN A CIRCULAR VECTOR AS SHOWN.";TAB(50);"4 3 2" 3680 PRINT " REAL VALUES MAY BE USED. FOR EXAMPLE"; 3681 PRINT TAB(51);PNT(220);" ^ /" 3690 PRINT " 1.2 WOULD BE HALF WAY BETWEEN 1 AND 2."; 3691 PRINT TAB(52);PNT(220);"^/" 3700 PRINT TAB(48);"5 ------- 1" 3710 PRINT " A 'WARP FACTOR' IS THE SIZE OF ONE QUARDRANT."; 3711 PRINT TAB(52);"/^";PNT(220) 3720 PRINT TAB(51);"/ ^ ";PNT(220) 3730 PRINT TAB(50);"6 7 8" 3740 PRINT\PRINT "COMMAND 1 = LONG RANGE SCAN." 3750 PRINT " CODED IN THE FORM XXX, WHERE THE UNITS ARE THE NUMBER" 3760 PRINT " OF STARS, TENS THE NUMBER OF STARBASES, AND HUNDREDS" 3770 PRINT " THE NUMBER OF KLINGONS." 3780 PRINT\PRINT "COMMAND 2 = PHASERS." 3790 PRINT " YOU MAY DESTROY THE KLINGON BY USING ENOUGH PHASER" 3800 PRINT " POWER AS TO DEPLETE HIS SHIELDS. KEEP IN MIND THAT WHEN" 3810 PRINT " YOU FIRE AT HIM, HE WILL FIRE BACK!" 3820 PRINT\PRINT "COMMAND 3 = PHOTON TORPEDOES." 3830 PRINT " COURSE IS THE SAME AS WITH WARP ENGINES. THE LIBRARY" 3840 PRINT " COMPUTER WILL COMPUTE TRAJECTORIES FOR YOU (OPTION 1)." 3850 PRINT\PRINT "COMMAND 4 = SHIELDS." 3860 PRINT " DEFINES THE AMOUNT OF ENERGY TO BE ASSIGNED TO SHIELDS." 3870 PRINT\PRINT "COMMAND 5 = LIBRARY COMPUTER." 3880 PRINT " OPTION 0 = DAMMAGE REPORT." 3890 PRINT " A STATE OF REPAIR OF LESS THAN ZERO INDICATES THAT" 3900 PRINT " THE DEVICE IS TEMPORARILY DISABLED." 3910 PRINT " OPTION 1 = PHOTON TORPEDO DATA." 3920 PRINT " GIVES DIRECTION TO ALL KLINGONS IN YOUR QUADRANT." 3930 PRINT " OPTION 2 = SHORT RANGE SCAN." 3940 PRINT " ALSO GIVEN AUTOMATICALLY AFTER SUCCESSFUL COMPLETION" 3950 PRINT " OF WARP ENGINE MANUVERS." 3960 PRINT\PRINT "COMMAND 6 = RESIGNATION." 3970 PRINT\PRINT "GOOD LUCK!" 3980 GOTO 440 3990 END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search