diff --git a/package-lock.json b/package-lock.json index 1685f7a..660b2e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "pilas-bloques-exercises", - "version": "1.4.14", + "version": "1.4.15", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 75efc5c..528ebc4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pilas-bloques-exercises", - "version": "1.4.14", + "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..531d5ad --- /dev/null +++ b/src/escenas/ReciclandoPapeles.ts @@ -0,0 +1,88 @@ +/// +/// +/// +/// +/// + +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.cantidadDePapelesSinLevantar(); + } + + hayTachosLlenosAlFinalDeLasFilas(){ + return this.tachos.every( tacho => tacho.subactores[0].estaLleno() ); + } + + cantidadDePapelesSinLevantar(): number { + var cant: number = 0; + this.papeles.forEach( papel => cant += papel.subactores[0].vivo ); + return cant; + } + + 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(); + } +}