GRANPRX  1 REM **** HP BASIC PROGRAM LIBRARY *******.******************  2 REM  3 REM GRNPRX: GRAN PRIx RACING GAME  4 REM  5 REM 3668> REV A 10/73  6 REM  7 REM **** CONTRIBUTED PROGrAM ******************************* 1000 REM PROGRAM GRAN PRIX RACE 1002 REM 1004 REM PACIFIC UNION COLLEGE, JUN 73 1006 REM 1008 REM L. TURNER, D. MARTZ, & L. MEADOWS 1010 REM 1012 REM **********************************************************& 1015 REM 1020 DIM P[9],F[4],G[4],H[82],A$[6] 1030 REM 1040 MAT READ P 1050 FOR I=1 TO 4 1060 READ G[I],F[I] 1080 LET G[I]=G[I]/2.04545 1090 LET F[I]=(F[I]+.6)/2.04545 1100 NEXT I 1110 MAT READ H 1115 REM 1120 DEF FNA(X)=INT(X*2.04545+.05) 1130 DEF FNT(T)=INT(T*10+.5)/10 1135 DEF FNP(T)=INT(H[INT(T*R)+1 MIN 82]+FNQ(T)*FNR(T)+.5) 1136 DEF FNQ(T)=H[INT(T*R)+2 MIN 82]-H[INT(T*R)+1 MIN 82] 1137 DEF FNR(T)=T*R-INT(T*R) 1140 REM 1150 LET D=2 1200 PRINT  1210 PRINT "WELCOME TO THE PUC GRAN PRIX" 1220 PRINT  1250 REM 1260 PRINT "DO YOU WISH A COURSE DESCRIPTION"; 1270 INPUT A$ 1280 IF A$[1,1]<>"Y" THEN 1910 1290 REM 1300 PRINT  1320 PRINT TAB(23);"2";TAB(66);"1" 1330 PRINT TAB(21);"CC0XXXXXXXXXXXXXXXXXXxXXXXXXXXXXXXXXXXXXXXXXX0CC" 1340 PRINT TAB(12);"85-100 CC (800)";TAB(69);"C" 1350 PRINT TAB(18);"C";TAB(70);"C" 1360 PRINT TAB(15);"3 0";TAB(29);"PUC GRAN PRIX RACE";TAB(70);"C" 1370 PRINT TAB(16);"X";TAB(69);"C" 1375 PRINT TAB(15);"X";TAB(67);"CC" 1380 PRINT TAB(14);"X";TAB(38);"SS";TAB(59);"(2800) C 50-" 1390 PRINT TAB(13);"X";TAB(22);"SSSSSSS SSS SSS0XxXXXXXXXXXXXXXX"; 1395 PRINT "XXXX0C 70" 1400 PRINT TAB(12);"X SS SSSSSSS 7";TAB(64);"8" 1410 PRINT TAB(11);"X (1900)0 6 90-110" 1420 PRINT TAB(10);"X X" 1430 PRINT TAB(9);"X X";tAB(28);"DISTANCES IN YARDS, EG. "; 1435 PRINT "(800) = 800 YDS>" 1440 PRINT TAB(8);"X X";TAB(28);"SPEEDS IN MPH, EG. 85 TO 100 MPH" 1450 PRINT " X X" 1460 PRINT " X X" 1470 PRINT " X X" 1480 PRINT " X X" 1490 PRINT " 4 0(1500) X" 1500 PRINT " H X" 1510 PRINT " H X" 1520 PRINT "20-H 0 5" 1530 PRINT " 35 H H" 1535 PRINT " HH" 1540 PRINT  1550 PRINT  1560 PRINT "1 TO 2 IS A STRAIGHTAWAY 800 YARDS LONG" 15?0 PRINT "2 TO 3 IS A CURVE 200 YARDS LONG" 1580 PRINT " THE BREAKAWAY SPEED RANGE IS 85 TO 100 MPH" 1590 PRINT "3 TO 4 IS A STRAIGHTAWAY 500 YARDS LONG" 1600 PRINT " IT ENDS AT POSITION 1500 YARDS FROM STARTING GRID" 1610 PRINT "4 TO 5 IS A HAIRPIN CURVE 100 YARDS LONG" 1620 PRINT " THE BREAKAWAY SPEED RANGE IS 20 TO 35 MPH" 1630 PRINT "5 TO 6 IS ANOTHER STRAIGHTAWAY 300 YARDS LONG" 1640 PRINT " IT ENDS AT POSITION 1900 YARDS FROM THE GRID" 1650 PRINT "6 TO 7 IS A SET OF 'S' CURVES 500 yARDS LONG" 1660 PRINT " THE SPEED RANGE IS 90-110 MPH" 1670 PRINT "7 TO 8 IS THE FINAL STRAIGHTAWAY OF 400 YARDS" 1680 PRINT " IT ENTERS THE LAST CURVE AT 2800 YARDS" 1690 PRINT "8 TO 0 IS THE FINAL CURVE OF 400 YARDS" 1700 PRINT " THE BREAKAWAY SPEED RANGE IS 50 TO 70 MPH" 1710 PRINT  1720 PRINT "THE TOTAL LENGTH OF ONE LAP IS 3200 yARDS" 1730 PRINT  1820 PRINT "DURING THE STRAIGHTAWAYS YOU WILL BE ABLE TO CONTROL THE" 1830 PRINT &  "ACCELERATION AND BRAKING OF THE CAR. THE CURVES WILL BE TAKEN" 1840 PRINT "AT WHATEVER SPEED YOU ENTER THEM." 1842 PRINT "BELOW THE BREAKAWAY SPEED, THE CURVES MAY BE TAKEN WITH "; 1844 PRINT "NO DIFFICULTY." 1850 PRINT "ABOvE THE FASTEST SPEED INDICATED< YOU WILL CRASH!" 1860 PRINT &  "WITHIN THE SPEED RANGE, THERE IS THE POSSIBILITY THAT YOU WILL" 1870 PRINT "LOSE TIME OR SPEED BY SWINGING WIDE OR BY SPINNING OUT." 1880 PRINT "THE FASTER YOU TAKE THE CURVES, THE GREATER THE RISKS--" 1890 PRINT "AND THE LESS THE TIME!!!!" 1905 PRINT  1906 PRINT  1907 PRINT "YOUR TASK IS TO TRANSVERSE THE TRACK IN A MINIMUM TIME"; 1908 PRINT " WITHOUT CRASHING!!" 1909 PRINT  1910 PRINT "YOUR CAR MAY BE ONE OF THE FOLLOWING:" 1911 PRINT " 1. 1975 APHID GREEN HONDA CIVIC" 1912 PRINT " 2. 65 BEANERS ARE MEANER CHEVY LOWRIDER" 1913 PRINT " 3. NASH RAMBLER" 1914 PRINT " 4. MINI COOPER" 1915 PRINT "WHICH CAR WOULD YOU LIKE"; 1916 INPUT Z 1917 GOTO Z OF 1920,1923,1926,1929 1918 PRINT "WE DON'T HAVE THAT CAR IN STOCK, PLEASE CHOOSE AGAIN>"; 1919 GOTO 1916 1920 LET M=15 1921 LET B=-20 1922 GOTO 1931 1923 M=10 1924 B=-25 1925 GOTO 1931 1926 M=12 1927 B=-22 1928 GOTO 1931 1929 M=8 1930 B=-30 1931 PRINT "YOUR CAR HAS A MAXIMUM ACCELERATION OF ";M;"MPH/SEC." 1932 PRINT "AND A MAXIMUM BRAKING OF ";B;"MPH/SEC." 1933 PRINT "YOU WILL RACE AGAINST ONE OF THE FOLLOWING" 1934 PRINT "1. U.S. POSTAL DELIVERY TRUCK" 1935 PRINT "2. 1929 ESSEX" 1936 PRINT "3. 1974 VOLKSWAGEN" 1937 PRINT " 4. SF MUNI-TRANSIT ELECTRIC BuS ,MUGGERS INCLUDED" 1938 PRINT " 5. 19>2 THREE WHEELED EGGO MOBILE" 1939 PRINT " 6. TOM SLICK'S THUNDER-BOLT GREASE SLAPPER" 1940 PRIN\ "CHOOSE ONE OPPONENT BY ENTERING NUMBER"; 1941 INPUT R1 1942 IF R1=1 OR R1=2 OR R1=3 OR R1=4 OR R1=5 THEN 1946 1943 IF R1=6 THEN 1948 1944 PRINT "WHICH CAR DID YOU SAY"; 1945 GOTO 1941 1946 LET R=2*R1-5 1947 GOTO 1949 1948 LET R=2.5E8 1949 LET R=(90+2*R)/100+7*RND(0)/100 1950 PRINT  3000 REM 3002 REM BEGIN THE RACE!! 3004 REM 3010 LET J=1 3020 PRINT "ELAPSED TIME","SPEED","POSITION","OPPONENT'S","ACCELERATION" 3030 PRINT " SECONDS"," MPH"," YARDS"," POSITION"," MPH/SEC" 3040 PRINT  3070 LET X=S=T=T9=X9=0 3080 REM 3100 IF J<9 THEN 3200 3130 PRINT  3160 PRINT "COMPLETED LAP";",ELAPSED TIME";FN\(T);"SEC." 3166 PRINT "YOUR OPPONENT FINISHED IN ";80/R;"SECONDS" 3167 LET K1=FNT(T)-80/R 3168 IF K1>0 THEN 3171 3169 PRINT "CONGRATULATIONS, YOU WON BY ";-K1;"SECONDS" 3170 GOTO 8600 3171 PRINT "SORRY, YOU LOST BY ";K1;"SECONDS" 3172 GOTO 8600 3200 IF FNP(T)>3200 THEN 3203 3201 PRINT " ";FNT(T)," ";FNA(S)," ";INT(X)," ";FNP(T)," "; 3202 GOTO 3210 3203 PRINT " ";FNT(T)," ";FNA(S)," ";INT(X)," FINISH"," "; 3210 INPUT A1 3220 LET A=A1/2.04545 3230 IF A1>=0 THEN 3600 3240 IF A1>=B THEN 3300 3250 PRINT "MAXIMUM BRAKING IS ";B;"MPH/SEC" 3260 GOTO 3200 3300 LET T1=-S/A 3310 IF T1>D THEN 3500 3320 LET X1=X+S*T1+A/2*T1*T1 3330 IF X1>P[J+1] THEN 3400 3340 PRINT "YOU STOPPED";INT(P[J+1}-X1);"YARDS FROM POINT";J+1 3350 LET S=0 3360 LET X=X1 3370 LET T=T+T1 3380 GOTO 3100 3400 LET Y=P[J+1]-X 3402 IF A<>0 THEN 3410 3404 LET T=T+Y/S 3406 GOTO 3440 3410 LET S1=SQR(S*S+2*A*Y) 3420 LET T=T-(S-S1)/A 3430 LET S=S1 3440 LET J=J+1 3450 GOTO 8000 3500 LET X1=X+S*D+A/2*D*D 3510 IF X1>P[J+1] THEN 3400 3520 LET T=T+D 3530 LET S=S+A*D 3540 LET X=X1 3550 GOTO 3100 3600 IF A1<=M THEN 3700 3610 PRINT "MAXIMUM ACCELERATION IS ";M;"MPH/SEC" 3620 GOTO 3200 3700 LET X1=X+S*D+A/2*D*D 3710 IF X1>P[J+1] THEN 3400 3720 GOTO 3500 8000 REM *** SUB CURVE *** 8010 REM 8020 LET I=INT(J/2) 8030 LET T1=8P[J+1]-P[J])/S 8040 LET S1=G[I]+(F[I]-G[I])*RND(X9) 8050 IF S>S1 THEN 8100 8055 PRINT "CURVE";J;-J-1;", SPEED";FNA(S);"MPH" 8060 LET J=J+1 8070 LET X=P[J] 8080 LET T=T+T1 8090 GOtO 3100 8100 IF S>S1+(F[I]-S1)/2 THEN 8200 8110 LET T2=T1*RND(X9)*.4 8120 PRINT "SPEED IN CURVE";FNA(S);"MPH, TOOK CURVE WIDE, LOST";FNT(T2)&  ;"SEC" 8130 LET T1=T1+T2 8140 GOTO 8060 8200 IF S>F[I] THEN 8300 8210 LET S2=S-S*RND(X9)*.9 8220 LET T1=T1*S/S2 8230 PRINT "SPUN OUT AT";FNA(S);"MPH, LOST SPEED AND TIME" 8240 LET S=S2 8250 GOTO 8060 8300 PRINT "LOST CONTROL AT";FNA(S);"MPH. YOUR CAR CRASHED!!" 8305 PRINT "YOUR OPPONENT FINISHED IN ";82/R;"SECONDS!" 8330 REM 8600 PRINT  8605 PRINT "DO YOU WISH TO TRY AGAIN"; 8610 INPUT A$ 8620 IF A$[1,1]="Y" THEN 1910 9000 REM 9010 DATA 0,800,1000,1500,1600,1900,2400,2800,3200 9020 DATA 85,100 9030 DATA 20,35 9040 DATA 90,110 9050 DA\A 50,70 9060 REM 9070 DATA 0,1,3,9,21,39,62,87,120,156,196,244,293,351,410 9080 DATA 479,550,625,700<758,800,847,894,942,990,1030,1080 9090 DATA 1135,1200,1260,1330,1382,1425,1470,1490,1505,1519 9100 DATA 1539,1548,1563,1578,1592,1610,1632,1658,1683,1718 9110 DATA 1758,1800,1850,1890,1943,1997,2050,2104,2157,2210 9120 DATA 2294,2317,2370,2420,2480,2535,2600,2670,2725,2768,2799,2830 9130 DATA 2861,2892,2920,2951,2982,3013,3044,3075,3106,3137,3168,3199 9140 DATA 10000 9999 END >