42 lines
1022 B
TypeScript
42 lines
1022 B
TypeScript
import "./menu";
|
|
import { createCanvas } from "./canvas";
|
|
import { getBestRoute } from "@snk/solver/getBestRoute";
|
|
import { Color, copyGrid } from "@snk/types/grid";
|
|
import { grid, snake } from "./sample";
|
|
import { step } from "@snk/solver/step";
|
|
|
|
const chain = getBestRoute(grid, snake)!;
|
|
|
|
//
|
|
// draw
|
|
let k = 0;
|
|
|
|
const { canvas, draw } = createCanvas(grid);
|
|
document.body.appendChild(canvas);
|
|
|
|
const onChange = () => {
|
|
const gridN = copyGrid(grid);
|
|
const stack: Color[] = [];
|
|
for (let i = 0; i <= k; i++) step(gridN, stack, chain[i]);
|
|
|
|
draw(gridN, chain[k], stack);
|
|
};
|
|
onChange();
|
|
|
|
const input = document.createElement("input") as any;
|
|
input.type = "range";
|
|
input.value = 0;
|
|
input.step = 1;
|
|
input.min = 0;
|
|
input.max = chain.length - 1;
|
|
input.style.width = "90%";
|
|
input.addEventListener("input", () => {
|
|
k = +input.value;
|
|
onChange();
|
|
});
|
|
document.body.append(input);
|
|
window.addEventListener("click", (e) => {
|
|
if (e.target === document.body || e.target === document.body.parentElement)
|
|
input.focus();
|
|
});
|