uses crt,graph,doga,dos; type punkt=record x,y:real; end; const Gray50 : FillPatternType = ($ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff); var tt:real; way: array[0..1800] of punkt; woy: array[0..1800] of punkt; P:pointer; size:word; w:char; q,lk,lx,ly,kx,ky,a,b,v,t,wx,dq:integer; rstr:string; grDriver: Integer; grMode,ring: Integer; reserv:array[0..20] of integer; doroga:array[0..349] of integer; procedure car(a:real); var x1,x2,y1,y2,t,x,y,c,b:integer; old:fillpatterntype; begin x1:=round(30*sin((50+a))); y1:=round(15*cos((50+a))); x2:=round(30*sin((-50+a))); y2:=round(15*cos((-50+a))); for x:=0 to 1 do begin for y:=0 to 1 do begin c:=280+80*x; b:=260+45*y; setcolor(darkgray); line(x1+c,y1+b,x2+c,y2+b); line(x1+c,y1+b,c-x2,b-y2); line(c-x2,b-y2,c-x1,b-y1); line(c-x1,b-y1,x2+c,y2+b); setfillpattern(gray50,darkgray); floodfill(c,b,darkgray); end; end; setcolor(white); setfillpattern(gray50,blue); fillellipse(320,280,40,40); ellipse(320,255,190,350,35,15); setfillpattern(gray50,white); floodfill(320,255,white); setcolor(red); circle(320,280,2); line(320,280,320,340); setcolor(white); end; procedure trassa; begin setcolor(lightgray); for a:=0 to 1800 do begin tt:=way[a].x; way[a].x:=(cos(dq*pi/180)*tt+sin(dq*pi/180)*way[a].y); way[a].y:=(cos(dq*pi/180)*way[a].y-sin(dq*pi/180)*tt)-v; tt:=woy[a].x; woy[a].x:=(cos(dq*pi/180)*tt+sin(dq*pi/180)*woy[a].y); woy[a].y:=(cos(dq*pi/180)*woy[a].y-sin(dq*pi/180)*tt)-v; { for b:=0 to 2 do begin putpixel(round(way[a].x)+320+b,349-(round(way[a].y)+69),darkgray); putpixel(round(woy[a].x)+320+b,349-(round(woy[a].y)+69),darkgray); putpixel(round(way[a].x)+320,b+349-(round(way[a].y)+69),darkgray); putpixel(round(woy[a].x)+320,b+349-(round(woy[a].y)+69),darkgray); end;} if way[a].x<=woy[a].x then begin lx:=round(way[a].x); ly:=round(way[a].y); kx:=round(woy[a].x); ky:=round(woy[a].y); end else begin lx:=round(woy[a].x); ly:=round(woy[a].y); kx:=round(way[a].x); ky:=round(way[a].y); end; outtextxy(round(way[a].x)+320,349-round(way[a].y),'*'); outtextxy(round(woy[a].x)+320,349-round(woy[a].y),'*'); { if ((lx>-50) and (ly=69)) then outtext('LeftCrash'); if ((kx<50) and (ky=69)) then outtext('RightCrash'); }{ begin if (((way[a].x<320) and (way[a].x>-320)) and ((way[a].y<175) and (woy[a].y>-175))) then for b:=0 to 0 do begin putpixel(round(way[a].x)+320,349-(round(way[a].y)+69),darkgray); line(round(way[a].x+b)+320,349-(round(way[a].y)+69),320+round(woy[a].x+b),349-(round(woy[a].y)+69)); line(round(way[a].x)+320,349-(round(way[a].y)+69+b),320+round(woy[a].x),349-(round(woy[a].y)+69+b)); end; } end; setcolor(white); end; begin grDriver := VGA; grmode:=VGAmed; InitGraph(grDriver,grmode,'z:\maxim\egavga.bgi'); dq:=0; q:=0;lk:=1; ring:=0; setbkcolor(lightgreen); for a:=0 to 1800 do begin if a<720 then begin way[a].x:=-100; way[a].y:=a; woy[a].x:=100; woy[a].y:=a; end; if (a>=720) and (a<=900) then begin way[a].x:=200*cos(a*pi/180)-300; way[a].y:=a+200*sin(a*pi/180); woy[a].x:=400*cos(a*pi/180)-300; woy[a].y:=a+400*sin(a*pi/180); end; if (a>900) and (a<1620) then begin way[a].x:=-500; way[a].y:=900-(a-900); woy[a].x:=-700; woy[a].y:=1800-a; end; if a>=1620 then begin way[a].x:=200*cos((a)*pi/180)-300; way[a].y:=1800-a+200*sin((a+0)*pi/180); woy[a].x:=400*cos((a+0)*pi/180)-300; woy[a].y:=1800-a+400*sin((a+0)*pi/180); end; end; repeat if lk=1 then lk:=0 else lk:=1; setactivepage(lk); cleardevice; if w='5' then begin q:=q+5;dq:=dq+5;end; if w='7' then begin q:=q-5;dq:=dq-5;end; if w='6' then v:=v+2; if w='4' then v:=v-2; if (w<>'5') and (w<>'7') then begin if q<0 then q:=q+5; if q>0 then q:=q-5; end; if q<-30 then q:=-30; if q>30 then q:=30; w:='d'; trassa; dq:=0; car(pi*q/180); ring:=ring+1; str(ring,rstr); rstr:='Time : '+rstr; outtext(rstr); setvisualpage(lk); sound(200+5*v); delay(10); nosound; if keypressed then w:=readkey until w='q'; closeGraph; end.