From 9e37d2b706aa75225034f1bdf92aa3464edd4f4c Mon Sep 17 00:00:00 2001 From: Nico_desktop Date: Wed, 4 Dec 2024 23:30:17 -0300 Subject: [PATCH] Mejorando slime agil --- administradorDeEnemigos.wlk | 18 +++++++++++++++--- administradorDeOleadas.wlk | 1 - magos.wlk | 8 ++++---- slime.wlk | 24 +++++++----------------- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/administradorDeEnemigos.wlk b/administradorDeEnemigos.wlk index 9f45a3a..7d00de2 100644 --- a/administradorDeEnemigos.wlk +++ b/administradorDeEnemigos.wlk @@ -35,10 +35,10 @@ object administradorDeEnemigos { nombreParaEnemigo = new Slime(position = posicionTemporal, tipo = tipo) enemigos.add(nombreParaEnemigo) /* Añade el nuevo enemigo a la colección de enemigos activos */ - + y.toString().printString() self.sumarEnemigo() /* Incrementa el contador de enemigos en el administrador */ administradorDeOleadas.sumarEnemigo() /* Notifica al administrador de oleadas */ - cantDeEnemigosPorLinea.get(y).aumentarCant() + self.aumentarLinea(y) return game.addVisual(nombreParaEnemigo) /* Muestra al enemigo en el juego */ } else { return /* No genera el enemigo si la posición está ocupada */ @@ -49,7 +49,7 @@ object administradorDeEnemigos { // Elimina un enemigo específico de la colección de enemigos activos method eliminarEnemigo(enemigo) { const y= enemigo.position().y() - cantDeEnemigosPorLinea.get(y).restarCantidad() + self.decrementarLinea(y) administradorDeOleadas.reducirEnemigo() enemigos.remove(enemigo) } @@ -59,6 +59,7 @@ object administradorDeEnemigos { enemigos.forEach({ enemigo => enemigo.eliminar() }) nombreEnemigo = 0 enemigos = [] + cantDeEnemigosPorLinea.forEach({linea => linea.cantEnemigos(0)}) } // Verifica si los enemigos están muertos @@ -74,6 +75,13 @@ object administradorDeEnemigos { enemigos.forEach({ enemigo => enemigo.cambiarFrame()}) } + method aumentarLinea(linea){ + cantDeEnemigosPorLinea.get(linea).aumentarCant() + } + + method decrementarLinea(linea){ + cantDeEnemigosPorLinea.get(linea).restarCantidad() + } method hayEnemigoFila(numeroFila) = cantDeEnemigosPorLinea.get(numeroFila).cantEnemigos() > 0 @@ -82,6 +90,10 @@ object administradorDeEnemigos { class Linea{ var property cantEnemigos =0 + method reset(){ + cantEnemigos = 0 + } + method aumentarCant() { cantEnemigos+=1 } diff --git a/administradorDeOleadas.wlk b/administradorDeOleadas.wlk index 368b848..4e91ae0 100644 --- a/administradorDeOleadas.wlk +++ b/administradorDeOleadas.wlk @@ -158,7 +158,6 @@ class Nivel{ } method resetearCantEnemigosComoAlInicio(){} } - object nivelFinal inherits Nivel(oleadas=[[slimeBasico,slimeBasico,slimeGuerrero,slimeDorado], [slimeBasico,slimeGuerrero, slimeBomba,slimeGuerrero], [slimeAgil,slimeGuerrero,slimeLadron,slimeNinja], diff --git a/magos.wlk b/magos.wlk index 9f1d124..60c94eb 100644 --- a/magos.wlk +++ b/magos.wlk @@ -101,18 +101,17 @@ class MagoStop inherits MagoQueDispara(vida = 100, imagen = "magoStop.png", proy class MagoPiedra inherits Mago(vida = 400, imagen = "magoPiedra.png") {} // Mago Explosivo -class MagoExplosivo inherits Mago(vida = 10, imagen = "magoExplosivo.png") { +class MagoExplosivo inherits Mago(vida = 1000, imagen = "magoExplosivo.png") { const explosion = game.sound("m.explosion.mp3") override method matar() { - if (self.estaMuerto()) { + self.vida(0) const posicionEnFrente = new MutablePosition(x = position.x() + 1, y = position.y()) const enemigoEnFrente = game.getObjectsIn(posicionEnFrente) explosion.volume(0.1) explosion.play() enemigoEnFrente.forEach({ objeto => objeto.matarSlime() }) //Map devuelve lista, usar forEach self.eliminar() - } } } @@ -148,7 +147,8 @@ class MagoTienda{ puntaje.restarPuntos(costo)//Idem en todo mago const mago = self.magoQueGenera(posicionMago) return mago - } + } + method recibeDanioMago(danio,enemigo){} method frenarEnemigo()= true // method efectoDeInvocacion(){} //esto estaba porque antes los magos irlandeses interactuaban directamente con el contador de puntos diff --git a/slime.wlk b/slime.wlk index 7b80566..6a88f06 100644 --- a/slime.wlk +++ b/slime.wlk @@ -196,24 +196,14 @@ object slimeBomba inherits Tipo(danio=250, vida=180, imagen="s.slimeMedioOriente object slimeAgil inherits Tipo(danio=50, vida=200, imagen="s.slimeAgil_01.png",imagenesNormales=["s.slimeAgil_01.png","s.slimeAgil_02.png","s.slimeAgil_03.png"],imagenesRecibeDanio=["s.slimeAgilDanio_01.png","s.slimeAgilDanio_02.png","s.slimeAgilDanio_03.png"]){ - override method accionAlRecibirDanio() = {slime=> - if(slime.vida()<=self.vida()*0.5){ - self.cambiarDeCarril().apply(slime) - } - } + override method accionAlRecibirDanio() = {slime=>self.cambiarDeCarril().apply(slime)} method cambiarDeCarril()={slime=> - const posicionArriba= new MutablePosition(x = slime.position().x(), y = slime.position().y()+1) - const posicionAbajo= new MutablePosition(x = slime.position().x(), y = slime.position().y()-1) - const celA=game.getObjectsIn(posicionArriba) - const celAB=game.getObjectsIn(posicionAbajo) - const celdaArriba= [celA,posicionArriba] - const celdaAbajo= [celAB,posicionAbajo] - const posiciones = [celdaArriba,celdaAbajo] - posiciones.any({ celda => celda.get(0).all({objeto=>!objeto.frenarEnemigo()}) && self.moverAcarrilAledanio(slime, celda.get(1))}) - } - method moverAcarrilAledanio(slime,carril){ - if(carril.y()<5 && carril.y()>=0 ){ - slime.position(carril) + const newPosicion= new MutablePosition(x = slime.position().x(), y = (slime.position().y()+((-1).randomUpTo(2))).max(0).min(4)) // + const celdavacia=game.getObjectsIn(newPosicion).isEmpty() + if(celdavacia){ + administradorDeEnemigos.decrementarLinea(slime.position().y()) + slime.position(newPosicion) + administradorDeEnemigos.aumentarLinea(newPosicion.y()) } } } \ No newline at end of file