From 453ca6551f274387bc5d72ccbf68b2facaea5d98 Mon Sep 17 00:00:00 2001 From: tobias-albornoz Date: Fri, 29 Nov 2024 00:17:52 -0300 Subject: [PATCH] se refacoriza el codigo en masterBatalla --- src/ataques.wlk | 2 +- src/masterBatalla.wlk | 218 ++++++++++++++++++++---------------------- 2 files changed, 107 insertions(+), 113 deletions(-) diff --git a/src/ataques.wlk b/src/ataques.wlk index cd1abe1d..e8f598c5 100644 --- a/src/ataques.wlk +++ b/src/ataques.wlk @@ -103,7 +103,7 @@ object veneno inherits Ataque(nombre = "Veneno", danioBase = 12, nombreImagen = object rayoSolar inherits Ataque(nombre = "Rayo Solar", danioBase = 25, nombreImagen = "RayoSolar.png") {} object latigoCepa inherits Ataque(nombre = "Látigo Cepa", danioBase = 14, nombreImagen = "LatigoCepa.png") {} -object teclasAtaques { +object teclas { const property position = game.at(54, 5) method image() = "teclasAtaques.png" } \ No newline at end of file diff --git a/src/masterBatalla.wlk b/src/masterBatalla.wlk index a5a33f9c..32c31e3a 100644 --- a/src/masterBatalla.wlk +++ b/src/masterBatalla.wlk @@ -9,33 +9,24 @@ class ControladorDeBatalla { var indexPokemonJugador = 0 var indexPokemonComputadora = 0 - // Define la música de fondo const musicaFondo = game.sound("Pokemon_batalla_sound.mp3") // Método para iniciar el juego y configurar todo method iniciar() { - - // Configurar la música de fondo musicaFondo.shouldLoop(true) musicaFondo.play() equipoComputadora.forEach({ pokemon => pokemon.cambiarSide() }) game.addVisual(self.pokemonActivoJugador()) + game.addVisual(vidaJugador) + game.addVisual(self.pokemonActivoComputadora()) - self.actualizarImagenVidaJugador() - self.actualizarImagenVidaComputadora() + game.addVisual(vidaComputadora) - self.agregarTeclasAtaques() - game.addVisual(teclasAtaques) self.configurarTeclasAtaque() } - - - method finalizarBatalla() { - - } // Devuelve el Pokémon activo del equipo del jugador method pokemonActivoJugador() = equipoJugador.get(indexPokemonJugador) @@ -43,81 +34,34 @@ class ControladorDeBatalla { // Devuelve el Pokémon activo del equipo de la computadora method pokemonActivoComputadora() = equipoComputadora.get(indexPokemonComputadora) - method configurarTeclasAtaque() { - keyboard.a().onPressDo({ self.ejecutarAtaqueJugador(0) }) - keyboard.s().onPressDo({ self.ejecutarAtaqueJugador(1) }) - keyboard.d().onPressDo({ self.ejecutarAtaqueJugador(2) }) - keyboard.f().onPressDo({ self.ejecutarAtaqueJugador(3) }) - } - - method agregarTeclasAtaques() { - const ataques = self.pokemonActivoJugador().ataques() - ataques.forEach({ ataque => game.addVisual(ataque) }) - ataques.forEach({ ataque => self.enviarPosicion(ataques, ataque) }) - } - - method enviarPosicion(ataques, ataque) { - const index = self.obtenerIndice(ataques, ataque) - if (index >= 0) { - ataque.cambiarPosicion(index) - } - } - - method obtenerIndice(array, valor) { - var indice = -1 - var i = 0 - array.forEach({ elemento => - if (elemento == valor) { - indice = i - } else{ - i += 1 - } - }) - return indice - } - - // Ejecuta el ataque elegido por el jugador method ejecutarAtaqueJugador(indiceAtaque) { const pokemonJugador = self.pokemonActivoJugador() const pokemonComputadora = self.pokemonActivoComputadora() - - if (pokemonJugador.vida() > 0 && indiceAtaque < pokemonJugador.ataques().size()) { + if (pokemonJugador.vida() > 0) { const ataque = pokemonJugador.ataques().get(indiceAtaque) + ataque.ejecutar(pokemonJugador, pokemonComputadora) - const cuadroAtaque = object { - const property position = game.at(10, 35) - method image() = "cuadro" + ataque.nombreImagen() - } - game.addVisual(cuadroAtaque) - game.schedule(1500, { game.removeVisual(cuadroAtaque) }) + + cuadroJugador.setearNombre(ataque.nombreImagen()) + self.verificarEstado() - self.actualizarImagenVidaJugador() - self.actualizarImagenVidaComputadora() - game.schedule(2000, { self.turnoComputadora() }) - } else { - game.removeVisual(vidaJugador) - } + + game.schedule(1200, { self.turnoComputadora() }) + } } method turnoComputadora() { const pokemonComputadora = self.pokemonActivoComputadora() const pokemonJugador = self.pokemonActivoJugador() - if (pokemonComputadora.vida() > 0) { const ataque = pokemonComputadora.elegirAtaque(pokemonJugador) - const cuadroAtaque = object { - const property position = game.at(25, 35) - method image() = "cuadro" + ataque.nombreImagen() - } - game.addVisual(cuadroAtaque) - game.schedule(1500, { game.removeVisual(cuadroAtaque) }) + + cuadroComputadora.setearNombre(ataque.nombreImagen()) self.verificarEstado() - self.actualizarImagenVidaJugador() - self.actualizarImagenVidaComputadora() } } @@ -126,51 +70,51 @@ class ControladorDeBatalla { const pokemonJugador = self.pokemonActivoJugador() const pokemonComputadora = self.pokemonActivoComputadora() + // Verifica si el Pokémon del jugador ha sido derrotado if (pokemonJugador.vida() <= 0) { game.removeVisual(pokemonJugador) - game.removeVisual(vidaJugador) pokemonJugador.ataques().forEach({ ataque => game.removeVisual(ataque) }) + indexPokemonJugador += 1 - if (indexPokemonJugador < equipoJugador.size()) { + + if(indexPokemonJugador < equipoJugador.size()) { + self.agregarBotonesAtaques() game.addVisual(self.pokemonActivoJugador()) - self.agregarTeclasAtaques() + }else{ + self.terminarBatalla("lose") } } + // Verifica si el Pokémon de la computadora ha sido derrotado if (pokemonComputadora.vida() <= 0) { game.removeVisual(pokemonComputadora) - game.removeVisual(vidaComputadora) + indexPokemonComputadora += 1 - if (indexPokemonComputadora < equipoComputadora.size()) game.addVisual( - self.pokemonActivoComputadora() - ) + + if (indexPokemonComputadora < equipoComputadora.size()) { + game.addVisual(self.pokemonActivoComputadora()) + } else{ + pokemonJugador.ataques().forEach({ ataque => game.removeVisual(ataque) }) + self.terminarBatalla("win") + } } - if (self.equipoDerrotado()) { - // Desactivar teclas al finalizar la batalla + self.actualizarImagenJugador() + self.actualizarImagenComputadora() + + } + + method terminarBatalla(resultado) { + musicaFondo.stop() self.desactivarTeclas() - pokemonJugador.ataques().forEach({ ataque => game.removeVisual(ataque) }) - game.removeVisual(teclasAtaques) + game.removeVisual(teclas) + + visualFinal.setter(resultado) const winloseSound = game.sound("Win_sound.mp3") - - if (self.determinarGanador() == "Equipo Computadora") game.addVisual(lose) - if (self.determinarGanador() == "Equipo Jugador") game.addVisual(win) - winloseSound.play() - - // Detener la música de fondo - musicaFondo.stop() game.schedule(1500, { game.stop() }) - } - } - - method desactivarTeclas() { - keyboard.a().onPressDo({ }) - keyboard.s().onPressDo({ }) - keyboard.d().onPressDo({ }) - keyboard.f().onPressDo({ }) } // Verifica si alguno de los equipos ha sido derrotado @@ -179,29 +123,46 @@ class ControladorDeBatalla { // Determina el equipo ganador method determinarGanador() = if (indexPokemonJugador >= equipoJugador.size()) "Equipo Computadora" else "Equipo Jugador" - method actualizarImagenVidaJugador(){ + method actualizarImagenJugador(){ vidaJugador.actualizarImagen(self.pokemonActivoJugador().vida()) } - method actualizarImagenVidaComputadora() { + method actualizarImagenComputadora() { vidaComputadora.actualizarImagen(self.pokemonActivoComputadora().vida()) } -} -object win { - const position = game.at(35, 20) - - method position() = position + method agregarBotonesAtaques() { + const ataques = self.pokemonActivoJugador().ataques() + ataques.forEach({ ataque => game.addVisual(ataque) }) + ataques.forEach({ ataque => self.enviarPosicion(ataques, ataque) }) + } - method image() = "win.png" -} + method enviarPosicion(ataques, ataque) { + const index = self.obtenerIndice(ataques, ataque) + if (index >= 0) { + ataque.cambiarPosicion(index) + } + } -object lose { - const position = game.at(35, 20) - - method position() = position - - method image() = "lose.png" + const listTeclas = [keyboard.a(), keyboard.s(), keyboard.d(), keyboard.f()] + method desactivarTeclas() = listTeclas.forEach{ tecla => tecla.onPressDo{} } + method configurarTeclasAtaque() { + listTeclas.forEach{ tecla => tecla.onPressDo{ self.ejecutarAtaqueJugador(self.obtenerIndice(listTeclas, tecla)) } } + game.addVisual(teclas) + self.agregarBotonesAtaques() + } + + method obtenerIndice(array, valor) { + var indice = -1 + var i = 0 + array.forEach({ elemento => + if (elemento == valor) + indice = i + else + i += 1 + }) + return indice + } } class Vida{ @@ -217,9 +178,7 @@ class Vida{ method actualizarImagen(vidaPokemon) { const nuevaImagenVida = self.obtenerImagenVida(vidaPokemon) - game.removeVisual(self) self.setImage(nuevaImagenVida) - game.addVisual(self) } method obtenerImagenVida(vida) { @@ -235,3 +194,38 @@ object vidaJugador inherits Vida { object vidaComputadora inherits Vida{ override method position() = game.at(31, 21) } + +class Cuadro{ + var image = "" + + method position() + + method image() = image + + method setearNombre(nuevoNombre){ + image = "cuadro" + nuevoNombre + game.addVisual(self) + game.schedule(500, { game.removeVisual(self) }) + } +} + +object cuadroJugador inherits Cuadro { + override method position() = game.at(10, 35) +} + +object cuadroComputadora inherits Cuadro { + override method position() = game.at(25, 35) +} + + +object visualFinal { + var image = "" + method position() = game.at(35, 20) + + method image() = image + + method setter(resultado) { + image = resultado + ".png" + game.addVisual(self) + } +} \ No newline at end of file