Skip to content

Commit

Permalink
ahora los niveles son ejecutados por el
Browse files Browse the repository at this point in the history
administradorDeOleadas pero falta solucionar problemas con el reinicio y vuelta al menu
  • Loading branch information
NahuelMarek committed Nov 27, 2024
1 parent 0b0099d commit d187df3
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 76 deletions.
16 changes: 9 additions & 7 deletions administradorDeJuego.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ object botonDeInicio{
configuracion.iniciarTicks()
administradorDeEnemigos.administradorUtilizado(administradorDeOleadas)
administradorDeJuego.administradorUtilizado(administradorDeOleadas)
administradorDeOleadas.modoNiveles(false)
game.schedule(4000, { administradorDeOleadas.iniciarOleada() })
game.addVisual(administradorDeOleadas)
menuInicial.finalizarMenu()
Expand Down Expand Up @@ -413,12 +414,13 @@ class BotonDeNivel{
method accion(){
configuracion.agregarVisuals()
configuracion.crearTicks()
administradorDeNiveles.numNivel(numNivel)
administradorDeNiveles.enemigosRestantes(nivel.cantidadEnemigos())
administradorDeEnemigos.administradorUtilizado(administradorDeNiveles)
administradorDeJuego.administradorUtilizado(administradorDeNiveles)
administradorDeOleadas.numNivel(numNivel)
administradorDeEnemigos.administradorUtilizado(administradorDeOleadas)
administradorDeJuego.administradorUtilizado(administradorDeOleadas)
administradorDeOleadas.modoNiveles(true)
administradorDeOleadas.actualizarOleada()
administradorDeJuego.administradorUtilizado().oleadaInicial().start()
game.addVisual(administradorDeNiveles)
game.addVisual(administradorDeOleadas)
menuInicial.finalizarMenu()
}

Expand All @@ -437,6 +439,6 @@ class BotonDeNivel{
}

const botonNivel1= new BotonDeNivel(imagenSinSeleccionar="botonNivel1.png", imagenDeSeleccion="botonNivel1Seleccionado.png",
posicion= new MutablePosition(x=0,y=5), numNivel=1,nivel=nivel1)
posicion= new MutablePosition(x=0,y=5), numNivel=1,nivel=nivelUno)
const botonNivel2= new BotonDeNivel(imagenSinSeleccionar="botonNivel2.png", imagenDeSeleccion="botonNivel2Seleccionado.png",
posicion= new MutablePosition(x=1,y=5), numNivel=2,nivel=nivel2)
posicion= new MutablePosition(x=1,y=5), numNivel=2,nivel=nivelDos)
67 changes: 3 additions & 64 deletions administradorDeNiveles.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -7,70 +7,6 @@ import administradorDeJuego.*
// ===============================
// Administrador de Oleadas: Control de las oleadas de enemigos
// ===============================
object administradorDeNiveles {
const niveles = botonNiveles.niveles()
var property numNivel = 1
method nivel() = niveles.get(numNivel-1).nivel()
var property enemigosRestantes = niveles.get(numNivel-1).nivel().cantidadEnemigos()

// Métodos de visualización y sonido
method position() = new MutablePosition(x = 9, y = 5)
method text() = "Nivel: " + numNivel.toString() + " " + "Slimes Restantes: " + enemigosRestantes.toString()
method textColor() = "#FA0770"
method enemigosVivos() = self.nivel().enemigosVivos()
const property oleadaInicial = game.tick(4000, {self.iniciarOleada() self.frenarTickInicial()},false)
method frenarTickInicial() { oleadaInicial.stop()}
// Inicia la oleada y gestiona enemigos
const tickParaGenerarEnemigos= game.tick(self.nivel().tiempoSpawn(),
{self.spawnearOleada()}
,false)
method iniciarOleada() {
self.nivel().iniciarOleada()
tickParaGenerarEnemigos.start()
}
method spawnearOleada(){ if (not administradorDeJuego.pausado()){
if (self.nivel().ejecutando()) {
administradorDeEnemigos.generarEnemigo(self.nivel().enemigos().anyOne())
} else if(self.nivel().finalizo()){
self.siguienteOleada()
tickParaGenerarEnemigos.stop()
}}}
// Pasa a la siguiente oleada
method siguienteOleada() {
// por ahora funciona , si intento mejorar la logica se rompe

self.nivel().terminarOleada()
if (numNivel == niveles.size()){
pantalla.estado(victoria) game.addVisual(pantalla)
return}
else {numNivel += 1
enemigosRestantes = niveles.get(numNivel-1).nivel().cantidadEnemigos()
tickParaGenerarEnemigos.interval(self.nivel().tiempoSpawn())
oleadaInicial.interval(10000)
oleadaInicial.start()
/* game.schedule(10000, { self.iniciarOleada()} )*/}
}

// Gestión de contadores de enemigos
method reducirEnemigo() { self.nivel().seMurioEnemigo()
enemigosRestantes-=1}
method sumarEnemigo() { self.nivel().seGeneroEnemigo()}


// Resetea el administrador de oleadas
method reset() {

niveles.forEach({nivelAResetear=>nivelAResetear.nivel().reset()})
numNivel = 1
tickParaGenerarEnemigos.stop()
oleadaInicial.interval(4000)
enemigosRestantes = niveles.get(numNivel-1).nivel().cantidadEnemigos()
//game.schedule(4000, { self.iniciarOleada() })
self.frenarTickInicial()
}
method recibeDanioMago(danio){}
method frenarEnemigo()= true
}

class Nivel {
const property enemigos
Expand Down Expand Up @@ -113,5 +49,8 @@ class Nivel {
}
}




const nivel1= new Nivel(enemigos=[slimeBasico],cantidadEnemigos=2,tiempoSpawn=4000)
const nivel2= new Nivel(enemigos=[slimeGuerrero,slimeGuerrero,slimeBasico],cantidadEnemigos=4,tiempoSpawn=4000)
102 changes: 98 additions & 4 deletions administradorDeOleadas.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ import administradorDeJuego.*
object administradorDeOleadas {
const numOleadaFinal = 3
const posiblesTipos = [slimeBasico, slimeBasico, slimeGuerrero, slimeNinja, slimeBlessed,slimeLadron]

var oleadaActual = oleadaNormal
var numeroOleada = 1
const property oleadaInicial = game.tick(4000, {self.iniciarOleada() self.frenarTickInicial()},false)
method frenarTickInicial()=oleadaInicial.stop()
var property modoNiveles = false
//cosas para funcionamiento con niveles
const niveles = botonNiveles.niveles()
var property numNivel = 1
method nivel() = niveles.get(numNivel-1).nivel()
method actualizarOleada(){oleadaActual= self.nivel().oleadaActual()}
// Métodos de visualización y sonido
method position() = new MutablePosition(x = 9, y = 5)
method text() = "Oleada: " + numeroOleada.toString() + " " + "Slimes Restantes: " + oleadaActual.enemigosRestantes().toString()
Expand All @@ -26,8 +31,13 @@ object administradorDeOleadas {
if (oleadaActual.ejecutando()) {
administradorDeEnemigos.generarEnemigo(oleadaActual.enemigos().anyOne())
} else if(oleadaActual.finalizo()){
self.siguienteOleada()
if(modoNiveles){
self.siguienteOleadaNivel()
}
else{
self.siguienteOleada()}
tickParaGenerarEnemigos.stop()

}
} }
// Inicia la oleada y gestiona enemigos
Expand All @@ -49,9 +59,26 @@ object administradorDeOleadas {
oleadaInicial.start()
/* game.schedule(10000, { self.iniciarOleada() }) */
}

}

method siguienteOleadaNivel(){
if(self.nivel().noTerminoNivel()){
oleadaActual.terminarOleada()
self.nivel().siguienteOleada()
oleadaActual=self.nivel().oleadaActual()
oleadaInicial.start()
}
else{
self.nivel().resetearOleadas()
numNivel+=1
if(numNivel>niveles.size()){
pantalla.nuevoEstado(victoria)
administradorDeJuego.terminarJuego()
}
else{
oleadaActual=self.nivel().oleadaActual()
oleadaInicial.start()}
}
}
// Gestión de contadores de enemigos
method reducirEnemigo() { oleadaActual.seMurioEnemigo()}
method sumarEnemigo() { oleadaActual.seGeneroEnemigo() }
Expand All @@ -64,7 +91,9 @@ object administradorDeOleadas {
game.removeTickEvent("gestionar oleada")
oleadaNormal.reset()
oleadaFinal.reset()
niveles.forEach({nivel=>nivel.resetearOleadas()})
numeroOleada = 1
numNivel=1
oleadaActual = oleadaNormal
self.frenarTickInicial()
oleadaInicial.interval(4000)
Expand Down Expand Up @@ -186,3 +215,68 @@ object oleadaFinal {
enemigosRestantes = cantidadEnemigos
}
}

class OleadaDeNivel{
const property enemigos
const property cantidadEnemigos
var property enemigosRestantes = cantidadEnemigos
var property enemigosGenerados = 0
const property tiempoSpawn

method inicioOleada() = game.sound("m.iOleada.mp3")
method finOleada() = game.sound("m.fOleada.mp3")
// Verifica si la oleada final está en ejecución
method ejecutando() = cantidadEnemigos > enemigosGenerados && enemigosRestantes > 0

method seGeneroEnemigo() {enemigosGenerados+=1}

method seMurioEnemigo() {enemigosRestantes-=1}

method enemigosVivos() = enemigosGenerados - (cantidadEnemigos - enemigosRestantes)

// Termina la oleada final y concluye el juego
method terminarOleada() {
self.finOleada().volume(0.1)
self.finOleada().play()

}

method iniciarOleada(){
self.inicioOleada().volume(0)
//self.inicioOleada().play()
enemigosRestantes = cantidadEnemigos
}



method cargarSlimesRestantes () {enemigosRestantes = cantidadEnemigos }
// Verifica si la oleada final ha finalizado
method finalizo() = enemigosRestantes == 0 && enemigosGenerados == cantidadEnemigos

// Resetea la oleada final
method reset() {
enemigosGenerados = 0
enemigosRestantes = cantidadEnemigos
}

}

class Nivel{
const oleadas
var numOleada=0
method oleadaActual()= if (numOleada<oleadas.size())oleadas.get(numOleada) else return oleadaNormal
method noTerminoNivel()=numOleada!=oleadas.size()-1
method siguienteOleada(){numOleada+=1}
method resetearOleadas(){
oleadas.forEach({oleada=> oleada.reset()})
numOleada=0
}
}

const oleadaUnoUno = new OleadaDeNivel(enemigos=[slimeBasico,slimeGuerrero,slimeGuerrero],tiempoSpawn=4000,cantidadEnemigos=5)
const oleadaUnoDos = new OleadaDeNivel(enemigos=[slimeLadron,slimeBasico],tiempoSpawn=4000,cantidadEnemigos=6)
const oleadaDosUno = new OleadaDeNivel(enemigos=[slimeBasico,slimeDorado],tiempoSpawn=4000,cantidadEnemigos=3)
const oleadaDosDos = new OleadaDeNivel(enemigos=[slimeAgil,slimeBasico,slimeBasico],tiempoSpawn=4000,cantidadEnemigos=4)

const nivelUno=new Nivel(oleadas=[oleadaUnoUno,oleadaUnoDos])
const nivelDos=new Nivel(oleadas=[oleadaDosUno,oleadaDosDos])
2 changes: 1 addition & 1 deletion menu.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ object menu {
}

// Movimiento del menú
method moverseDerecha() = if (self.position().x() < 5) position.goRight(1)
method moverseDerecha() = if (self.position().x() < 6) position.goRight(1)
method moverseIzquierda() = if (self.position().x() > 0) position.goLeft(1)

// Detecta si se está seleccionando pala
Expand Down

0 comments on commit d187df3

Please sign in to comment.