Skip to content

Commit

Permalink
Merge pull request #47 from Program-AR/void-cell
Browse files Browse the repository at this point in the history
Escenario sin casilla
  • Loading branch information
tfloxolodeiro authored Sep 25, 2023
2 parents 88a234e + f62e812 commit d25e98c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 4 deletions.
13 changes: 10 additions & 3 deletions src/escenas/libroPrimaria/EscenaDesdeMapa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ abstract class EscenaDesdeMapa extends EscenaActividad {
}

protected construirCuadricula(mapa : MapaEscena) : Cuadricula {
let cuadricula = new Cuadricula(this.cuadriculaX(), this.cuadriculaY(), mapa.length,
mapa[0].length, this.opsCuadricula(), this.opsCasilla());
const matrizBooleana = mapa.map(fila => fila.map(casilla => casilla === '_' ? 'F' : 'T'))
const cuadricula: CuadriculaEsparsa = new CuadriculaEsparsa(this.cuadriculaX(), this.cuadriculaY(), this.opsCuadricula(), this.opsCasilla(), matrizBooleana);
cuadricula.forEachCasilla(casilla => this.llenarCasilla(cuadricula, casilla, mapa));
return cuadricula;
}
Expand All @@ -96,7 +96,7 @@ abstract class EscenaDesdeMapa extends EscenaActividad {
let nroColumna : number = casilla.nroColumna;
let ids : string[] = mapa[nroFila][nroColumna].split("&");
ids.forEach(id => {
if (id != '' && id != ' ' && id != '-') { // si no es casilla libre
if (id != '' && id != ' ' && id != '-' && id != '_') { // si no es casilla libre
let actor = this.mapearIdentificadorAActor(id, nroFila, nroColumna);
cuadricula.agregarActorEnCasilla(actor, casilla, true);
}
Expand Down Expand Up @@ -446,6 +446,13 @@ class GeneradorDeCasillaVacia implements GeneradorDeCasilla {
esAleatorioPara(generador : GeneradorDeMapasAleatorios): boolean { return false; }
}

/** Corresponde a las casillas indicadas con `_`. */
class GeneradorDeCasillaNula implements GeneradorDeCasilla {
generarSemillaDeCasilla(generador : GeneradorDeMapasAleatorios) : SemillaDeCasilla
{ return new SemillaDeCasilla('_'); }
esAleatorioPara(generador : GeneradorDeMapasAleatorios): boolean { return false; }
}

/** Corresponde al modificador `?` (recursivo). */
class GeneradorDeCasillaMaybe implements GeneradorDeCasilla {
constructor(private generadorInterno : GeneradorDeCasilla, private proba? : number) {}
Expand Down
5 changes: 4 additions & 1 deletion src/gramaticaAleatoria.ne
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ Atom -> Id {% d => new GeneradorDeCasillaSimple(d[0]) %}
| Bag {% id %}
| Col {% id %}
| Nil {% id %}
| Void {% id %}
| "(" _ Term _ ")" {% d => d[2] %}
Id -> [a-zA-Z0-9]:+ {% d => d[0].join("") %}
Bag -> "$" {% d => new GeneradorDeCasillaBolsa() %}
Expand All @@ -53,4 +54,6 @@ Nil -> "-" {% d => new GeneradorDeCasillaVacia() %}

Macro -> "#" _ Id {% d => new GeneradorDeCasillaMacro(d[2]) %}

And -> Atom _ "&" _ Atom {% d => new GeneradorDeCasillaAnd(d[0], d[4]) %}
And -> Atom _ "&" _ Atom {% d => new GeneradorDeCasillaAnd(d[0], d[4]) %}

Void -> "_" {% d => new GeneradorDeCasillaNula() %}
31 changes: 31 additions & 0 deletions tests/EscenaDesdeMapa.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/// <reference path = '../src/escenas/libroPrimaria/CustomScene.ts' />
/// <reference path = "../node_modules/pilasweb/dist/pilasweb.d.ts" />
// @ts-ignore
const { EscenaDuba, objectTypes, pilas, Lita } = global.win

describe("EscenaDesdeMapa", () => {

let escena: EscenaDesdeMapa

beforeAll(() => {
pilas.onready = () => { }
pilas.iniciar({
imagenesExtra: ['actor.duba.png', 'casillas.duba.png', 'actor.churrasco.png', 'fondo.duba.png'],
opciones: { canvas_id: 'canvas' },
cargar_imagenes_estandar: false
})

escena = new EscenaDuba(["[[A,P,_],[-,_,-],[_,-,-]]"])
pilas.mundo.gestor_escenas.cambiar_escena(escena)
escena.iniciar()
})

test("No se crea casilla en posicion de casilla nula", () =>{
expect(escena.cuadricula.casilla(0,2)).toBeFalsy()
})

test("Al tener una casilla nula en un borde no se eliminan las casillas en la misma fila y columna", () =>{
expect(escena.cuadricula.casilla(0,1)).toBeTruthy()
expect(escena.cuadricula.casilla(1,2)).toBeTruthy()
})
})

0 comments on commit d25e98c

Please sign in to comment.