<html>
<canvas id="canvas" width="1200" height="600" style="border:1px solid #d3d3d3;" />
<script>
var canvas=document.getElementById("canvas"),g=canvas.getContext("2d");g.font="30px Verdana";var cl=canvas.getBoundingClientRect(),w=canvas.width,h=canvas.height,sr=90*Math.PI/180,sd={a:300,b:800};function create(t,a){let e=Object.assign({},t);return Object.keys(a).forEach(t=>{e[t]=a[t]}),e}function hyp(t,a){return Math.sqrt(t**2+a**2)}var c={gr:"#DDD",bl:"#000",g:"#0F0",b:"#00F",y:"#FF0"},m={x:600,y:300},car={x:0,y:0,ax:0,ay:0,r:0,w:20,h:30,s:.1,mxs:null,t:null},A=create(car,{x:600,y:300,mxs:5,t:0}),pC=[];function nPC(t,a){let e=360*Math.random(),n=Math.cos(e)*(sd.a+Math.random()*sd.b),c=Math.sin(e)*(sd.a+Math.random()*sd.b);this.pC.push(create(this.car,{x:t+n,y:a+c,mxs:3,t:1}))}function dB(){g.fillStyle=c.gr,g.fillRect(0,0,w,h)}function mTD(t,a,e){let n=hyp(a-t.x,e-t.y);if(n>3){let c=a-t.x,l=e-t.y;t.ax+=c*t.s/n,t.ay+=l*t.s/n}let c=hyp(t.ax,t.ay)/t.mxs;c>1&&(t.ax/=c,t.ay/=c),t.x+=t.ax,t.y+=t.ay,drawCar(t)}function drawCar(t){g.save(),g.translate(t.x,t.y),t.r=Math.atan2(t.ay,t.ax),g.rotate(t.r+sr),g.beginPath(),g.fillStyle=t.t?c.b:c.g,g.fillRect(-t.w/2,-t.h/2,t.w,t.h),g.strokeStyle=c.bl,g.lineWidth=1,g.strokeRect(-t.w/2,-t.h/2,t.w,t.h),g.lineWidth=2,g.strokeStyle=c.bl,g.strokeRect(1-t.w/2,-t.h/4,t.w-2,2*t.h/3),g.fillStyle=c.y,g.fillRect(-t.w/2,-t.h/2,t.w/4,t.w/4),g.fillRect(t.w/2-5,-t.h/2,t.w/4,t.w/4),g.stroke(),g.restore()}nPC(A.x,A.y),nPC(A.x,A.y),nPC(A.x,A.y),canvas.addEventListener("mousemove",function(t){t.clientX&&(m.x=t.clientX-cl.left,m.y=t.clientY-cl.top)}),setInterval(function(){dB(),mTD(A,m.x,m.y);for(let t=0;t<this.pC.length;t++)mTD(this.pC[t],A.x,A.y)},10);
</script>
</html>