// file: Web/game-snake-poc/frontend/ts/main.ts // version: 1 import { startGame } from "./game"; import { bindInputs } from "./input"; function requireElement(selector: string): T { const element = document.querySelector(selector); if (element === null) { throw new Error(`Élément frontend requis absent : ${selector}`); } return element; } async function main(): Promise { const canvas = requireElement("#game"); const score = requireElement("#score"); const length = requireElement("#length"); const status = requireElement("#runtime-status"); const error = requireElement("#startup-error"); const buttons = Array.from(document.querySelectorAll("[data-direction]")); status.textContent = "Chargement WASM…"; const session = await startGame(canvas, score, length); bindInputs(session, buttons); status.className = "badge text-bg-success"; status.textContent = "Prêt"; error.hidden = true; canvas.focus(); } void main().catch(caughtError => { const status = document.querySelector("#runtime-status"); const error = document.querySelector("#startup-error"); const message = caughtError instanceof Error ? caughtError.message : String(caughtError); if (status !== null) { status.className = "badge text-bg-danger"; status.textContent = "Erreur"; } if (error !== null) { error.textContent = `Impossible de démarrer Snake : ${message}`; error.hidden = false; } });