File BATTLE.BA (BASIC source file)

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

10 REM -- BATTLE WRITTEN BY RAY WESTERGARD  10/70
20 REM COPYRIGHT 1971 BY THE REGENTS OF THE UNIV. OF CALIF.
30 REM PRODUCED AT THE LAWRENCE HALL OF SCIENCE, BERKELEY
35 REMARKABLY TRANSLATED TO OS8 BASIC BY KAY R. FISHER ...DEC
40 DIM F(6,6),H(6,6),A(4),B(4),C(6),L(3)
50 FOR I=1 TO 6
52 FOR J=1 TO 6
54 F(I,J)=0
56 NEXT J
58 NEXT I
60 FOR I=1 TO 3
70 N=4-I
80 FOR J=1 TO 2
90 A=INT(6*RND(0))+1
100 B=INT(6*RND(0))+1
110 D=INT(4*RND(0))+1
120 IF F(A,B)>0 THEN 90
130 M=0
140 IF D=2 GOTO 340\IF D=3 GOTO 550\IF D=4 GOTO 740
150 B(1)=B
160 B(2)=7\B(3)=7
170 FOR K=1 TO N
180 IF M>1 THEN 240
190 IF B(K)=6 THEN 230
200 IF F(A,B(K)+1)>0 THEN 230
210 B(K+1)=B(K)+1
220 GOTO 280
230 M=2
240 IF B(1)>B(2)GOTO242\IFB(1)>B(3)GOTO 242\Z=B(1)\GOTO 250
242 IF B(2)>B(3) GOTO 244\Z=B(2)\GOTO 250
244 Z=B(3)
250 IF Z=1 THEN 90
260 IF F(A,Z-1)>0 THEN 90
270 B(K+1)=Z-1
280 NEXT K
290 F(A,B)=9-2*I-J
300 FOR K=1 TO N
310 F(A,B(K+1))=F(A,B)
320 NEXT K
330 GOTO 990
340 A(1)=A
350 B(1)=B
360 A(2)=0\A(3)=0\B(2)=0\B(3)=0
370 FOR K=1 TO N
380 IF M>1THEN 460
390 IF A(K)=1 GOTO 450\IF B(K)=1 GOTO 450
400 IF F(A(K)-1,B(K)-1)>0 THEN 450
410IFF(A(K)-1,B(K))=<0GOTO420\IFF(A(K)-1,B(K))=F(A(K),B(K)-1)THEN450
420 A(K+1)=A(K)-1
430 B(K+1)=B(K)-1
440 GOTO 530
450 M=2
460 IF A(1)<A(2)GOTO 462\IFA(1)<A(3)GOTO 462\Z1=A(1)\GOTO 470
462 IF A(2)<A(3)GOTO 464\Z1=A(2)\GOTO 470
464 Z1=A(3)
470 IFB(1)<B(2)GOTO 472\IF B(1)<B(3)GOTO 472\Z2=B(1)\GOTO 480
472 IF B(2)<B(3)GOTO 474\Z2=B(2)\GOTO 480
474 Z2=B(3)
480 IF Z1=6 GOTO 90\IF Z2=6 GOTO 90
490 IF F(Z1+1,Z2+1)>0 THEN 90
500 IF F(Z1,Z2+1)=<0 GOTO 510\IF F(Z1,Z2+1)=F(Z1+1,Z2)THEN 90
510 A(K+1)=Z1+1
520 B(K+1)=Z2+1
530 NEXT K
540 GOTO 950
550 A(1)=A
560 A(2)=7\A(3)=7
570 FOR K=1 TO N
580 IF M>1 THEN 640
590 IF A(K)=6 THEN 630
600 IF F(A(K)+1,B)>0 THEN 630
610 A(K+1)=A(K)+1
620 GOTO 680
630 M=2
640 IF A(1)>A(2)GOTO 642\IF A(1)>A(3)GOTO 642\Z=A(1)\GOTO 650
642 IF A(2)>A(3)GOTO 644\Z=A(2)\GOTO 650
644 Z=A(3)
650 IF Z=1 THEN 90
660 IF F(Z-1,B)>0 THEN 90
670 A(K+1)=Z-1
680 NEXT K
690 F(A,B)=9-2*I-J
700 FOR K=1 TO N
710 F(A(K+1),B)=F(A,B)
720 NEXT K
730 GOTO 990
740 A(1)=A
750 B(1)=B
760 A(2)=7\A(3)=7
770 B(2)=0\B(3)=0
780 FOR K=1 TO N
790 IF M>1 THEN 870
800 IF A(K)=6 GOTO 860\IF B(K)=1 GOTO 860
810 IF F(A(K)+1,B(K)-1)>0 THEN 860
820 IF F(A(K)+1,B(K))=<0GOTO 830\IFF(A(K)+1,B(K))=F(A(K),B(K)-1)THEN 860
830 A(K+1)=A(K)+1
840 B(K+1)=B(K)-1
850 GOTO 940
860 M=2
870 IF A(1)>A(2)GOTO 872\IF A(1)>A(3)GOTO 872\Z1=A(1)\GOTO 880
872 IF A(2)>A(3)GOTO 874\Z1=A(2)\GOTO 880
874 Z1=A(3)
880 IF B(1)<B(2)GOTO 882\IF B(1)<B(3)GOTO 882\Z2=B(1)\GOTO 890
882 IF B(2)<B(3)GOTO 884\Z2=B(2)\GOTO 890
884 Z2=B(3)
890 IF Z1=1 GOTO 90\IF Z2=6 THEN 90
900 IF F(Z1-1,Z2+1)>0 THEN 90
910 IF F(Z1,Z2+1)=<0 GOTO 920\IF F(Z1,Z2+1)=F(Z1-1,Z2) THEN 90
920 A(K+1)=Z1-1
930 B(K+1)=Z2+1
940 NEXT K
950 F(A,B)=9-2*I-J
960 FOR K=1 TO N
970 F(A(K+1),B(K+1))=F(A,B)
980 NEXT K
990 NEXT J
1000 NEXT I
1010 PRINT
1020 PRINT "THE FOLLOWING CODE OF THE BAD GUYS' FLEET DISPOSITION"
1030 PRINT "HAS BEEN CAPTURED BUT NOT DE-CODED:"
1040 PRINT
1050 FOR I=1 TO 6
1052 FOR J=1 TO 6
1054 H(I,J)=F(I,J)
1056 NEXT J
1058 NEXT I
1060 FOR I=1 TO 6
1062 FOR J=1 TO 6
1064 PRINT H(I,J);"    ";
1066 NEXT J
1068 PRINT\PRINT\PRINT\NEXT I
1070 PRINT
1080 PRINT "DE-CODE IT AND USE IT IF YOU CAN"
1090 PRINT "BUT KEEP THE DE-CODING METHOD A SECRET."
1100 PRINT
1110 FOR I=1 TO 6
1112 FOR J=1 TO 6
1114 H(I,J)=0
1116 NEXT J
1118 NEXT I
1120 FOR I=0 TO 3
1122 L(I)=0
1124 NEXT I
1130 C(1)=2\C(2)=2
1140 C(3)=1\C(4)=1
1150 C(5)=0\C(6)=0
1160 S=0\H=0
1170 PRINT "START GAME"
1180 INPUT X,Y
1190 IF X<1GOTO 1210\IF X>6 GOTO 1210\IF INT(X)<>ABS(X) THEN 1210
1200 IF Y<1GOTO1210\IF Y>6GOTO1210\IF INT(Y)=ABS(Y)THEN 1230
1210 PRINT "INVALID INPUT,TRY AGAIN."
1220 GOTO 1180
1230 R=7-Y
1240 C=X
1250 IF F(R,C)>0 THEN 1290
1260 S=S+1
1270 PRINT "SPLASH! TRY AGAIN."
1280 GOTO 1180
1290 IF C(F(R,C))<4 THEN 1340
1300 PRINT "THERE USED TO BE A SHIP AT THAT POINT, BUT YOU SUNK IT."
1310 PRINT "SPLASH! TRY AGAIN."
1320 S=S+1
1330 GOTO 1180 
1340 IF H(R,C)>0 THEN 1420
1350 H=H+1
1360 H(R,C)=F(R,C)
1370 PRINT "A DIRECT HIT ON SHIP NUMBER";F(R,C)
1380 C(F(R,C))=C(F(R,C))+1
1390 IF C(F(R,C))>=4 THEN 1470
1400 PRINT "TRY AGAIN."
1410 GOTO 1180
1420 PRINT "YOU HAVE ALREADY PUT A HOLE IN SHIP NUMBER";F(R,C)
1430 PRINT "AT THAT POINT."
1440 PRINT "SPLASH! TRY AGAIN."
1450 S=S+1
1460 GOTO 1180
1470 L(INT((F(R,C)-1)/2)+1)=L(INT((F(R,C)-1)/2)+1)+1
1480 PRINT "AND YOU SUNK IT.  HURRAH FOR THE GOOD GUYS."
1490 PRINT "SO FAR THE BAD GUYS HAVE LOST"
1500 PRINT L(1);"DESTROYER(S),   ";L(2);"CRUISER(S),  AND  ";
1510 PRINTL(3);"AIRCRAFT CARRIER(S)."
1520 PRINT "YOUR CURRENT SPLASH/HIT RATIO IS ";S/H
1530 IF (L(1)+L(2)+L(3))<6 THEN 1180
1540 PRINT
1550 PRINT "YOU HAVE TOTALLY WIPED OUT THE BAD GUYS' FLEET"
1560 PRINT "WITH A FINAL SPLASH/HIT RATIO OF";S/H
1570 IF S/H>0 THEN 1590
1580 PRINT "CONGRATULATIONS -- A DIRECT HIT EVERY TIME."
1590 PRINT
1600 PRINT "*******************"
1610 PRINT
1620 GOTO 50
1630 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