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