File CANAM.BA (BASIC source file)

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

10 REM  PROGRAM AUTHOR - MARK MANASSE, HANOVER,N.H. 03755
20 REM  TRANSLATED TO OS8 BASIC BY KAY R. FISHER ...DEC
30 PRINT "CAN-AM...OS8 VERSION."
40 PRINT\PRINT "ARE YOU FAMILIAR WITH THE WAY THIS GAME WORKS";
45 DIM Q$(3,13)\Q$(1)="WILDMAN WILLY"\Q$(2)="HOTSHOT HARRY"
46 DIM E(4),L(4),A$(22)
47 Q$(3)="SLOW-POKE SAM"
50 INPUT A$
60 IF A$="YES" GOTO 700
70 IF A$="NO" GOTO 100
80 PRINT"PLEASE RESPOND 'YES OR NO'"\GOTO 40
100 PRINT"DESCRIPTION -- THE PROGRAM ALLOWS YOU TO RACE AROUND A HIGHLY"
110 PRINT"PERILOUS COURSE, RISKING BOTH LIFE AND MACHINE, IN AN"
120 PRINT"EFFORT TO RACE THE COMPUTER'S VERY OWN"
130 PRINT Q$(1);", ";Q$(2);", AND ";Q$(3);"."
135 PRINT"CAR#1          CAR#2              CAR#3"
140 PRINT\PRINT"INSTRUCTIONS--"
150 PRINT"YOU ARE ABOUT TO RACE ON ONE OF THE FASTEST COURSES"
160 PRINT"IN THE WORLD. A ROAD COURSE. A LONG ONE. 5.3 MILES. SPEEDS"
170 PRINT"UP TO 200 MPH."
180 PRINT\PRINT"WHEN THE COMPUTER TYPES A QUESTION OF THE FORM"
190 PRINT"    STRAIGHT A?     OR      CURVE 1?"
200 PRINT"RESPOND BY TYPING THE SPEED (IN MPH) YOU DESIRE TO TRAVEL AT,"
210 PRINT"AND HIT THE RETURN KEY. GOOD LUCK. YOU MAY NEED IT."
220 PRINT "YOU MAY 'DRAFT' (SLIPSTREAM) OFF OF ANY CAR AHEAD"
230 PRINT "OF YOU.  (BUT NOT MORE THAN 1 SECOND AHEAD). TO DO THIS"
240 PRINT "TYPE HIS CAR # + 1000 AS YOUR SPEED."
700 REM AMOUNT SPEED TO BE SUBTRACTED FROM AUTO PILOT SPEEDS
710 Q(1)=-2.9\Q(2)=-2.9\Q(3)=-5
720 REM NAMES OF TYPES OF ROADWAY
730 M$(1)="STRAIGHT"\M$(2)="HAIRPIN"\M$(3)="CURVE"
740 REM DEATH MESSAGE
750 DIM X$(64)
760 X$="MAY I SHOW YOU A PLOT?  WE HAVE A NICE CHOICE OF HEADSTONES."
890 O$=""
920 PRINT"RATE YOURSELF AS A DRIVER.  (1-BEST,3-WORST)";
930 INPUT O
935 REM MAKE SLOW-POKE SAM EQUAL TO OR WORSE THAN YOU
940 Q(3)=Q(3)*O
1050 RANDOMIZE
1110 F2=INT(RND(0)*10)+7
1130 PRINT"YOUR DRIVING NUMBER IS";F2
1140 A=RND(0)*.05+.05
1150 PRINT "ADHESION FACTOR";A*100-5;".  (THE LOWER THE BETTER)"
1170 PRINT"YOUR MAX. SPEED IS 200 MPH.  TO SEE STANDINGS INPUT"
1180 PRINT"0 AS YOUR SPEED."
1190 PRINT\PRINT"WOULD YOU LIKE TO SEE THE COURSE";
1200 INPUT A$
1240 IF A$="NO" THEN 1450
1250 IF A$="YES" THEN 1260\PRINT"PLEASE ANSWER 'YES OR NO'"\GOTO 1190
1260 PRINT TAB(4);"----------------"
1270 PRINT TAB(3);"/1";TAB(11);"B";TAB(19);"2";CHR$(28)
1280 PRINT TAB(2);"/A";TAB(20);"C";CHR$(28)
1290 PRINT TAB(1);"/";TAB(22);CHR$(28)
1300 PRINT CHR$(28);TAB(21);"3I"
1310 PRINT "^-START*FINISH";TAB(22);"I"
1320 PRINT "^";TAB(22);"I"
1330 PRINT "^";TAB(21);"DI"
1340 PRINT "^";TAB(22);"I"
1350 PRINT "^";TAB(22);"I"
1360 PRINT "^H";TAB(22);"I"
1370 PRINT "^";TAB(22);"I"
1380 PRINT "^";TAB(21);"4I"
1390 PRINT "^";TAB(16);"------/"
1400 PRINT "^8";TAB(15);"(5 E"
1410 PRINT "^";TAB(16);CHR$(28)
1420 PRINT CHR$(28);TAB(17);"---/PITS";CHR$(28);"--)"
1430 PRINT " ";CHR$(28);"7";TAB(14);"G";TAB(21);"F^";TAB(27);"6I"
1440 PRINT "  ";CHR$(28);"------------------------/"
1450 N=RND(0)*3+1
1460 PRINT\PRINT "NOTE!  THIS IS A";INT(N);"LAP RACE"
1470 PRINT\PRINT "GENTLEMEN, START YOUR ENGINES!  THE GREEN GOES DOWN AND"
1480 PRINT "OFF YOU GO!"
1510 Q=0
1520 H=INT(N)
1530 FOR V=1 TO N
1540 A$=M$(1)\R=200\B=1\C=3/10\D=65
1545 GOSUB 2330
1550 A$=M$(3)\R=125\B=1\C=1/10\D=49
1555 GOSUB 2330
1560 A$=M$(1)\R=200\B=2\C=13/20\D=66
1565 GOSUB 2330
1570 A$=M$(3)\R=125\B=1\C=1/10\D=50
1575 GOSUB 2330
1580 A$=M$(1)\R=200\B=1\C=1/5\D=67
1585 GOSUB 2330
1590 A$=M$(3)\R=150\B=1\C=3/20\D=51
1595 GOSUB 2330
1600 A$=M$(1)\R=200\B=2\C=3/5\D=68
1605 GOSUB 2330
1610 A$=M$(3)\R=125\B=1\C=1/10\D=52
1615 GOSUB 2330
1620 A$=M$(1)\R=200\B=1\C=1/4\D=69
1625 GOSUB 2330
1630 A$=M$(2)\R=100\B=.75\C=3/20\D=53
1635 GOSUB 2330
1640 A$=M$(1)\R=200\B=1.5\C=9/20\D=70
1645 GOSUB 2330
1650 A$=M$(2)\R=100\B=.75\C=3/20\D=54
1655 GOSUB 2330
1660 A$=M$(1)\R=200\B=2\C=1\D=71
1665 GOSUB 2330
1670 A$=M$(3)\R=125\B=1\C=1/10\D=55
1675 GOSUB 2330
1680 A$=M$(3)\R=150\B=1\C=3/20\D=56
1685 GOSUB 2330
1690 A$=M$(1)\R=200\B=2\C=7/10\D=72
1695 GOSUB 2330
1700 IF V=H THEN 1740
1710 A$="START FINISH (CURVE 9)"\R=150\B=1\C=3/20\D=127
1715 GOSUB 2330
1740 NEXT V
1745 REM ALL DEAD?
1750 IF G1=1 THEN 2040
1760 PRINT "DO YOU MEAN THAT EVERYONE ISN'T DEAD?  WELL, HERE ARE"
1770 PRINT "THE RESULTS STRAIGHT FROM THE CHECKERED FLAG!"
1780 W=E+37
1820 G5=4
1830 FOR Z=1 TO 4
1840 IF Z=4 GOTO 1860
1850 PRINT Q$(Z);\GOTO 1890
1860 PRINT "YOU";
1890 IF D(Z)=0 THEN 1950
1900 PRINT " IS LOOKIN' AT THEM PEARLY GATES."
1910 GOTO 1990
1940 REM T ARRAY IS TIME ARRAY
1950 PRINT" TOOK";T(Z);"SECONDS. WHICH AVERAGES OUT TO";3600*5.3*H/T(Z);
1951 PRINT"MPH"
1960 IF T(Z)>W THEN 1990
1965 REM NEW LEADING TIME AND DRIVER
1970 W=T(Z)
1980 N=F2*(Z+1)+Z
1990 NEXT Z
2040 PRINT "ANOTHER RACE";
2050 INPUT A$
2080 IF A$="NO" THEN 2290
2090 IF A$<>"YES" THEN 2040
2095 REM RESET FOR NEXT GAME
2100 T(1)=0\T(2)=0\T(3)=0\T(4)=0
2105 P(1)=0\P(2)=0\P(3)=0\P(4)=0\N(1)=0\N(2)=0\N(3)=0
2110 D(1)=0\D(2)=0\D(3)=0\D(4)=0
2130 PRINT "NEW SET-UP. NO RAIN. NO DEBRIS";
2135 REM IF EVERYBODY'S DEAD, BE NASTY.
2140 IF G1=0 THEN 2160
2150 PRINT ", AND (PLEASE!) BETTER DRIVING."
2160 PRINT
2165 REM UNKILL EVERYBODY
2170 G1=0\F5=0
2180 GOTO 710
2290 STOP
2320 REM RACING SUBROUTINE
2325 REM ALL DEAD?
2330 IF G1=1 THEN 4250
2335 REM GET SOME HAZZARDS (IE RAIN, OIL)
2340 GOSUB 2800
2345 REM GET EVERYONE'S SPEED
2350 GOSUB 3220
2355 REM CHECK FOR SAFE SPEEDS
2360 G=4
2370 IF D(4)=1 THEN 2790
2380 IF (B+A+E)*S(4)/B<=R*(1+RND(0)*.1) THEN 2500
2385 REM DEATH MESSAGE
2390 PRINT X$
2392 PRINT "YOU JUST WIPED OUT!!!!"
2395 REM INCREMENT OIL COUNTER
2400 F5=F5+1
2410 E(F5)=D
2455 REM OFFICIALLY PRONOUNCE DEAD. D IS FOR DEATH.
2460 D(G)=1
2465 REM INCREMENT DEAD COUNTER
2470 Q=Q+1
2475 REM EVERYBODY DEAD?
2480 IF Q=4 THEN 4230
2495 REM RATS. HE DIDN'T WIPE OUT.
2500 Y4=T(G)
2505 GOTO 2526
2510 IF (B+A(G)+E)*S(G)/B<=R THEN 2530
2515 REM ALMOST WIPED OUT
2520 PRINT "YOU NEARLY HAD TO SAY GOOD BYE."
2525 REM UPDATE HIS TIME
2526 REM
2527 REM
2530 T(G)=T(G)+C/(S(G)/3600)
2535 REM SEE IF, HEAVEN FORBID, HE PASSED SOMEBODY
2550 FOR X4= 1 TO 3
2560 IF D(X4)=1 THEN 2650
2570 Z4=T(X4)-(C/(S(X4)/3600))
2580 Z1=Y4-Z4
2590 Z2=T(G)-T(X4)
2600 IF SGN(Z2)<>-SGN(Z1) THEN 2650
2610 IF SGN(Z2)=1 THEN 2631
2611 IF P(X4)=1 GOTO 2650\P(X4)=1
2620 PRINT "YOU JUST PASSED ";Q$(X4)
2630 GOTO 2650
2631 IF N(X4)=1 GOTO 2650\N(X4)=1
2640 PRINT Q$(X4);" JUST PASSED YOU"
2650 NEXT X4
2760 REM PROCEED TO THE FATE OF THE NEXT VICTIM
2790 GOTO 4250
2800 REM HAZARD SUBROUTINE
2810 REM MAKE SURE WE DON'T USE LAST SECTION'S OIL ON THIS SECTION
2820 E=0
2825 REM KILL PITSTOPS FROM LAST TIME
2830 L(1)=0\L(2)=0\L(3)=0\L(4)=0
2845 REM IF COURSE WELL GREASED, DISSOLVE GREASE
2850 IF F5<2 THEN 2900
2860 PRINT "THE RED FLAG HAS BEEN PUT OUT. CARS REMAIN"
2870 PRINT "MOTIONLESS UNTIL DEBRIS IS CLEARED"
2880 E(1)=0\E(2)=0\E(3)=0\E(4)=0
2890 F5=0
2895 REM SEE IF THOSE PLAYING DESERVE OIL
2900 FOR X=1 TO 4
2910 IF E(X)=D THEN 2940
2920 NEXT X
2930 GOTO 2970
2935 REM IF SO, NOTIFY SURVIVORS AND OTHERS
2940 PRINT "YIKES! OIL ON THE TRACKS!"
2950 E=.2
2960 GOTO 3130
2965 REM HAVE WE HAD RAIN?
2970 IF F3=1 THEN 3130
2975 REM SEE IF IT SHOULD BE STOPPED OR STARTED
2980 IF RND(0)>.025+G8 THEN 3130
2985 REM IS IT RAINING?
2990 IF A(O)<.1 THEN 3080
2995 REM STOP IT?
3000 IF RND(0)>.5 THEN 3130
3010 PRINT "GLORY BE, THE RAIN HAS STOPPED!"
3011 PRINT "BUT REMEMBER IT IS STILL WET"
3015 REM RAIN,RAIN, GO AWAY, WON'T COME BACK ANOTHER DAY
3020 F3=1
3030 FOR X=1 TO 4
3035 REM DELETE MOST OF THE EFFECTS
3040 A(X)=A(X)-.075
3045 REM MAKE IT LESS LIKELY TO RAIN IN LATER RACES
3050 G8=.025
3060 NEXT X
3070 GOTO 3130
3075 REM HALLELUJAH, MY RAIN DANCE WORKED
3080 PRINT "RAIN! SLOW DOWN!!"
3085 REM MAKE TRACK SLIPPERY
3090 FOR X=1 TO 4
3100 A(X)=A(X)+.1
3110 G8=.1
3120 NEXT X
3125 REM PIT STOPS?
3130 IF C<>9/20 THEN 3210
3140 IF RND(0)<.125 THEN 3210
3150 FOR X=1 TO 3
3170 IF D(X)=1 THEN 3200
3180 L(X)=RND(0)*3+5
3190 PRINT Q$(X);" WAS IN THE PITS FOR";L(X);"SECONDS."
3200 NEXT X
3201 IF D(4)=1 GOTO 3203
3202 L(4)=RND(0)*3+5\PRINT"YOU WERE IN THE PITS FOR";L(4);"SECONDS."
3203 FOR I=1 TO 4\T(I)=T(I)+L(I)\NEXT I
3205 REM WE WUZ HERE (AND LEFT!)
3210 RETURN
3220 REM INPUT
3225 REM RESET SPEED ARRAY
3230 S(1)=0\S(2)=0\S(3)=0\S(4)=0
3235 REM PRINT OUT SOMETHING LIKE 'STRAIGHT A'
3240 REM IF HES DEAD, DON'T GIVE HIM A CHANCE TO INPUT
3245 IF D(4)=1 GOTO 3770
3250 PRINT A$;" ";CHR$(D);
3270 REM GET EVERYBODY'S SPEEDS
3340INPUT J
3480 S=J
3482 R5=0
3485 REM DID HE TRY TO EXCEED HIS MAX. SPEED?
3490 IF S<=200 THEN 3620
3510 IF S<1000 THEN 3600
3515 REM IT'S OK. HE ONLY WANTS TO DRAFT
3520 R4=(S-1000)
3525 REM NOW SEE IF HE PICKED A LEGAL CAR
3530 IF R4=INT(R4) THEN 3560
3535 REM HE DIDN'T
3540 PRINT "ILLEGAL CAR"
3550 PRINT "HOW FAST"\GOTO 3340
3560 IF R4>3 GOTO 3540
3565 REM TRYING TO DRAFT A DEAD MAN?
3570 IF D(R4)>0 THEN 3540
3575 REM DRAFTED CAR IS IN 1 SECOND?
3580 IF ABS(T(4)-T(R4)-.5)=>.5 THEN 3540
3585 REM OK LEGAL DRAFT
3586 R5=1
3590 GOTO 3700
3595 REM OPTIMIST
3600 PRINT "MAYBE A LITTLE HARD ON THE PEDDLE? BE REALISTIC."
3610 GOTO 3550
3620 IF S>0 THEN 3660
3625 REM HE WANTS TO SEE HOW HE'S DOING.  POOR GUY
3630 GOSUB 3990
3640 GOTO 3550
3655 REM WHERE DOES HE THINK HE IS? THE LONG ISLAND EXPRESSWAY?
3660 IF S=>20 THEN 3690
3670 PRINT "I DOUBT YOU WANT TO GO THAT SLOWLY"
3680 GOTO 3640 
3685 REM SINCE HE MADE IT THIS FAR, ASSUME THAT IT'S LEGAL
3690 S(4)=S
3700 U=U+1
3710 IF R4=0 THEN 3770
3715 REM IF HE'S DRAFTING, TELL ME TO WHOM
3720 H(4)=R4
3730 R4=0
3755 REM SET SPEEDS FOR AUTO-PILOTS
3770 FOR F0=1 TO 3
3780 IF D(F0)=1 THEN 3870
3790 S=R*B/(B+.1+E+G8)+(RND(0)*3+Q(F0))
3800 IF (B+.1+G8+E)*S/B<=R THEN 3850
3810 D(F0)=1
3820 PRINT Q$(F0);" JUST WIPED"
3825 REM LET COMPUTER KNOW HE'S WIPED
3830 F5=F5+1
3840 E(F5)=D
3850 T(F0)=T(F0)+C/(S/3600)
3860 S(F0)=S
3870 NEXT F0
3875 REM NOW HANDLE DRAFTERS
3880 IF R5=0 GOTO 3980
3900 IF D(H(4))=1 GOTO 3980
3945 REM SET HIS SPEED TO HIS DRAFTEES
3950 S(4)=S(H(4))
3955 REM HALVE THE DISTANCE BETWEEN THEM
3960 T(4)=(T(4)+T(H(4)))/2
3980 RETURN
3990 REM PLACING
4050 FOR I=1 TO 3
4080 PRINT Q$(I);" IS";
4110 IF D(I)<>1 THEN 4140
4120 PRINT " OUT OF THE RACE."\GOTO 4200
4140 IF T(I)+2<T(4) GOTO 4190
4145 IF T(4)+2=>T(I) GOTO 4170
4150 PRINT T(I)-T(4);"SECONDS BEHIND YOU."
4160 GOTO 4200
4170 PRINT " RIGHT BESIDE YOU "
4180 GOTO 4200
4190 PRINT T(4)-T(I);"SECONDS AHEAD OF YOU."
4200 NEXT I
4210 PRINT\PRINT "YOU'VE TAKEN";T(4);"SECONDS."
4220 RETURN
4230 P=G+1\IF P=<3 GOTO 4235\P=0
4235 PRINT Q$(P);" THE LAST OF THE GREAT RACERS, JUST WIPED OUT."
4240 G1=1
4250 RETURN
4260 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