Grand Prix


Grand Prix offers you a race-track, a worthy opponent (in the shape of your micro's car), and as much speed as you can handle. Unlike the computer, you have a choice of gears (first or second), and it's up to you to select the type of course you want to compete on. If you crash you not only lose points, but you are replaced on the track in a random position, so you'll have to sort yourself out pretty snappily if you want to get back into the running.

    1 REM *** BBC VERSION ***
    2 REM ***  GRAND PRIX ***
   10 MODE 7:VDU 23;8202;0;0;0;
   20 *FX11,0
   30 VDU 23,224,0,110,132,252,252,132,110,0
   40 VDU 23,225,40,108,240,58,223,76,24,8
   50 VDU 23,226,60,90,90,24,90,126,90,0
   60 VDU 23,227,20,54,15,92,251,50,24,16
   70 VDU 23,228,0,118,33,63,63,33,118,0
   80 VDU 23,229,16,24,50,251,92,15,54,20
   90 VDU 23,230,0,90,126,90,24,90,90,60
  100 VDU 23,231,8,24,76,223,58,240,108,40
  110 VDU 23,232,60,66,189,165,165,189,66,60
  120  DIM b$(2),i(2),i$(2):FOR f=0 TO 2:b$(f
)="DEMON DRIVER":i(f)=0:NEXT 
  130 GOSUB 570
  140 CLS
  150 INPUT "Enter skill (1-good to 4-bad) ";
sk:IF sk<1 OR sk>4 THEN GOTO 140
  160 INPUT "How many laps? ";laps:IF laps<1 
THEN GOTO 160
  170 INPUT "1-Hard to 2-Easy circuit? ";ci:I
F ci<>1 AND ci<>2 THEN GOTO 170
  180 MODE 1:VDU23;8202;0;0;0;19,1,7,0,0,0,19
,2,7,0,0,0,19,0,4,0,0,0,19,3,4,0,0,0:COLOUR 1
  190 GOSUB 650
  200 TIME=0:PRINT TAB(17,2)"READY":SOUND 1,-
15,100,4:REPEAT UNTIL TIME=100:PRINT TAB(17,2
)"STEADY ":SOUND 1,-15,100,4:REPEAT UNTIL TIM
E=200:PRINT TAB(17,2)"GO     ":SOUND 1,-15,10
0,2:REPEAT UNTIL TIME=300:PRINT TAB(17,2)"   
  "
  210 IF INKEY(-49) THEN g=1:SOUND 1,-15,200,
1
  220 IF INKEY(-50) THEN g=2:SOUND 1,-15,200,
1
  230 to=po-(INKEY(-67) AND po<151)+(INKEY(-9
8) AND po>144)
  240 IF INKEY(-67) AND po=151 THEN to=to-7 E
LSE IF INKEY(-98) AND po=144 THEN to=to+7
  250 po=to:IF x<5 THEN c=1
  260 FOR f=1 TO g
  270   y=y+(po>144 AND po<148)-(po>148):x=x+
(po<146 OR po=151)-(po>146 AND po<150)
  280   IF FNscreen(x,y)=232 OR FNscreen(x,y)
=136 THEN y=y1:x=x1:SOUND 1,-15,70,1:po=INT(R
ND(7))+144
  290   GCOL 0,0:PROCover(x1,y1,po1):GCOL 0,1
:PROCover(x,y,po)
  300   y1=y:x1=x:po1=po
  310   IFy=11 AND x>27 AND c=1 THEN SOUND 1,
-15,100,1:l1=l1+1:PRINT TAB(10,0);l1:c=0:IF l
1=laps+1 THEN GOTO 410
  320 NEXT f
  330 cy=cy+(cpo>144 AND cpo<148)-(cpo>148):c
x=cx+(cpo<146 OR cpo=151)-(cpo>146 AND cpo<15
0)
  340 IF FNscreen(cx,cy)=232 OR FNscreen(cx,c
y)=136 THEN SOUND 1,-15,50,1:cy=cy1:cx=cx1:cp
o=cpo1
  360 IF cy=13 AND cx=30 THEN RESTORE 810
  370 GCOL0,0:PROCover(cx1,cy1,cpo1):GCOL 0,1
:PROCover(cx,cy,cpo)
  380 cy1=cy:cx1=cx:cpo1=cpo
  390 IF cy=11 AND cx=30 THEN l2=l2+1:SOUND 1
,-15,100,1:PRINT TAB(30,0);l2:IF l2 =laps+1 T
HEN GOTO 410
  400 GOTO 210
  410 FOR f=0 TO 255 STEP 5:SOUND 1,-12,f,1:T
IME=0:REPEAT UNTIL TIME>4:NEXT f
  420 *FX15,1
  430 MODE 7:VDU 23;8202;0;0;0;
  440 sc=40/ci+60/sk
  450 IF cy=11 AND cx=30 THEN sc=-sc
  460 sc=sc+(l1-l2)*2
  470 IF sc<0 THEN PRINT TAB(0,2);"Bad luck! 
you were beaten."
  480 IF sc>0 THEN PRINT TAB(0,2);"Well done!
 you were the winner."
  490 PRINT "Your score is ";sc
  500 IF sc<i(2) THEN GOTO 550
  510 PRINT TAB(0,5);"Your score is good enou
gh to be included in the top scores. Please e
nter your    name.":INPUT n$:IF LEN(n$)>15 TH
EN GOTO 510
  520 IF sc>i(0) THEN i(2)=i(1):i(1)=i(0):i(0
)=sc:b$(2)=b$(1):b$(1)=b$(0):b$(0)=n$:GOTO 55
0
  530 IF sc>i(1) THEN i(2)=i(1):i(1)=sc:b$(2)
=b$(1):b$(1)=n$:GOTO 550
  540 i(2)=sc:b$(2)=n$
  550 PRINT '"These are the best scores:":FOR
 f=0 TO 2:PRINT 'f+1;"...";b$(f);TAB(30);i(f)
:NEXT f
  560 PRINT TAB(6,24);CHR$(136);"Press any ke
y to play again.";:IF INKEY$(100)="" THEN GOT
O 560 ELSE GOTO 140
  570 PRINT CHR$(141);CHR$(129);"   GRAND PRI
X - BY PAUL STANLEY - "'CHR$(141);CHR$(132);"
   GRAND PRIX - BY PAUL STANLEY - "
  580 PRINT TAB(0,4);" Steer your car around 
the race- track  and try to be at a car drive
n by the    computer."
  590  PRINT'CHR$(130);"      Turn left with.
......Z"'';CHR$(131);"      Turn right with..
....X"''" You can select gears with 1(slow) a
nd  2(fast). The computer will stay in firsta
t all times. If you crash you will     restar
t in a random";
  600 PRINT" direction,  so you  must sort yo
urself out as fast as       possible."
  610  PRINT'CHR$(134);"     Your car is the 
one on the left."
  620 PRINT TAB(6,24);CHR$(136);" PRESS ANY K
EY TO START.";
  630 IF INKEY$(1000)="" THEN GOTO 630
  640 RETURN
  650 VDU 28,4,31,35,5:PRINT TAB(0,1);
  660 i$(0)="  iiiiiiiiiiiiiiiiiiiiiiiiiiii  
 ii                          ii ii           
                 iii                 iiiiiii 
     ii              ii    i  ii     ii      
       ii     i   ii    ii    iiiiiiiiii     
 i    ii   i"
  670 i$(1)="i          i         i     i   i
i          i         i     i   ii          i 
   i    i     i   iii         i   iii   i    
 i   i iiiiii    i   i i   i     i   i      i
i   i   i i   i     i   i iiiiii    i   i i  
 i     i   i"
  680 i$(2)="ii         i   i i   ii   ii   i
i          i   i i    iiiii    ii     iiiiii 
  i i             ii              i i        
     ii              i i             iii     
       ii ii           ii iiiiiiiiiiiiii   ii
iiiiiiiiiii"
  690 FORA%=0 TO 2:FOR B%=1 TO LEN(i$(A%)):IF
 MID$(i$(A%),B%,1)="i" THEN PRINT CHR$(232); 
ELSE PRINT CHR$(32);
  700 NEXT:NEXT
  710 PRINT TAB(27,11);"     "
  720 IF ci=1 THEN PRINT TAB(6,3);CHR$232;CHR
$232;TAB(5,4);CHR$232;CHR$232;TAB(2,8);CHR$23
2;TAB(2,9);CHR$232;CHR$232;TAB(3,17);CHR$232;
TAB(3,18);CHR$232;TAB(18,8);CHR$232;TAB(28,13
);CHR$232;
  730 DATA 3,9,3,24,6,5,6,6,7,4,8,4,9,5,9,6,9
,15,9,16,9,30,11,8,11,18,12,12,13,8,14,30,15,
5,15,6,15,18,16,4,17,4,17,12,17,20,17,27,18,5
,18,11
  740 DATA 3,8,3,25,6,4,6,5,7,3,8,3,8,30,9,4,
9,5,9,16,9,17,10,18,12,8,12,13,13,8,13,18,13,
30,15,5,15,6,16,4,16,13,17,4,17,22,17,26,18,5
,18,11
  750 DATA 2,12,2,26,5,3,5,9,6,30,7,1,7,17,7,
18,8,19,9,1,10,2,10,7,10,14,12,9,15,9,15,30,1
6,3,16,8,16,14,16,19,17,2,18,2,19,3,19,11,20,
23,20,25
  760 DATA 2,6,2,27,4,2,4,4,5,1,5,30,7,16,7,1
8,9,20,9,1,9,14,10,2,10,7,13,10,14,10,16,30,1
6,3,16,8,17,14,17,20,18,1,19,1,19,22,19,27,20
,2,20,11
  770 RESTORE (620+(sk*10))
  780 COLOUR 3:FOR l=1 TO 26:READ y,x:PRINT T
AB(x,y);"-";:NEXT l:COLOUR 1
  790 RESTORE 810
  800 I=-1
  810 DATA l,l,7,-7,7,l,l,l,-l,-l,-l,-7,7,l,l
,l,l,l,-l,-l,-l,-l,l,l,l,l,l
  820 po=146:cpo=146:y=10:x=28:cy=y:cx=30:y1=
y:x1=x:po1=po:cy1=cy:cx1=cx:cpo1=cpo:l1=1:l2=
l1:g=1:c=0
  830 GCOL 0,1:PROCover(x,y,po):PROCover(x+2,
y,cpo)
  840 PRINT TAB(0,0);"YOUR LAPS:";l1;"   COMP
UTER'S LAPS:";l2
  850 RETURN
  860 DEF FNscreen(X%,Y%)
  870 VDU 31,X%,Y%:A%=135:C=USR(&FFF4):C=C AN
D &FFFF:C=C DIV &100
  880 =C
  890 DEF PROCover(X%,Y%,C%)
  900 VDU5:GCOL 3,1
  910 A%=(32+(X%*8))*4
  920 B%=1023-(40+(Y%*8))*4
  930 MOVE A%,B%:PRINT CHR$(C%+80);
  940 VDU4
  950 ENDPROC