Skip to content

Commit

Permalink
Merge pull request #36 from Program-AR/andExpr
Browse files Browse the repository at this point in the history
Expresion and
  • Loading branch information
tfloxolodeiro authored Jun 6, 2023
2 parents a309859 + d30dbd1 commit d3c589c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 7 deletions.
48 changes: 41 additions & 7 deletions src/escenas/libroPrimaria/EscenaDesdeMapa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,13 @@ abstract class EscenaDesdeMapa extends EscenaActividad {
llenarCasilla(cuadricula : Cuadricula, casilla : Casilla, mapa : MapaEscena) : void {
let nroFila : number = casilla.nroFila;
let nroColumna : number = casilla.nroColumna;
let id : string = mapa[nroFila][nroColumna];
if (id != '' && id != ' ' && id != '-') { // si no es casilla libre
let actor = this.mapearIdentificadorAActor(id, nroFila, nroColumna);
cuadricula.agregarActorEnCasilla(actor, casilla, true);
}
let ids : string[] = mapa[nroFila][nroColumna].split("&");
ids.forEach(id => {
if (id != '' && id != ' ' && id != '-') { // si no es casilla libre
let actor = this.mapearIdentificadorAActor(id, nroFila, nroColumna);
cuadricula.agregarActorEnCasilla(actor, casilla, true);
}
})
}

/**
Expand Down Expand Up @@ -267,7 +269,9 @@ class GeneradorDeMapasAleatorios implements GeneradorDeMapas {
var semillasEncoladas = this._semillasEncoladas;
this._semillasEncoladas = [];
semillasEncoladas.forEach(e => {
mapa[e.pos[0]][e.pos[1]] = e.semilla.germinar(this, e.pos);
const contenidoOriginal = mapa[e.pos[0]][e.pos[1]]
const nuevoContenido = e.semilla.germinar(this, e.pos)
mapa[e.pos[0]][e.pos[1]] = `${contenidoOriginal}&${nuevoContenido}`;
}, this);
}
this.vaciarAnotadosParaColecciones();
Expand Down Expand Up @@ -362,7 +366,7 @@ interface GeneradorDeCasilla {
}

/**
* Contenedor temporario para la string que representará el contenido de una casilla
* Contenedor temporal para la string que representará el contenido de una casilla
* de un mapa. Se utiliza durante el proceso de generación de un mapa aleatorio.
*/
class SemillaDeCasilla {
Expand All @@ -386,6 +390,23 @@ class SemillaDeCasilla {
};
}

class SemillaCompuesta extends SemillaDeCasilla {
semillas: SemillaDeCasilla[]

constructor(semillas: SemillaDeCasilla[]) {
super();
this.semillas = semillas;
}

public seraVacia(): boolean {
return this.semillas.every(semilla => semilla.seraVacia())
}

public germinar(generador: GeneradorDeMapasAleatorios, pos: [number, number]): string {
return this.semillas.map(semilla => semilla.germinar(generador,pos)).join("&")
}
}

/** Corresponde a identificadores de la forma `[a-zA-Z0-9]+`. */
class GeneradorDeCasillaSimple implements GeneradorDeCasilla {
constructor(private id : string) {}
Expand Down Expand Up @@ -440,6 +461,19 @@ class GeneradorDeCasillaMaybe implements GeneradorDeCasilla {
return 0 < proba && proba < 1;
}
}
class GeneradorDeCasillaAnd implements GeneradorDeCasilla {
constructor(private generador1 : GeneradorDeCasilla, private generador2: GeneradorDeCasilla) {}

generarSemillaDeCasilla(generador : GeneradorDeMapasAleatorios) : SemillaDeCasilla {
const semilla1: SemillaDeCasilla = this.generador1.generarSemillaDeCasilla(generador)
const semilla2: SemillaDeCasilla = this.generador2.generarSemillaDeCasilla(generador)
return new SemillaCompuesta([semilla1, semilla2])
}

esAleatorioPara(generador): boolean {
return this.generador1.esAleatorioPara(generador) || this.generador2.esAleatorioPara(generador)
}
}

/** Corresponde al modificador `|` (recursivo). */
class GeneradorDeCasillaOpcion implements GeneradorDeCasilla {
Expand Down
4 changes: 4 additions & 0 deletions src/gramaticaAleatoria.ne
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ Option -> Subterm2 _ "|" _ Subterm2

Subterm2 -> Atom {% id %}
| Maybe {% id %}
| And {% id %}

Maybe -> Atom _ "?" {% d => new GeneradorDeCasillaMaybe(d[0]) %}
| Atom _ "?" _ "(" _ decimal _ ")"
{% d => new GeneradorDeCasillaMaybe(d[0],d[6]) %}
Expand All @@ -50,3 +52,5 @@ Col -> "*" {% d => new GeneradorDeCasillaColeccion() %}
Nil -> "-" {% d => new GeneradorDeCasillaVacia() %}

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

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

0 comments on commit d3c589c

Please sign in to comment.