RustX/Autonomous_Driving_Simulation
3
1carCanvas.height=window.innerHeight;2carCanvas.width=200;3networkCanvas.height=window.innerHeight;4networkCanvas.width=298;5 6const carCtx=carCanvas.getContext("2d");7const networkCtx=networkCanvas.getContext("2d");8const road=new Road(carCanvas.width/2,carCanvas.width*0.9);9const N=100;10const cars=generateCars(N);11const traffic=[12 new Car(100,-100,30,50,"DUMMY",2)13];14let bestCar=cars[0];15if(localStorage.getItem("bestBrain")){16 for(let i=0;i<cars.length;i++){17 cars[i].brain=JSON.parse(18 localStorage.getItem("bestBrain"));19 if(i>0){20 NeuralNetwork.mutate(cars[i].brain,0.2);21 }22 }23}24 25animate();26 27function animate(){28 for(let i=0;i<traffic.length;i++){29 traffic[i].update([],[]);30 }31 for(let i=0;i<cars.length;i++){32 cars[i].update(road.borders,traffic);33 }34 bestCar=cars.find(35 c=>c.y==Math.min(36 ...cars.map(c=>c.y)37 ));38 39 carCanvas.height=window.innerHeight;40 networkCanvas.height=window.innerHeight;41 42 carCtx.translate(0,-bestCar.y+carCanvas.height*0.7);43 road.draw(carCtx);44 for(let i=0;i<traffic.length;i++){45 traffic[i].draw(carCtx);46 }47 carCtx.globalAlpha=0.2;48 for(let i=0;i<cars.length;i++){49 cars[i].draw(carCtx);50 }51 carCtx.globalAlpha=1;52 bestCar.draw(carCtx,true);53 54 Visualizer.drawNetwork(networkCtx,bestCar.brain);55 56 requestAnimationFrame(animate);57}58 59function generateCars(N){60 const cars=[];61 for(let i=1;i<=N;i++){62 cars.push(new Car(100,100,30,50,"AI"));63 }64 return cars;65}66 67function save(){68 localStorage.setItem("bestBrain",69 JSON.stringify(bestCar.brain));70}71 72function discard(){73 localStorage.removeItem("bestBrain");74}