diff --git a/administradorDeEnemigos.wlk b/administradorDeEnemigos.wlk index 4531ed3..cb57b57 100644 --- a/administradorDeEnemigos.wlk +++ b/administradorDeEnemigos.wlk @@ -12,12 +12,12 @@ object administradorDeEnemigos { // Propiedades var nombreEnemigo = 10000 var enemigos = #{} - + var property administradorUtilizado=administradorDeOleadas // Métodos de Consulta method enemigos() = enemigos method columnaOcupada() = enemigos.filter({ enemigo => enemigo.position().x() == 14 }).size() == 5 // Verifica si la columna de posición x=14 está ocupada por 5 enemigos method nombre() = nombreEnemigo - method pocosEnemigosEnPantalla() = administradorDeOleadas.enemigosVivos() < maxEnemigosEnPantalla + method pocosEnemigosEnPantalla() = administradorUtilizado.enemigosVivos() < maxEnemigosEnPantalla // Genera un nuevo nombre para los enemigos method sumarEnemigo() { nombreEnemigo += 1 } @@ -35,7 +35,7 @@ object administradorDeEnemigos { enemigos.add(nombreParaEnemigo) /* Añade el nuevo enemigo a la colección de enemigos activos */ self.sumarEnemigo() /* Incrementa el contador de enemigos en el administrador */ - administradorDeOleadas.sumarEnemigo() /* Notifica al administrador de oleadas */ + administradorUtilizado.sumarEnemigo() /* Notifica al administrador de oleadas */ return game.addVisual(nombreParaEnemigo) /* Muestra al enemigo en el juego */ } else { @@ -46,7 +46,7 @@ object administradorDeEnemigos { // Elimina un enemigo específico de la colección de enemigos activos method eliminarEnemigo(enemigo) { - administradorDeOleadas.reducirEnemigo() + administradorUtilizado.reducirEnemigo() enemigos.remove(enemigo) } diff --git a/administradorDeJuego.wlk b/administradorDeJuego.wlk index a434f40..d9acd4e 100644 --- a/administradorDeJuego.wlk +++ b/administradorDeJuego.wlk @@ -1,3 +1,4 @@ +import magos.* import administradorDeOleadas.* import adminProyectiles.* import administradorDeMagos.* @@ -10,6 +11,8 @@ import puntaje.* import pala.* import casa.casa import proyectil.* +import administradorDeNiveles.* + // ======================================= // Administrador de Juego: Control central del juego, reseteo y fin del juego // ======================================= @@ -169,7 +172,7 @@ object configuracion { game.addVisual(cursor) game.addVisual(menu) game.addVisual(puntaje) - game.addVisual(administradorDeOleadas) + game.addVisual(casa) menu.accion() cursor.accion() @@ -206,7 +209,7 @@ object configuracion { // Método para programar eventos de actualización periódicos (ticks) method crearTicks() { - game.schedule(4000, { administradorDeOleadas.iniciarOleada() }) // Inicia la primera oleada tras 4 segundos + //game.schedule(4000, { administradorDeOleadas.iniciarOleada() }) // Inicia la primera oleada tras 4 segundos self.iniciarTicks() } @@ -242,20 +245,22 @@ object configuracion { object menuInicial{ - var imagen="MenuInicial.png" + var property imagen="MenuInicial.png" method position()=new MutablePosition(x=0,y=0) method image() = imagen var botonSeleccionado = 0 - var property botones=[botonDeInicio,botonMutearMusica] + var property botones=[botonDeInicio,botonNiveles,botonMutearMusica] method iniciarMenu(){ + botonSeleccionado=0 botones.forEach({boton=>game.addVisual(boton)}) } method finalizarMenu(){ - botones.forEach({boton=>game.removeVisual(boton)}) + self.quitarBotones() administradorDeJuego.usuarioEnMenu(false) game.removeVisual(self) } + method quitarBotones(){botones.forEach({boton=>game.removeVisual(boton)})} method moverseEntreBotones(){ keyboard.right().onPressDo({ if(administradorDeJuego.usuarioEnMenu() && botonSeleccionadonivelAResetear.reset()}) + numNivel = 1 + } + method recibeDanioMago(danio){} + method frenarEnemigo()= true +} + +class Nivel { + const property enemigos + var property cantidadEnemigos + const property tiempoSpawn + var property enemigosRestantes = cantidadEnemigos + var property enemigosGenerados = 0 + + method inicioOleada() = game.sound("m.iOleada.mp3") + method finOleada() = game.sound("m.fOleada.mp3") + + method enemigosVivos() = enemigosGenerados - (cantidadEnemigos - enemigosRestantes) + // Verifica si la oleada está en ejecución + method ejecutando() = cantidadEnemigos > enemigosGenerados && enemigosRestantes > 0 + + // Verifica si la oleada ha finalizado + method finalizo() = enemigosRestantes == 0 && enemigosGenerados == cantidadEnemigos + + method seGeneroEnemigo() {enemigosGenerados+=1} + + method seMurioEnemigo() {enemigosRestantes-=1} + + // Termina la oleada y configura la siguiente + method terminarOleada() { + self.finOleada().volume(0.1) + self.finOleada().play() + } + + method iniciarOleada(){ + self.inicioOleada().volume(0) + //self.inicioOleada().play() + enemigosRestantes = cantidadEnemigos + } + + + // Resetea la oleada a su configuración inicial + method reset() { + enemigosRestantes = cantidadEnemigos + enemigosGenerados = 0 + } +} + +const nivel1= new Nivel(enemigos=[slimeBasico],cantidadEnemigos=5,tiempoSpawn=4000) +const nivel2= new Nivel(enemigos=[slimeGuerrero,slimeGuerrero,slimeBasico],cantidadEnemigos=10,tiempoSpawn=4000) \ No newline at end of file diff --git a/assets/MenuInicialVacio.png b/assets/MenuInicialVacio.png new file mode 100644 index 0000000..a1ed8e1 Binary files /dev/null and b/assets/MenuInicialVacio.png differ diff --git a/assets/botonNiveles.png b/assets/botonNiveles.png new file mode 100644 index 0000000..8abfe92 Binary files /dev/null and b/assets/botonNiveles.png differ diff --git a/assets/botonNivelesSeleccionado.png b/assets/botonNivelesSeleccionado.png new file mode 100644 index 0000000..f9c381a Binary files /dev/null and b/assets/botonNivelesSeleccionado.png differ