62 lines
1.3 KiB
JavaScript
62 lines
1.3 KiB
JavaScript
function game() {
|
|
this.size = [500, 500];
|
|
|
|
this.clear = function () {
|
|
var c = document.getElementById("can");
|
|
var ctx = c.getContext("2d");
|
|
ctx.fillStyle = "#000000";
|
|
ctx.fillRect(0, 0, 1000, 1000);
|
|
//console.log("clearing");
|
|
};
|
|
|
|
this.draw = function (x, y) {
|
|
var c = document.getElementById("can");
|
|
var ctx = c.getContext("2d");
|
|
ctx.fillStyle = "#FFFFFF";
|
|
ctx.fillRect(x, y, 1, 1);
|
|
//console.log(y+"drawing"+x);
|
|
//console.log("finished drawing");
|
|
};
|
|
}
|
|
var a = new game();
|
|
a.clear();
|
|
var b = new population(a);
|
|
b.reset();
|
|
b.create_population();
|
|
|
|
function redraw() {
|
|
let done = false;
|
|
let callback = null;
|
|
requestAnimationFrame(() => {
|
|
done = true;
|
|
if (callback !== null) callback();
|
|
});
|
|
|
|
return new Promise((res) => {
|
|
if (done) res();
|
|
else callback = () => res();
|
|
});
|
|
}
|
|
|
|
const iterationsPerFrame = 10;
|
|
|
|
async function main() {
|
|
for (let k = 0; k < 1000; k++) {
|
|
await redraw();
|
|
a.clear();
|
|
console.log(`thinking: ${k}`);
|
|
for (let i = 0; i < 500; i++) {
|
|
if (i % iterationsPerFrame === 0) await redraw();
|
|
for (let j = 0; j < b.Population.length; j++) {
|
|
b.think(b.Population[j]);
|
|
a.draw(b.Population[j].x, b.Population[j].y);
|
|
}
|
|
}
|
|
|
|
b.evolve();
|
|
}
|
|
}
|
|
|
|
main();
|
|
|