Trailing-Edge
-
PDP-10 Archives
-
decuslib10-01
-
43,50110/ftball.gam
There are 2 other files named ftball.gam in the archive. Click here to see a list.
100' NAME--FTBALL
110'
120' DESCRIPTIONS--GENERATES A DIGITAL CHAMPIONSHIP FOOTBALL GAME
130' WITH THE USER AS THE QUARTERBACK.
140'
150' SOURCE--JOHN G. KEMENY
160'
170' INSTRUCTIONS--TYPE "RUN" AND FOLLOW INSTRUCTIONS.
180'
190'
200' * * * * * * * MAIN PROGRAM * * * * * * * * * * *
210'
220 PRINT "THIS IS DIGITAL CHAMPIONSHIP FOOTBALL."
230 PRINT "YOU WILL QUARTERBACK DIGITAL. CALL PLAYS AS FOLLOWS:"
240 PRINT "1 = SIMPLE RUN; 2 = TRICKY RUN; 3 = SHORT PASS;"
250 PRINT "4 = LONG PASS; 5 = PUNT; 6 = QUICK KICK; 7 = PLACE KICK."
260 PRINT
270 PRINT "CHOOSE YOUR OPPONENT";
280 INPUT O$(1)
290 LET O$(0) = "DIGITAL"
300 PRINT
310 LET S(0) = S(1) = 0
320 RANDOMIZE
330 DIM L$(20)
340 MAT READ L$
350 DATA KICK,RECEIVE, YARDS , RUN BACK FOR , BALL ON
360 DATA YARD LINE, SIMPLE RUN, TRICKY RUN, SHORT PASS, LONG PASS
370 DATA PUNT, QUICK KICK, PLACE KICK, LOSS OF , NO GAIN
380 DATA GAIN OF , TOUCHDOWN , TOUCHBACK , SAFETY***,JUNK
390 LET P = INT(RND*2)
400 PRINT O$(P);" WON THE TOSS"
410 DEF FNF=1-2*P
420 DEF FNG = P*(X1-X) + (1-P)*(X-X1)
430 IF P = 0 THEN 470
440 PRINT O$(1); " ELECTS TO RECEIVE"
450 PRINT
460 GOTO 570
470 PRINT "DO YOU ELECT TO KICK OR RECEIVE";
480 INPUT A$
490 PRINT
500 FOR E = 1 TO 2
510 IF A$ = L$(E) THEN 550
520 NEXT E
530 PRINT "INCORRECT ANSWER. PLEASE TYPE 'KICK' OR 'RECEIVE'";
540 GOTO 480
550 IF E = 2 THEN 570
560 LET P = 1
570 REM KICKOFF
580 LET X = 40 + (1-P)*20
590 LET Y = INT(200*(RND-.5)^3+55)
600 PRINT "KICKOFF GOOD FOR ";Y;L$(3)
610 LET X = X-FNF*Y
620 IF ABS(X-50)>=50 THEN 690
630 LET Y = INT(50*RND^2) + (1-P)*INT(50*RND^4)
640 PRINT L$(4);
650 LET X = X+FNF*Y
660 IF ABS(X-50)>=50 THEN 2600
670 PRINT Y;L$(3)
680 GOTO 720
690 REM TOUCHBACK
700 PRINT "TOUCHBACK FOR " O$(P)
710 LET X = 20 + P*60
720 REM FIRST DOWN
730 GOSUB 800
740 LET X1 = X
750 LET D = 1
760 PRINT "FIRST DOWN ";O$(P);"***"
770 PRINT
780 PRINT
790 GOTO 860
800 REM PRINT POSITION
810 IF X > 50 THEN 840
820 PRINT L$(5);O$(0);X;L$(6)
830 GOTO 850
840 PRINT L$(5);O$(1);100-X;L$(6)
850 RETURN
860 REM NEW PLAY
870 LET T = T+1
880 IF T = 30 THEN 1060
890 IF T < 50 THEN 940
900 IF RND > .2 THEN 940
910 PRINT "END OF GAME ***"
920 PRINT "FINAL SCORE: ";O$(0);S(0);" ";O$(1);S(1)
930 STOP
940 IF P = 1 THEN 1870
950 PRINT "NEXT PLAY";
960 INPUT Z
970 IF Z<>INT(Z) THEN 990
980 IF ABS(Z-4)<=3 THEN 1010
990 PRINT "ILLEGAL PLAY NUMBER, RETYPE.";
1000 GOTO 960
1010 LET F = 0
1020 PRINT L$(Z+6);". ";
1030 LET R = RND*(.98+FNF*.02)
1040 LET R1 = RND
1050 ON Z GOTO 1110,1150,1260,1480,1570,1570,1680
1060 REM JEAN'S SPECIAL
1070 IF RND > 1/3 THEN 940
1080 PRINT "GAME DELAYED. DOG ON FIELD."
1090 PRINT
1100 GOTO 940
1110 REM SIMPLE RUN.
1120 LET Y = INT(24*(R-.5)^3+3)
1130 IF RND < .05 THEN 1180
1140 GOTO 2190
1150 REM TRICKY RUN.
1160 LET Y = INT(20*R-5)
1170 IF RND > .1 THEN 2190
1180 LET F = -1
1190 LET X3 = X
1200 LET X = X + FNF*Y
1210 IF ABS(X-50) >= 50 THEN 1240
1220 PRINT "*** FUMBLE AFTER ";
1230 GOTO 2230
1240 PRINT "*** FUMBLE."
1250 GOTO 2450
1260 REM SHORT PASS.
1270 LET Y = INT(60*(R1-.5)^3+10)
1280 IF R < .05 THEN 1330
1290 IF R < .15 THEN 1390
1300 IF R < .55 THEN 1420
1310 PRINT "COMPLETE. ";
1320 GOTO 2190
1330 IF D=4 THEN 1420
1340 PRINT "INTERCEPTED."
1350 LET F = -1
1360 LET X = X+FNF*Y
1370 IF ABS(X-50)>=50 THEN 2450
1380 GOTO 2300
1390 PRINT "PASSER TACKLED. ";
1400 LET Y = -INT(10*R1)
1410 GOTO 2190
1420 LET Y=0
1430 IF RND<.3 THEN 1460
1440 PRINT "INCOMPLETE. ";
1450 GOTO 2190
1460 PRINT "BATTED DOWN. ";
1470 GOTO 2190
1480 REM LONG PASS.
1490 LET Y = INT(160*(R1-.5)^3+30)
1500 IF R < .1 THEN 1330
1510 IF R<.3 THEN 1540
1520 IF R < .75 THEN 1420
1530 GOTO 1310
1540 PRINT "PASSER TACKLED. ";
1550 LET Y = -INT(15*R1+3)
1560 GOTO 2190
1570 REM PUNT OR QUICK KICK.
1580 LET Y = INT(100*(R-.5)^3+35)
1590 IF D = 4 THEN 1610
1600 LET Y = INT(Y*1.3)
1610 PRINT "PUNT GOOD FOR "; Y; L$(3)
1620 IF ABS(X+Y*FNF-50)>=50 THEN 1670
1630 IF D < 4 THEN 1670
1640 LET Y1 = INT(R1^2*20)
1650 PRINT "RUN BACK FOR "; Y1; L$(3)
1660 LET Y = Y-Y1
1670 GOTO 1350
1680 REM PLACE KICK.
1690 LET Y = INT(100*(R-.5)^3+35)
1700 IF R1 > .15 THEN 1750
1710 PRINT "KICK IS BLOCKED***"
1720 LET X = X-5*FNF
1730 LET P = 1-P
1740 GOTO 720
1750 LET X = X+FNF*Y
1760 IF ABS(X-50)>=60 THEN 1810
1770 PRINT "KICK IS SHORT."
1780 IF ABS(X-50)>=50 THEN 2710
1790 LET P = 1-P
1800 GOTO 630
1810 IF R1 > .5 THEN 1840
1820 PRINT "KICK IS OFF TO THE SIDE."
1830 GOTO 2710
1840 PRINT "FIELD GOAL***"
1850 LET S(P) = S(P)+3
1860 GOTO 2640
1870 REM OPPONENT'S PLAY
1880 IF D > 1 THEN 1940
1890 IF RND > 1/3 THEN 1920
1900 LET Z = 3
1910 GOTO 1010
1920 LET Z = 1
1930 GOTO 1010
1940 IF D = 4 THEN 2090
1950 IF 10+X-X1 < 5 THEN 1890
1960 IF X<5 THEN 1890
1970 IF X<=10 THEN 2160
1980 IF X > X1 THEN 2020
1990 LET A = INT(2*RND)
2000 LET Z = 2+A*2
2010 GOTO 1010
2020 IF D < 3 THEN 1990
2030 IF X < 45 THEN 1990
2040 IF RND > 1/4 THEN 2070
2050 LET Z = 6
2060 GOTO 1010
2070 LET Z = 4
2080 GOTO 1010
2090 IF X > 30 THEN 2140
2100 IF 10+X-X1 < 3 THEN 1890
2110 IF X<3 THEN 1890
2120 LET Z = 7
2130 GOTO 1010
2140 LET Z = 5
2150 GOTO 1010
2160 LET A = INT(2*RND)
2170 LET Z = 2+A
2180 GOTO 1010
2190 REM GAIN OR LOSS
2200 LET X3 = X
2210 LET X = X + FNF*Y
2220 IF ABS(X-50)>=50 THEN 2450
2230 PRINT L$(15+SGN(Y));
2240 IF Y = 0 THEN 2270
2250 PRINT ABS(Y);L$(3)
2260 GOTO 2280
2270 PRINT
2280 IF ABS(X3-50)>40 THEN 2300
2290 IF RND<.1 THEN 2860
2300 GOSUB 800
2310 IF F=0 THEN 2340
2320 LET P = 1-P
2330 GOTO 740
2340 IF FNG >= 10 THEN 740
2350 IF D = 4 THEN 2320
2360 LET D = D+1
2370 PRINT "DOWN ";D;"AND ";
2380 IF (X1-50)*FNF < 40 THEN 2410
2390 PRINT "GOAL TO GO"
2400 GOTO 2420
2410 PRINT 10-FNG;"YARDS TO GO"
2420 PRINT
2430 PRINT
2440 GOTO 860
2450 REM BALL IN END-ZONE
2460 IF X >= 100 THEN 2490
2470 LET E = 0
2480 GOTO 2500
2490 LET E = 1
2500 ON 1+E-F*2+P*4 GOTO 2510,2590,2760,2710,2590,2510,2710,2760
2510 REM SAFETY
2520 LET S(1-P) = S(1-P)+2
2530 PRINT L$(19)
2540 GOSUB 2800
2550 PRINT O$(P); " KICKS OFF FROM ITS 20 YARD LINE."
2560 LET X = 20 + P*60
2570 LET P = 1-P
2580 GOTO 590
2590 REM OFFENSIVE TD
2600 PRINT L$(17);"***"
2610 IF RND > .8 THEN 2680
2620 LET S(P) = S(P)+7
2630 PRINT "KICK IS GOOD"
2640 GOSUB 2800
2650 PRINT O$(P);" KICKS OFF"
2660 LET P = 1-P
2670 GOTO 570
2680 PRINT "KICK IS OFF TO THE SIDE"
2690 LET S(P) = S(P)+6
2700 GOTO 2640
2710 REM TOUCHBACK
2720 PRINT L$(18)
2730 LET P = 1-P
2740 LET X = 20 + P*60
2750 GOTO 720
2760 REM DEFENSIVE TD
2770 PRINT L$(17);"FOR ";O$(1-P);"***"
2780 LET P = 1-P
2790 GOTO 2600
2800 REM SCORE
2810 PRINT
2820 PRINT "SCORE: ";S(0);" TO ";S(1)
2830 PRINT
2840 PRINT
2850 RETURN
2860 REM PENALTY
2870 LET P3 = INT(2*RND)
2880 PRINT O$(P3);" OFFSIDES -- PENALTY OF 5 YARDS."
2890 PRINT
2900 PRINT
2910 IF P3 = 0 THEN 2980
2920 PRINT "DO YOU ACCEPT THE PENALTY";
2930 INPUT A$
2940 IF A$="NO"THEN 2300
2950 IF A$="YES" THEN 3110
2960 PRINT "TYPE 'YES' OR 'NO'";
2970 GOTO 2930
2980 REM OPPONENT'S STRATEGY ON PENALTY
2990 IF P = 1 THEN 3040
3000 IF Y <= 0 THEN 3080
3010 IF F < 0 THEN 3080
3020 IF FNG < 3*D-2 THEN 3080
3030 GOTO 3100
3040 IF Y <= 5 THEN 3100
3050 IF F < 0 THEN 3100
3060 IF D < 4 THEN 3080
3070 IF FNG < 10 THEN 3100
3080 PRINT "PENALTY REFUSED."
3090 GOTO 2300
3100 PRINT "PENALTY ACCEPTED."
3110 LET F = 0
3120 LET D = D-1
3130 IF P<>P3 THEN 3160
3140 LET X = X3-FNF*5
3150 GOTO 2300
3160 LET X = X3+FNF*5
3170 GOTO 2300
3180 END