diff --git a/package-lock.json b/package-lock.json
index 91c5266..660b2e3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "pilas-bloques-exercises",
- "version": "1.4.13",
+ "version": "1.4.15",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index def6abc..528ebc4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "pilas-bloques-exercises",
- "version": "1.4.13",
+ "version": "1.4.15",
"description": "Exercises for Pilas Bloques",
"homepage": "http://pilasbloques.program.ar",
"author": {
diff --git a/src/actores/segundoCiclo/Capy/Tacho.ts b/src/actores/segundoCiclo/Capy/Tacho.ts
index b7b057b..7cb3d38 100644
--- a/src/actores/segundoCiclo/Capy/Tacho.ts
+++ b/src/actores/segundoCiclo/Capy/Tacho.ts
@@ -1,15 +1,30 @@
///
class Tacho extends ActorAnimado {
+ lleno;
static _grilla = 'actor.tacho.png'
constructor(lleno = false) {
super(0, 0, {cantColumnas: 2});
this.definirAnimacion("vacio", [0], 1);
this.definirAnimacion("lleno", [1], 1);
-
+ this.lleno = lleno;
if(lleno)
this.cargarAnimacion("lleno")
else
this.cargarAnimacion("vacio")
}
+
+ vaciar() {
+ this.cargarAnimacion("vacio")
+ this.lleno = false;
+ }
+
+ llenar() {
+ this.cargarAnimacion("lleno")
+ this.lleno = true;
+ }
+
+ estaLleno(): boolean {
+ return this.lleno;
+ }
}
diff --git a/src/escenas/ReciclandoPapeles.ts b/src/escenas/ReciclandoPapeles.ts
new file mode 100644
index 0000000..9f27c37
--- /dev/null
+++ b/src/escenas/ReciclandoPapeles.ts
@@ -0,0 +1,86 @@
+///
+///
+///
+///
+///
+
+class ReciclandoPapeles extends EscenaActividad {
+ cuadricula : CuadriculaMultiple;
+ definidor: DefinidorColumnasFijo;
+ automata;
+ tachos;
+ papeles;
+
+ iniciar() {
+ this.fondo = new Fondo('fondo.capy.png',0,0);
+ this.definidor = new DefinidorColumnasFijo(5,[5,6,8,4,7]);
+ this.cuadricula = new CuadriculaMultiple(
+ this.definidor,
+ 0,0,
+ {separacionEntreCasillas: 5},
+ {grilla:'casilla.futbolRobots2.png',
+ cantFilas: 5,
+ cantColumnas: 16,
+ alto:45,ancho:45}
+ );
+ this.cuadricula.cambiarImagenInicio('casillainiciomono.png');
+
+ var capy = new Capy()
+ capy.escala *= 0.5;
+ this.automata = new ActorCompuesto(0, 0, { subactores: [capy] });
+ this.cuadricula.agregarActor(this.automata, 0, 0);
+ this.automata.escala *= 0.3;
+ this.automata.y += 40;
+
+ this.papeles=[]
+ this.tachos=[]
+
+ this.cuadricula.forEachFila((nroFila: number) => this.agregarTacho(nroFila))
+ this.cuadricula.forEachFila((nroFila: number) => this.agregarPapel(nroFila))
+
+ }
+
+ agregarPapel(fila: number) {
+ var elPapel = new Papel()
+ this.cuadricula.agregarActor(elPapel, fila, 0)
+ elPapel.aprender(Flotar, { Desvio: 2 });
+ this.papeles.push( new ActorCompuesto(0, 0, { subactores: [elPapel] }));
+ }
+
+ agregarTacho(fila: number) {
+ var elTacho = new Tacho()
+ this.cuadricula.agregarActor(elTacho, fila, this.definidor.tamanos[fila]-1)
+ this.tachos.push( new ActorCompuesto(0, 0, { subactores: [elTacho] }));
+ this.tachos.escala *= 0.8;
+ }
+
+ estaResueltoElProblema(){
+ return this.hayTachosLlenosAlFinalDeLasFilas() && this.cuadricula.cantFilas === this.cantidadDeTachosLlenos() && !this.hayPapelesSinLevantar();
+ }
+
+ hayTachosLlenosAlFinalDeLasFilas(){
+ return this.tachos.every( tacho => tacho.subactores[0].estaLleno() );
+ }
+
+ hayPapelesSinLevantar(): boolean {
+ return this.papeles.every( papel => papel.subactores[0].vivo );
+ }
+
+ cantidadDeTachosLlenos(): number {
+ var cant: number = 0;
+ this.tachos.forEach( tacho => cant += tacho.subactores[0].estaLleno() );
+ return cant;
+ }
+
+ ultimasCasillas(){
+ return this.cuadricula.filterCasillas(casilla => casilla.esFin());
+ }
+
+ actualizar(): void {
+ super.actualizar();
+ if( !this.tachos[this.automata.casillaActual().nroFila].subactores[0].estaLleno() &&
+ this.automata.tieneAlgoEnLaMano() &&
+ this.automata.casillaActual() === this.tachos[this.automata.casillaActual().nroFila].subactores[0].casillaActual() )
+ this.tachos[this.automata.casillaActual().nroFila].subactores[0].llenar();
+ }
+}
diff --git a/src/escenas/libroPrimaria/EscenaDesdeMapa.ts b/src/escenas/libroPrimaria/EscenaDesdeMapa.ts
index 4cfaf36..afcfaad 100644
--- a/src/escenas/libroPrimaria/EscenaDesdeMapa.ts
+++ b/src/escenas/libroPrimaria/EscenaDesdeMapa.ts
@@ -139,7 +139,9 @@ abstract class EscenaDesdeMapa extends EscenaActividad {
let nroColumna: number = casilla.nroColumna;
let ids: string[] = mapa[nroFila][nroColumna].split("&");
ids.forEach(id => {
- if (id != '' && id != ' ' && id != '-' && id != '_') { // si no es casilla libre
+ if(id === '+'){
+ this.guardarPosicionFinal([nroColumna, nroFila])
+ }else if (id != '' && id != ' ' && id != '-' && id != '_') { // si no es casilla libre
let actor = this.mapearIdentificadorAActor(id, nroFila, nroColumna);
cuadricula.agregarActorEnCasilla(actor, casilla, true);
}
@@ -497,6 +499,12 @@ class GeneradorDeCasillaNula implements GeneradorDeCasilla {
esAleatorioPara(generador: GeneradorDeMapasAleatorios): boolean { return false; }
}
+/** Corresponde a las casillas indicadas con `+`. */
+class GeneradorDeCasillaFinal 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) { }
diff --git a/src/gramaticaAleatoria.ne b/src/gramaticaAleatoria.ne
index 603d034..59b5429 100644
--- a/src/gramaticaAleatoria.ne
+++ b/src/gramaticaAleatoria.ne
@@ -44,7 +44,8 @@ Atom -> Id {% d => new GeneradorDeCasillaSimple(d[0]) %}
| Col {% id %}
| Nil {% id %}
| Void {% id %}
- | "(" _ Term _ ")" {% d => d[2] %}
+ | End {% id %}
+ | "(" _ Term _ ")" {% d => d[2] %}
Id -> [a-zA-Z0-9]:+ {% d => d[0].join("") %}
Bag -> "$" {% d => new GeneradorDeCasillaBolsa() %}
| "$" _ Id {% d => new GeneradorDeCasillaBolsa(d[2]) %}
@@ -56,4 +57,6 @@ Macro -> "#" _ Id {% d => new GeneradorDeCasillaMacro(d[2]) %}
And -> Atom _ "&" _ Atom {% d => new GeneradorDeCasillaAnd(d[0], d[4]) %}
+End -> "+" {% d => new GeneradorDeCasillaFinal() %}
+
Void -> "_" {% d => new GeneradorDeCasillaNula() %}
\ No newline at end of file