diff --git a/assets/Flow Hero.mp3 b/assets/Flow Hero.mp3 new file mode 100644 index 0000000..ea5e63e Binary files /dev/null and b/assets/Flow Hero.mp3 differ diff --git a/assets/Kamehameha.mp3 b/assets/Kamehameha.mp3 new file mode 100644 index 0000000..8a19979 Binary files /dev/null and b/assets/Kamehameha.mp3 differ diff --git a/assets/Super Survivor.mp3 b/assets/Super Survivor.mp3 new file mode 100644 index 0000000..c654f0e Binary files /dev/null and b/assets/Super Survivor.mp3 differ diff --git a/enemigos.wlk b/enemigos.wlk index aaa44fc..67ff381 100644 --- a/enemigos.wlk +++ b/enemigos.wlk @@ -1,3 +1,4 @@ +import jugador.* import menus.* @@ -33,9 +34,9 @@ class Enemigo1{ } } - method morir() { - sincronizadorDePantallas.cambiarPantalla("ganador") - new MenuGanaste().cargar() + method morir(){ + sincronizadorDePantallas.cambiarPantalla("ganador") + //new MenuGanaste().cargar() } method limpiarEnemigos(){ diff --git a/jugador.wlk b/jugador.wlk index a5237dc..d072752 100644 --- a/jugador.wlk +++ b/jugador.wlk @@ -1,22 +1,23 @@ import enemigos.* import muros.* +import musica.* import menus.* import movimiento.* class Jugador inherits FiguraConMovimiento(position = game.at(1, 1)) { - + method jugador() = true method posicionate(){ - //self.position().clear() self.position(game.at(1, 1)) game.addVisualCharacter(self) } method volver(){ if(sincronizadorDePantallas.pantallaActual() == "jugar"){ + musica.sonido_continue() game.addVisualCharacter(self) } } @@ -30,11 +31,12 @@ class Jugador inherits FiguraConMovimiento(position = game.at(1, 1)) { } method eliminate(){ + musica.sonido_pause() game.removeVisual(self) } method impactado() { - self.eliminate() + self.eliminate() //no debería ir acá, pero es donde mejor anda sincronizadorDePantallas.cambiarPantalla("perdedor") new MenuPerdiste().cargar() } @@ -43,6 +45,10 @@ class Jugador inherits FiguraConMovimiento(position = game.at(1, 1)) { method atacarIzquierda() = new KamehamehaIzquierda().energia(self.position(), "goku_Kamehameha_Izquierda.png", -1) } +object atajos{ + method jugador() = game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head() +} + object datosJugador { var property imagen = null } @@ -53,9 +59,7 @@ object gokuAtacando { method image() = lado method impactado(){ - //game.allVisuals().filter({objeto => objeto.image() == KamehamehaDerecha.image() || objeto.image() == KamehamehaIzquierda.image()}).head() sincronizadorDePantallas.cambiarPantalla("perdedor") - //new MenuPerdiste().cargar() } method eliminate(){ @@ -67,13 +71,17 @@ object gokuAtacando { class KamehamehaDerecha{ var personaje = null var property impacto = 0 - var property position = null + const property sonido = game.sound("Kamehameha.mp3") + + method efectoSonoro() { + self.sonido().volume(0.2) + self.sonido().play() + } method image() = "kamehameha_Derecha.png" method impactado() { - //game.allVisuals().filter({objeto => objeto.image() == Enemigo1.image()}).head().herido() lineaEnemiga.enemigo().herido() self.impacto(1) } @@ -83,9 +91,10 @@ class KamehamehaDerecha{ gokuAtacando.position(posicion) self.position(game.at(posicion.x() + valor, posicion.y())) if(!escenario.mismaPosicion(self.position())){ + self.efectoSonoro() game.addVisual(gokuAtacando) - personaje = game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head() - game.removeVisual(game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head()) + personaje = atajos.jugador() + atajos.jugador().eliminate() game.addVisual(self) game.schedule(500, {self.avanzar()}) } @@ -99,18 +108,27 @@ class KamehamehaDerecha{ game.schedule(500, {self.avanzar()}) } else{ - personaje.position(gokuAtacando.position()) - personaje.volver() + const jugador = new Jugador() + jugador.valor(datosJugador.imagen()) + jugador.position(gokuAtacando.position()) + if(sincronizadorDePantallas.pantallaActual() == "jugar"){ + jugador.volver() + } self.eliminate() gokuAtacando.eliminate() if(sincronizadorDePantallas.pantallaActual() == "perdedor"){ + //jugador.eliminate() new MenuPerdiste().cargar() } + if(sincronizadorDePantallas.pantallaActual() == "ganador"){ + //jugador.eliminate() + new MenuGanaste().cargar() + } } } method eliminate(){ - //game.removeVisual(gokuAtacando) + self.sonido().stop() game.removeVisual(self) } } @@ -124,13 +142,22 @@ class KamehamehaIzquierda inherits KamehamehaDerecha{ game.schedule(500, {self.avanzar()}) } else{ - personaje.position(gokuAtacando.position()) - personaje.volver() + const jugador = new Jugador() + jugador.valor(datosJugador.imagen()) + jugador.position(gokuAtacando.position()) + if(sincronizadorDePantallas.pantallaActual() == "jugar"){ + jugador.volver() + } self.eliminate() gokuAtacando.eliminate() if(sincronizadorDePantallas.pantallaActual() == "perdedor"){ + //jugador.eliminate() new MenuPerdiste().cargar() } + if(sincronizadorDePantallas.pantallaActual() == "ganador"){ + //jugador.eliminate() + new MenuGanaste().cargar() + } } } } diff --git a/mainExample.wpgm b/mainExample.wpgm index a3f880f..9c68c85 100644 --- a/mainExample.wpgm +++ b/mainExample.wpgm @@ -14,7 +14,6 @@ program BadIceCreamGame { game.height(18) game.width(18) //Inicio menu - //menuPersonaje.cargar() new MenuPersonaje().cargar() //inicio game.start() @@ -28,8 +27,7 @@ program BadIceCreamGame { if(sincronizadorDePantallas.habilitar()){ const nuevaFruta = interactuador.obtenerPrimerElemento("r"," sobre una fruta para recolectarla") if(nuevaFruta.esFruta()){ - //jugador.recolectar(nuevaFruta) - game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head().recolectar(nuevaFruta) + atajos.jugador().recolectar(nuevaFruta) points.sumarFrutas() } if(points.frutasObtenidas() == 10 || points.frutasObtenidas() == 20){ @@ -37,6 +35,7 @@ program BadIceCreamGame { } if(points.frutasObtenidas() == 30){ sincronizadorDePantallas.cambiarPantalla("ganador") + atajos.jugador().sonido_off() //const menuGanaste = new MenuGanaste() //menuGanaste.cargar() new MenuGanaste().cargar() @@ -45,14 +44,15 @@ program BadIceCreamGame { }) - keyboard.e().onPressDo({if(sincronizadorDePantallas.habilitar()) {game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head().atacarDerecha()}}) - keyboard.q().onPressDo({if(sincronizadorDePantallas.habilitar()) {game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head().atacarIzquierda()}}) + keyboard.e().onPressDo({if(sincronizadorDePantallas.habilitar()) {atajos.jugador().atacarDerecha()}}) + keyboard.q().onPressDo({if(sincronizadorDePantallas.habilitar()) {atajos.jugador().atacarIzquierda()}}) // Si tocas shift se gana el juego automaticamente. Asi cuando probamos no tenemos que jugarlo completo. Despues esto se saca. keyboard.shift().onPressDo({ - if(sincronizadorDePantallas.habilitar()){ + if(sincronizadorDePantallas.habilitar()){ sincronizadorDePantallas.cambiarPantalla("ganador") + atajos.jugador().sonido_off() /*const menuGanaste = new MenuGanaste() menuGanaste.cargar()})*/ new MenuGanaste().cargar() @@ -64,9 +64,9 @@ program BadIceCreamGame { object interactuador{ method obtenerPrimerElemento(key,accion){ - const colliders = game.colliders(game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head()) + const colliders = game.colliders(atajos.jugador()) if (colliders.isEmpty()) - throw new DomainException(message = "Apreta "+ key + accion, source = game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head()) + throw new DomainException(message = "Apreta "+ key + accion, source = atajos.jugador()) return colliders.head() } } \ No newline at end of file diff --git a/menus.wlk b/menus.wlk index 9959ab2..d129c45 100644 --- a/menus.wlk +++ b/menus.wlk @@ -4,6 +4,8 @@ import wollok.game.* import jugador.* +import musica.* + import muros.* import enemigos.* @@ -47,24 +49,29 @@ class MenuPersonaje inherits Menus(add_1 = menuPersonajes, /* add_2 = marcoDeSel if(marcoDeSeleccion.position().x() == 2){ //elementos del helado //jugador.valor("helado.png") datosJugador.imagen("helado.png") + musica.cancion(game.sound("Flow Hero.mp3")) fondoJuego.valor("f_slime.png") visual.valor("b_fiesta.png") spawn.puntos(["bananas.png", "uva.png", "sandia.png"]) //Rompe encapsulamiento? } else if(marcoDeSeleccion.position().x() == 7){ //elementos del pajarito //jugador.valor("piopio.png") datosJugador.imagen("piopio.png") + musica.cancion(game.sound("Flow Hero.mp3")) fondoJuego.valor("f_pio.png") visual.valor("b_pio.png") spawn.puntos(["archaic coin.png", "circus coin.png", "lunaver coin.png"]) } else { //elementos de Goku //jugador.valor("goku.png") datosJugador.imagen("goku.png") + musica.cancion(game.sound("Super Survivor.mp3")) fondoJuego.valor("f_pasto.png") visual.valor("b_pasto.png") spawn.puntos(["semilla.png", "capsula.png", "comida.png"]) } game.removeVisual(menuPersonajes) game.removeVisual(marcoDeSeleccion) + musica.sonido_on() + musica.sonido_pause() const menuNivel = new MenuNivel() menuNivel.cargar() } @@ -95,13 +102,15 @@ class MenuNivel inherits Menus(add_1 = menuNiveles,/* add_2 = seleccionNivel,*/ if(sincronizadorDePantallas.pantallaActual() == tipoDeMenu){ sincronizadorDePantallas.cambiarPantalla("jugar") if(moverA.position() == game.at(1,11)){ //Seleccionado nivel 1 - escenario.generarLista(0) + //escenario.generarLista(0) + escenario.nivelActual(0) } else if(moverA.position() == game.at(3,11)){ //Seleccionado nivel 2 - escenario.generarLista(1) + //escenario.generarLista(1) + escenario.nivelActual(1) } game.removeVisual(menuNiveles) game.removeVisual(moverA) - points.reset() + //points.reset() juego.jugar() } }) @@ -112,7 +121,7 @@ class MenuGanaste inherits Menus(add_1 = ganaste, /*add_2 = seleccionGanaste,*/ override method cargar(){ super() //game.removeVisual(jugador) - //game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head().eliminate() + //atajos.jugador().eliminate() lineaEnemiga.enemigo().limpiarEnemigos() game.removeVisual(fondoJuego) game.removeVisual(points) @@ -135,24 +144,28 @@ class MenuGanaste inherits Menus(add_1 = ganaste, /*add_2 = seleccionGanaste,*/ }) } } -class MenuPerdiste inherits Menus(add_1 = perdiste, /*add_2 = seleccionGanaste,*/ moverA = new SeleccionGanaste(), cantidadDeIncrementoParaPosiciones = 4, equisMax = 10, equisMin = 6, yeMax = 7, yeMin = 7, tipoDeMenu = "perdedor"){ +class MenuPerdiste inherits Menus(add_1 = perdiste, /*add_2 = seleccionGanaste,*/ moverA = new SeleccionPerdiste(), cantidadDeIncrementoParaPosiciones = 4, equisMax = 10, equisMin = 6, yeMax = 6, yeMin = 6, tipoDeMenu = "perdedor"){ override method cargar(){ super() //game.removeVisual(jugador) - //game.allVisuals().filter({objeto => objeto.image() == datosJugador.imagen()}).head().eliminate() + //atajos.jugador().eliminate() lineaEnemiga.enemigo().limpiarEnemigos() game.removeVisual(fondoJuego) game.removeVisual(points) escenario.limpiarEscenario() keyboard.enter().onPressDo({ if(sincronizadorDePantallas.pantallaActual() == tipoDeMenu){ + //escenario.generarLista(escenario.nivelActual()) game.removeVisual(moverA) game.removeVisual(perdiste) - if (moverA.position() == game.at(6, 5)) { + if (moverA.position() == game.at(6, 6)) { + //points.reset() sincronizadorDePantallas.cambiarPantalla("jugar") juego.jugar() + //sincronizadorDePantallas.cambiarPantalla("niveles") + //new MenuNivel().cargar() } - if (moverA.position() == game.at(10, 5)){ + if (moverA.position() == game.at(10, 6)){ game.addVisual(finDelJuego) game.stop() } @@ -165,6 +178,8 @@ object juego{ method jugar(){ //DIBUJO DE LOS ELEMENTOS DEL MUNDO //dibujar fondo + points.reset() + escenario.generarLista(escenario.nivelActual()) game.addVisual(fondoJuego) //dibujar frutas spawn.dibujarFrutas() @@ -179,6 +194,7 @@ object juego{ const jugador = new Jugador() jugador.valor(datosJugador.imagen()) jugador.posicionate() + musica.sonido_continue() //game.addVisualCharacter(jugador) muros.crearBordeInferior() //dibujar puntos diff --git a/muros.wlk b/muros.wlk index 2ee1fd0..57f7058 100644 --- a/muros.wlk +++ b/muros.wlk @@ -43,6 +43,7 @@ object muros{ }//4.times({unValor => 5.times(action)}) object escenario{ + var property nivelActual = null const niveles = [ //Nivel 1 [game.at(2,15), game.at(3,15), game.at(4,15), game.at(4,14), game.at(2,14), game.at(4,13), game.at(2,13), game.at(2,12), game.at(4,12), //ojo I diff --git a/musica.wlk b/musica.wlk new file mode 100644 index 0000000..cf1f1d9 --- /dev/null +++ b/musica.wlk @@ -0,0 +1,20 @@ +object musica{ + var property cancion = null + + method sonido_on(){ + self.cancion().volume(0.03) + self.cancion().play() + } + + method sonido_off() { + self.cancion().stop() + } + + method sonido_pause() { + self.cancion().pause() + } + + method sonido_continue() { + self.cancion().resume() + } +} \ No newline at end of file