From e13af9dd7ce2ac868bb96b1615f08ba6878436f0 Mon Sep 17 00:00:00 2001 From: Juan Carlos Sigler Priego Date: Fri, 26 Jul 2024 20:36:33 -0400 Subject: [PATCH] fix-row-column-limits --- README.md | 29 +++++++++++++++++------------ js/karel.js | 2 +- js/main.js | 14 ++++++++++---- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 5c343e7..7c94e8c 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,28 @@ -Karel.js -======== +# Karel.js Compilador y evaluador de Karel en Javascript ## Cómo descargar Karel.js -* Clona el repositorio en tu máquina usando - `git clone https://github.com/omegaup/karel.js.git`. -* Haz `git submodule update --init` al repo, para incluir CodeMirror en tu - copia del proyecto. +- Clona el repositorio en tu máquina usando + `git clone https://github.com/omegaup/karel.js.git`. +- Haz `git submodule update --init` al repo, para incluir CodeMirror en tu + copia del proyecto. ## Cómo correr Karel.js en tu máquina -* `npm install && npm start` +- `npm install && npm start` ## Cómo correr Karel.js de línea de comandos -* `sudo npm install -g` -* `kareljs compile archivo.karel` compila el programa y genera un - archivo `.kx`. -* `kareljs run archivo.kx < entrada.in` ejecuta el programa con el mundo - especificado por `entrada.in`. +- `sudo npm install -g` +- `kareljs compile archivo.karel` compila el programa y genera un + archivo `.kx`. +- `kareljs run archivo.kx < entrada.in` ejecuta el programa con el mundo + especificado por `entrada.in`. + +## Troubleshooting + +- Si `npm install` marca error en la librería `node-canvas`, probablemente estés + corriendo desde un OS que necesita instalar ciertas dependencias. Consulta la siguiente + [documentación](https://github.com/Automattic/node-canvas?tab=readme-ov-file#compiling) diff --git a/js/karel.js b/js/karel.js index 8c8473d..22082b5 100644 --- a/js/karel.js +++ b/js/karel.js @@ -644,7 +644,6 @@ World.prototype.resize = function (w, h) { var oldW = self.w; var oldH = self.h; var oldMap = self.map; - var oldCurrentMap = self.oldCurrentMap; var oldWallMap = self.wallMap; var oldDumpCells = self.dumpCells; @@ -1489,6 +1488,7 @@ World.prototype.errorMap = function (s) { World.prototype.move = function (i, j) { var self = this; + if (0 >= i || i > self.h || 0 >= j || j > self.w) return; self.i = self.start_i = i; self.j = self.start_j = j; self.dirty = true; diff --git a/js/main.js b/js/main.js index 9c10345..e70bf4c 100644 --- a/js/main.js +++ b/js/main.js @@ -1227,8 +1227,10 @@ $(document).ready(function () { wRender.moveSouth(); saveWorld = false; } else if (currentCell && event.which >= 96 && event.which <= 105) { + // numpad 0 - numpad 9 mundo.setBuzzers(currentCell.row, currentCell.column, event.which - 96); } else if (currentCell && event.which >= 48 && event.which <= 57) { + // 0 - 9 mundo.setBuzzers(currentCell.row, currentCell.column, event.which - 48); } else if (currentCell && event.which == 73) { // I @@ -1256,6 +1258,12 @@ $(document).ready(function () { // K mundo.move(currentCell.row, currentCell.column); mundo.rotate(); + } else if (currentCell && event.which == 79) { + // O + mundo.rotate(); + } else if (currentCell && event.which == 80) { + // P + mundo.move(currentCell.row, currentCell.column); } else { repaint = false; } @@ -1509,13 +1517,12 @@ $(document).ready(function () { }); $('#filas').blur(function (event) { var valor = parseInt($(this).val()); - if (0 > valor || valor > 10000 || valor == h || Number.isNaN(valor)) { + if (valor <= 0 || valor > 10000 || valor == h || Number.isNaN(valor)) { $(this).val(h); return; } h = valor; mundo.resize(w, h); - addEventListeners(mundo); wRender = new WorldRender(context, h, w); wRender.paint(mundo, world.width, world.height, { editable: true, @@ -1525,13 +1532,12 @@ $(document).ready(function () { }); $('#columnas').blur(function (event) { var valor = parseInt($(this).val()); - if (0 > valor || valor > 10000 || valor == w || Number.isNaN(valor)) { + if (valor <= 0 || valor > 10000 || valor == w || Number.isNaN(valor)) { $(this).val(w); return; } w = valor; mundo.resize(w, h); - addEventListeners(mundo); wRender = new WorldRender(context, h, w); wRender.paint(mundo, world.width, world.height, { editable: true,