A large commit.
[pdp8.git] / sw / src / basic / BBALLA.BA
diff --git a/sw/src/basic/BBALLA.BA b/sw/src/basic/BBALLA.BA
new file mode 100644 (file)
index 0000000..71a1133
--- /dev/null
@@ -0,0 +1,216 @@
+100 REM                BASEBALL - 1977
+120 REM                ===============
+140 REM
+160 REM
+180 REM                K. M. BOWYER
+200 REM                1000 CEDAR AVE.
+220 REM                LEWES, DELAWARE
+240 REM                19958
+260 REM
+280 REM     <<<DEFINE DIMENSIONS>>>
+300 REM
+320 DIM N$(9),P9$(9,4),H9$(9,15),V9$(9,15),V(16),H(16)
+340 DIM I1(16),B3(7),Q(7)
+360 DIM S1$(5,1)
+380 REM
+400 REM     <<<GET FORMALITIES OUT OF THE WAY>>>
+420 REM
+440 PRINT "WELCOME TO SPITBALL STATIUM"\PRINT
+460 RANDOMIZE
+480 PRINT "TODAY OUR HOMETOWN 'SPITS' MEET THE VISITING :";
+500 INPUT N$\PRINT
+520 PRINT "WHILE THE SPITS TAKE THE FIELD, LETS LOOK AT THE LINEUPS."
+540 PRINT\PRINT "BAT","POS","SPITS",,N$\PRINT
+560 FOR I=1 TO 9
+580 READ P9$(I),H9$(I)
+600 PRINT I,P9$(I),H9$(I),,
+620 INPUT V9$(I)
+640 NEXT I
+660 REM
+680 REM     <<<SET UP CONSTANTS FOR  GAME>>>
+700 REM
+720 Q(1)=37\Q(2)=50\Q(3)=6\Q(4)=4\Q(5)=2\Q(6)=1
+740 Q(7)=Q(1)+Q(2)+Q(3)+Q(4)+Q(5)+Q(6)
+760 S=0\FOR I=1 TO 6\S=S+Q(I)\Q(I)=INT(S*100/Q(7))\NEXT I
+780 I1=0\T=1\O=3\FOR I=1 TO 16\H(I)=0\V(I)=0\NEXT I\B1=1\B2=1
+800 REM
+820 REM     <<<TOP OF INNING>>>
+840 REM
+860 GOTO 3440
+880 REM
+900 REM     <<<VISITING BATTER UP>>>
+920 REM     <<<PRINT DIAAMOND, SCORE, COUNT AND BATTER>>>
+940 REM
+960 GOSUB 3740
+980 PRINT\PRINT N$;" BATTER IS - ";V9$(B1);"."
+1000 REM
+1020 REM     <<<VISITOR BATTER SWINGS>>>
+1040 REM
+1060 GOSUB 2280\PRINT "YOUR SWING [(S)TEAL OR <CR>]: ";
+1080 PRINT\PRINT ">";
+1100 IF S$="S" GOTO 1980\Q(7)=100*RND(1)
+1120 IF Q(7)>Q(1) GOTO 1160\B=B+1\PRINT "BALL";B\IF B<4 GOTO 960
+1140 GOSUB 2680\GOTO 960
+1160 IF Q(7)>Q(2) GOTO 1240\S=S+1\PRINT "STRIKE";S
+1180 IF S=3 GOTO 1200\GOTO 960
+1200 O=O+1\B1=B1+1\IF B1=10 GOTO 1220\GOTO 3400
+1220 B1=1\GOTO 3400
+1240 IF Q(7)>Q(3) GOTO 1300\H5=1
+1260 P=40\GOSUB 3320\IF P=1 GOTO 4040
+1280 GOSUB 3020\GOTO 960
+1300 IF Q(7)>Q(4) GOTO 1320\H5=2\GOTO 1260
+1320 IF Q(7)>Q(5) GOTO 1340\H5=3\GOTO 1260
+1340 H5=4\GOTO 1260
+1360 REM
+1380 REM     <<<BOTTOM OF INNING>>>
+1400 REM     <<<PRINT DIAMOND, SCORE, COUNT AND BATTER>>>
+1420 REM
+1440 GOSUB 3740
+1460 PRINT\PRINT "SPITS BATTER IS - ";H9$(B2);"."
+1480 REM
+1500 REM     <<<VISITING PITCHER PITCHES>>>
+1520 REM
+1540 GOSUB 2280\PRINT "YOUR PITCH [<CR>]: ";
+1560 PRINT\PRINT ">";
+1580 REM
+1600 REM     <<<HOME TEAM STEAL GENERATOR>>>
+1620 REM
+1640 IF B3(1)+B3(2)+B3(3)=0 GOTO 1700
+1660 P=8\GOSUB 3320\IF P=0 GOTO 1700
+1680 GOTO 1980
+1700 Q(7)=100*RND(1)
+1720 IF Q(7)>Q(1) GOTO 1780\B=B+1\PRINT "BALL";B
+1740 IF B<4 GOTO 1440
+1760 GOSUB 2680\GOTO 1440
+1780 IF Q(7)>Q(2) GOTO 1860
+1800 S=S+1\PRINT "STRIKE";S\IF S=3 GOTO 1820\GOTO 1440
+1820 O=O+1\B2=B2+1\IF B2=10 GOTO 1840\GOTO 3440
+1840 B2=1\GOTO 3400
+1860 IF Q(7)>Q(3) GOTO 1900\H5=1
+1880 GOSUB 3020\GOTO 1440
+1900 IF Q(7)>Q(4) GOTO 1920\H5=2\GOTO 1880
+1920 IF Q(7)>Q(5) GOTO 1940\H5=3\GOTO 1880
+1940 H5=4\GOTO 1880
+1960 REM
+1980 REM     <<<STEAL HANDLER>>>
+2000 REM
+2020 FOR I=3 TO 1 STEP -1\IF B3(I)<>0 GOTO 2080\NEXT I
+2040 PRINT "CAN'T STEAL - NOBODY ON BASE !"
+2060 IF T=1 GOTO 1440\GOTO 960
+2080 IF T=1 GOTO 2100\PRINT V9$(B3(I));\GOTO 2120
+2100 PRINT H9$(B3(I));
+2120 PRINT " ATTEMPTS TO STEAL - HE IS ";
+2140 P=80-20*I\GOSUB 3320\IF P=1 GOTO 2180
+2160 PRINT "OUT !"\O=O+1\B3(I)=0\GOTO 3440
+2180 PRINT "SAFE !"\B3(I+1)=B3(I)\B3(I)=0
+2200 IF I<>3 GOTO 2060\GOSUB 2360\GOTO 2060
+2220 REM
+2240 REM     <<<PRINT COUNT SUBROUTINE>>>
+2260 REM
+2280 PRINT "   B    S    O"\PRINT "  ";B;"  ";S;"  ";O
+2300 PRINT
+2320 RETURN
+2340 REM
+2360 REM     <<<RUN HANDLER>>>
+2380 REM
+2400 IF B3(4)+B3(5)+B3(6)+B3(7)<>0 GOTO 2420\RETURN
+2420 FOR I=7 TO 4 STEP -1\IF B3(I)=0 GOTO 2480
+2440 IF T=1 GOTO 2520
+2460 PRINT V9$(B3(I));" SCORES"\V(I1)=V(I1)+1\V(16)=V(16)+1
+2480 B3(I)=0\NEXT I
+2500 RETURN
+2520 PRINT H9$(B3(I));" SCORES"\H(I1)=H(I1)+1\H(16)=H(16)+1
+2540 GOTO 2480
+2560 REM
+2580 REM     <<<CLEAR BASES, OUTS, STRIKES AND BALLS SUBROUTINE>>>
+2600 REM
+2620 FOR I=1 TO 7\B3(I)=0\NEXT I
+2640 B=0\S=0\O=0\RETURN
+2660 REM
+2680 REM     <<<WALK HANDLER>>>
+2700 REM
+2720 IF T=1 GOTO 2740\PRINT V9$(B1);" WALKS"\GOTO 2760
+2740 PRINT H9$(B2);" WALKS"
+2760 B=0\S=0\IF B3(1)<>0 GOTO 2860
+2780 B3(1)=B1
+2800 IF T=0 GOTO 2820\B2=B2+1\IF B2<>10 GOTO 2840\B2=1\GOTO 2840
+2820 B1=B1+1\IF B1<>10 GOTO 2840\B1=1
+2840 RETURN
+2860 IF B3(2)<>0 GOTO 2900
+2880 B3(2)=B3(1)\GOTO 2780
+2900 IF B3(3)<>0 GOTO 2940
+2920 B3(3)=B3(2)\GOTO 2880
+2940 B3(4)=B3(3)\GOSUB 2400\GOTO 2920
+2960 REM
+2980 REM     <<<HIT HANDLER>>>
+3000 REM
+3020 B=0\S=0\FOR I=1 TO H5
+3040 FOR J=7 TO 2 STEP -1
+3060 B3(J)=B3(J-1)
+3080 NEXT J\B3(1)=0
+3100 NEXT I
+3120 IF T=1 GOTO 3180
+3140 PRINT V9$(B1);\B3(H5)=B1
+3160 B1=B1+1\IF B1<>10 GOTO 3220\B1=1\GOTO 3220
+3180 PRINT H9$(B2);\B3(H5)=B2
+3200 B2=B2+1\IF B2<>10 GOTO 3220\B2=1
+3220 PRINT " GETS";H5;" BASE HIT"\GOSUB 2400
+3240 RETURN
+3260 REM
+3280 REM     <<<PROBABILITY HANDLER>>>
+3300 REM
+3320 IF P/100<=RND(1) GOTO 3340\P=1\GOTO 3360
+3340 P=0
+3360 RETURN
+3380 REM
+3400 REM     <<<OUT DISPATCHER>>>
+3420 REM
+3440 S=0\B=0\IF O=>3 GOTO 3460\IF T=1 GOTO 1440\GOTO 960
+3460 O=0\IF T=1 GOTO 3520
+3480 IF I1<9 GOTO 3500\IF V(16)=>H(16) GOTO 3500\GOTO 3600
+3500 PRINT\PRINT "BOTTOM OF INNING NO.";I1\T=1\GOSUB 2620\GOTO 1440
+3520 IF I1<9 GOTO 3560\IF I1=13 GOTO 3660
+3540 IF V(16)=H(16) GOTO 3560\GOTO 3600
+3560 PRINT\PRINT "TOP OF INNING NO.";\I1=I1+1
+3580 T=0\PRINT I1\GOSUB 2620\GOTO 960
+3600 PRINT\PRINT "END OF GAME"
+3620 FOR I=1 TO 7\B3(I)=0\NEXT I
+3640 PRINT "FINAL SCORE:"\GOSUB 3740\STOP
+3660 PRINT\PRINT "GAME CALLED DUE TO DARKNESS"\GOTO 3620
+3680 REM
+3700 REM     <<<DISPLAAY SUBROUTINE>>>
+3720 REM
+3740 PRINT\PRINT
+3760 IF B3(2)=0 GOTO 3780\PRINT "      [X]","   : INNING",\GOTO 3800
+3780 PRINT "      [O]","   : INNING",
+3800 FOR I=1 TO I1\PRINT I;\NEXT I\PRINT "   R"
+3820 IF B3(3)=0 GOTO 3840\PRINT "[X]         ";\GOTO 3860
+3840 PRINT "[O]         ";
+3860 IF B3(1)=0 GOTO 3880\PRINT "[X]  : ";\GOTO 3900
+3880 PRINT "[O]  : ";
+3900 PRINT N$,\FOR I=1 TO I1\PRINT V(I);\NEXT I\PRINT "  ";V(16)
+3920 PRINT "      [O]","   : SPITS",\FOR I=1 TO I1\PRINT H(I);\NEXT I
+3940 PRINT "  ";H(16)
+3960 RETURN
+3980 REM
+4000 REM     <<<FLY BALL & ERROR HANDELR>>>
+4020 REM
+4040 PRINT "FLY BALL CAUGHT BY ";
+4060 P=1+INT(9*RND(1))\IF T=1 GOTO 4100
+4080 PRINT H9$(P);" (";P9$(P);")"\GOTO 4120
+4100 PRINT V9$(P);" (";P9$(P);")"
+4120 P=15\GOSUB 3320\IF P=1 GOTO 4140\O=O+1\GOTO 3440
+4140 PRINT "*ERROR* HE DROPPED THE BALL!! - SAFE AT FIRST!"
+4160 H5=1\GOSUB 3020\GOTO 3440
+4180 REM
+4200 REM     <<<DEFINE POSITIONS AND HOME TEAM PLAYERS>>>
+4220 REM
+4240 DATA "1B","LEFTY O'TOOLE","2B","DEAD EYE HERB"
+4260 DATA "SS","SCOOP JAMES","3B","DIGGER DAN"
+4280 DATA "LF","SCRATCHER SAM","CF","BLIND BERT"
+4300 DATA "RF","SLUGGER MCGHEE","C ","POP UP PETE"
+4320 DATA "P ","WILD WILLIE"
+4340 REM
+4360 REM     <<<END OF PROGRAM>>>
+4380 REM
+4400 END