Saludos, aquí Lukeitor!
Estoy haciendo un juego que mezcla RPG con ajedrez, para ello decidí hacer primero un jueguito de ajedrez.
Estaba trabajando con la biblioteca de pilas en vez del editor porque necesito usar motores de ajedrez ya creados, pero me pregunté si era posible “hackear” pilas para agregar una biblioteca javascript externa.
Luego de algunas pruebas y consultas a la ia, esto funcionó para cargar en el editor de pilas la biblioteca js-chess-engine que trae una IA y un verificador de jugadas de ajedrez.
iniciar() {
this.nivel = this.proyecto.dificultad;
// 1. Cargamos dinámicamente la biblioteca externa js-chess-engine usando un Blob en formato módulo ESM
const codigo = `
import { Game } from "https://esm.run/js-chess-engine";
window.Game = Game;
window.dispatchEvent(new Event("jsChessEngineReady"));
`;
const url = URL.createObjectURL(
new Blob([codigo], { type: "text/javascript" })
);
const etiqueta = document.createElement("script");
etiqueta.type = "module";
etiqueta.src = url;
etiqueta.onload = () => URL.revokeObjectURL(url);
etiqueta.onerror = () => {
this.decir("No se pudo cargar js-chess-engine");
URL.revokeObjectURL(url);
};
document.head.appendChild(etiqueta);
// 2. Escuchamos el evento de carga para inicializar la lógica del juego
window.addEventListener("jsChessEngineReady", () => {
// Instanciamos el juego en su posición inicial estándar
this.game = new window.Game();
console.log("Motor de ajedrez inicializado correctamente.");
}, { once: true });
}
Les comparto también el juego de ajedrez que hice. Aunque solo puedes jugar contra la máquina con blancas o jugar de a dos jugadores y seguramente haya algún que otro error, pero es totalmente funcional (no pude derrotar a la IA en nivel máximo).
Abrir este proyecto en el editor de pilas
Obviamente, entiendo yo, que Pilas no estaba pensado para usarse de esta forma.
Estaría bien tener una forma más fácil de cargar na biblioteca Js ya que este lenguaje es longevo y conserva cientos de soluciones complicadas de recrear a mano como la búsqueda de caminos.
Estaría bueno tener una pestaña llamada “compelementos” o algo así donde poder cargar una biblioteca.