diff --git a/assets/ganaste.jpg b/assets/ganaste.jpg new file mode 100644 index 0000000..0bd87fa Binary files /dev/null and b/assets/ganaste.jpg differ diff --git a/assets/ganaste2.jpg b/assets/ganaste2.jpg new file mode 100644 index 0000000..8924269 Binary files /dev/null and b/assets/ganaste2.jpg differ diff --git a/assets/perdiste.jpg b/assets/perdiste.jpg new file mode 100644 index 0000000..9cae8c8 Binary files /dev/null and b/assets/perdiste.jpg differ diff --git a/assets/perdiste2.jpg b/assets/perdiste2.jpg new file mode 100644 index 0000000..7bbfcd5 Binary files /dev/null and b/assets/perdiste2.jpg differ diff --git a/assets/perdiste3.jpg b/assets/perdiste3.jpg new file mode 100644 index 0000000..9f26db8 Binary files /dev/null and b/assets/perdiste3.jpg differ diff --git a/elementos.wlk b/elementos.wlk index 5bb16fe..b114b6e 100644 --- a/elementos.wlk +++ b/elementos.wlk @@ -33,6 +33,11 @@ class Elevador return posicionInicial } + + method reiniciar() + { + activado = false + } } const elevadorPorBoton = new Elevador (posicionInicial = game.at(14, 9)) @@ -86,16 +91,39 @@ object cubo inherits Elemento (position = game.at(6, 10)) position = game.at(position.x() + desplazamiento, position.y()) game.sound("bloque.ogg").play() } -} -object puertaFuego inherits Elemento (position = game.at(12, 14)) -{ - method image() = "puertaFuego.png" - override method tratarColision(personaje) {} + method reiniciar() + { + position = game.at(6, 10) + } } -object puertaAgua inherits Elemento (position = game.at(8, 14)) +class Puerta inherits Elemento { - method image() = "puertaAgua.png" - override method tratarColision(personaje) {} -} \ No newline at end of file + const condicion + const imagenCerrada + var property estaAbierta = false + method puedeAbrirPuertaFuego() = false + method puedeAbrirPuertaAgua() = false + method image() + { + if(estaAbierta) return "puertaAbierta.png" + return imagenCerrada + } + + method hayAlguienEnPuerta() + { + const posibles = game.getObjectsIn(self.position()) + return posibles.any(condicion) + } + + method chequearPuerta() + { + if(self.hayAlguienEnPuerta()) estaAbierta = true + else estaAbierta = false + } +} + +const puertaFuego = new Puerta(position = game.at(12, 14), imagenCerrada = "puertaFuego.png", condicion = {p => p.puedeAbrirPuertaFuego()}) + +const puertaAgua = new Puerta (position = game.at(8, 14), imagenCerrada = "puertaAgua.png", condicion = {p => p.puedeAbrirPuertaAgua()}) diff --git a/main.wpgm b/main.wpgm index 796ffa9..9361cc4 100644 --- a/main.wpgm +++ b/main.wpgm @@ -4,7 +4,6 @@ import personajes.* import elementos.* - program FireboyAndWatergirl { mapa.inciar() @@ -21,9 +20,17 @@ program FireboyAndWatergirl { keyboard.d().onPressDo({watergirl.movDerecha()}) keyboard.s().onPressDo({watergirl.moverElemento()}) + keyboard.r().onPressDo({juego.reiniciar()}) + game.whenCollideDo(fireboy, {elemento => elemento.tratarColision(fireboy)}) game.whenCollideDo(watergirl, {elemento => elemento.tratarColision(watergirl)}) game.onTick(1000, "Chequear boton", {botonAbajo.chequearBoton()}) + game.onTick(1000, "Chequear puerta agua", {puertaAgua.chequearPuerta()}) + game.onTick(1000, "Chequear puerta fuego", {puertaFuego.chequearPuerta()}) + game.onTick(1000, "Chequear victoria", {if(juego.condicionesGanadoras()) juego.ganaste()}) + game.onTick(1000, "Chequear derrota", {if(juego.condicionesPerdedoras()) juego.perdiste()}) + + const soundtrack = game.sound("soundtrack.ogg") soundtrack.shouldLoop(true) diff --git a/mapa.wlk b/mapa.wlk index cc8a78a..b846085 100644 --- a/mapa.wlk +++ b/mapa.wlk @@ -1,4 +1,6 @@ import elementos.* +import personajes.fireboy +import personajes.watergirl object mapa { @@ -133,3 +135,47 @@ class BloquePinchos inherits Bloque } } +object juego +{ + var cartelActual = cartelGanador + var unCartelActivo = false + const elementos = [elevadorPorBoton, elevadorPorPalanca, fireboy, watergirl, cubo] + method ganaste() + { + game.addVisual(cartelGanador) + cartelActual = cartelGanador + unCartelActivo = true + } + + method perdiste() + { + game.addVisual(cartelPerdedor) + cartelActual = cartelPerdedor + unCartelActivo = true + } + + method reiniciar() + { + if(unCartelActivo) + { + elementos.forEach({e => e.reiniciar()}) + unCartelActivo = false + game.removeVisual(cartelActual) + } + } + + method condicionesGanadoras() = puertaFuego.estaAbierta() && puertaAgua.estaAbierta() && !unCartelActivo + method condicionesPerdedoras() = fireboy.estaMuerto() && watergirl.estaMuerto() && !unCartelActivo +} + +object cartelGanador +{ + method image() = "ganaste2.jpg" + var property position = game.at(3,4) +} + +object cartelPerdedor +{ + method image() = "perdiste3.jpg" + var property position = game.at(3,4) +} diff --git a/personajes.wlk b/personajes.wlk index d05c77e..7fa5ea3 100644 --- a/personajes.wlk +++ b/personajes.wlk @@ -1,8 +1,10 @@ class Personaje { var property position + const posicionInicial = position var cantSaltos = 0 var property estaMuerto = false var estaSaltando = false + method tratarColision(personaje) {} method puedeSerAtravesado() = true method puedePresionarBoton() = true @@ -71,12 +73,22 @@ class Personaje { estaMuerto = true } + method reiniciar() + { + position = posicionInicial + if(estaMuerto) game.addVisual(self) + estaMuerto = false + } + } object fireboy inherits Personaje (position = game.at(0, 0)) { method image() = "fireboy6.png" method tocarFuego(){} method tocarAgua(){ self.morir()} + method puedeAbrirPuertaFuego() = true + method puedeAbrirPuertaAgua() = false + method presionar() { @@ -89,6 +101,8 @@ object watergirl inherits Personaje (position = game.at(0, 2)) { method image() = "watergirl3.png" method tocarFuego(){self.morir()} method tocarAgua(){} + method puedeAbrirPuertaFuego() = false + method puedeAbrirPuertaAgua() = true method moverElemento() {