Skip to content

Commit

Permalink
pequeños ajustes (faltaria probar bien)
Browse files Browse the repository at this point in the history
  • Loading branch information
NicolasSchkurko committed Dec 5, 2024
1 parent c982964 commit 26dd3b2
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 114 deletions.
12 changes: 6 additions & 6 deletions administradorDeEnemigos.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,26 @@ object administradorDeEnemigos {
const property cantDeEnemigosPorLinea= [linea1,linea2,linea3,linea4,linea5]
// 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() = cantDeEnemigosPorLinea.sum({linea => linea.cantEnemigos()}) < maxEnemigosEnPantalla

// Genera un nuevo nombre para los enemigos
method sumarEnemigo() { nombreEnemigo += 1 }

// Genera un nuevo enemigo del tipo especificado, si hay espacio en la columna
method generarEnemigo(tipo) {
if (/* not self.columnaOcupada() && */ self.pocosEnemigosEnPantalla()) {
const y = 0.randomUpTo(5).truncate(0)
if (self.pocosEnemigosEnPantalla()) {

const y = 0.randomUpTo(4.9999).truncate(0)

const posicionTemporal = new MutablePosition(x = 14, y=y)

var nombreParaEnemigo = self.nombre()

/* Solo genera el enemigo si la posición temporal está vacía */
if (game.getObjectsIn(posicionTemporal).isEmpty()) {

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 */
self.aumentarLinea(y)
Expand Down
6 changes: 3 additions & 3 deletions administradorDeJuego.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -197,16 +197,16 @@ object configuracion {
const tiemposProyectiles = 600
const tiempoDisparo = 3000
const tiempoDinero = 750
const tiempoMoverEnemigo = 1000
const tiempoMoverEnemigo = 960

//ticks que usa el juego
const tickParaMoverEnemigos = game.tick(tiempoMoverEnemigo,{administradorDeEnemigos.moverEnemigos()},false)
const tickParaAumentarDinero = game.tick(tiempoDinero, { puntaje.sumarPuntos() },false)
const tickParaDisparar= game.tick(tiempoDisparo, { administradorDeMagos.disparar()},false)
const tickParaMoverYColisionarDisparos= game.tick(tiemposProyectiles, { administradorDeProyectiles.moverProyectiles()
administradorDeProyectiles.impactarProyectiles() },false)
const tickParaCambiarFrames= game.tick((tiemposProyectiles/3)-5, {administradorDeProyectiles.cambiarFrame()},false)
const tickParaCambiarFramesEnemigos= game.tick((tiempoMoverEnemigo/3)-5, {administradorDeEnemigos.cambiarFrame()},false)
const tickParaCambiarFrames= game.tick((tiemposProyectiles/3), {administradorDeProyectiles.cambiarFrame()},false)
const tickParaCambiarFramesEnemigos= game.tick((tiempoMoverEnemigo/3), {administradorDeEnemigos.cambiarFrame()},false)

// El reproductor de música es constante; solo cambia el archivo de sonido
method iniciarMusica() {sonidoPartida.iniciarMusica()}
Expand Down
6 changes: 3 additions & 3 deletions casa.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ object casa {

method recibirDanio(fila) {
vida -= 1
administradorDeEnemigos.enemigos().filter(
{ enemigo => enemigo.position().y() == fila }
).forEach({ enemigo => enemigo.matarSlime() })
if (administradorDeEnemigos.hayEnemigoFila(fila)){
administradorDeEnemigos.enemigos().filter( { enemigo => enemigo.position().y() == fila } ).forEach({ enemigo => enemigo.matarSlime() })
}
// elimina enemigos de la misma fila
self.sonidoDanio().volume(0.3)
if (vida <= 0) {
Expand Down
213 changes: 111 additions & 102 deletions slime.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -16,51 +16,61 @@ class Slime {
var property enMovimiento = true // Indica si el slime puede moverse
var property vida = tipo.vida()
const property danio = tipo.danio()
var imagen = tipo.imagenesNormales().get(0)
var frame=0
var imagen = tipo.imagenesNormales().get(0)
var frame = 0

// Métodos de cambio de imagen
method cambiarFrame() {
imagen = tipo.imagenesNormales().get(frame)
if(frame<2) {frame+=1}
if (frame < 2) { frame += 1 }
}

// Métodos de visualización y estado
method frenarEnemigo() = true
method position() = position
method image() = imagen
method sePuedeSuperponer() = false
var accion=tipo.moverse()
method cambiarAccion(accionNueva){
accion=accionNueva
var accion = tipo.moverse()

method cambiarAccion(accionNueva) {
accion = accionNueva
}

// Movimiento del Slime
method movete() {imagen=tipo.imagenesNormales().get(0)
method movete() {
imagen = tipo.imagenesNormales().get(0)
self.estaMuerto()
frame=1
accion.apply(self)}
frame = 1
accion.apply(self)
}

// Lógica para frenar el movimiento
method meFreno(){
method meFreno() {
const posicionEnFrente = new MutablePosition(x = self.position().x() - 1, y = self.position().y())
const objetoEnCeldaEnFrente = game.getObjectsIn(posicionEnFrente)
objetoEnCeldaEnFrente.forEach({objeto => objeto.recibeDanioMago(danio,self)})
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio, self) })
}

method meFreno(estado) {self.enMovimiento(estado) return true}
method meFreno(estado) { self.enMovimiento(estado); return true }

// Métodos para recibir daño
method recibeDanioMago(_danio,enemigo){enemigo.cambiarAccion(enemigo.tipo().esperar()) return false}
method recibeDanioMago(_danio, enemigo) {
enemigo.cambiarAccion(enemigo.tipo().esperar())
return false
}

method recibeDanioEnemigo(_danio,proyectil) {
imagen=tipo.imagenesRecibeDanio().get(frame)
method recibeDanioEnemigo(_danio, proyectil) {
imagen = tipo.imagenesRecibeDanio().get(frame)
self.vida(self.vida() - _danio)
tipo.accionAlRecibirDanio().apply(self)
proyectil.destruirse()
return true
}

method combinarProyectil(_tipo){return false}
method combinarProyectil(_tipo) { return false }

// Comprobación de estado de vida y eliminación
method estaMuerto() {tipo.estaMuerto().apply(self)}
method estaMuerto() { tipo.estaMuerto().apply(self) }

method sinVida() = vida <= 0
method llegoACasa() = self.position().x() == 0
Expand All @@ -71,92 +81,102 @@ class Slime {
game.removeVisual(self)
administradorDeEnemigos.eliminarEnemigo(self)
}
method tipoProyectil()=false


method tipoProyectil() = false
}
// ===============================
// Tipos de Slime: Variantes
// ===============================

class Tipo{
const property danio
const property danio
const property vida
method desplazamiento() = 1
const property imagenesNormales
const property imagenesRecibeDanio
const property imagen
method esperar()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const objetoEnCeldaSiguiente2 = game.getObjectsIn(posicionEnFrente)
if(!objetoEnCeldaSiguiente2.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())


method esperar()={
slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const objetoEnCeldaSiguiente = game.getObjectsIn(posicionEnFrente)
if(!objetoEnCeldaSiguiente.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())
}
method moverse()={slime =>
slime.position().goLeft(slime.tipo().desplazamiento())
slime.meFreno()
}
method atacar()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const objetoEnCeldaSiguiente = game.getObjectsIn(posicionEnFrente)
objetoEnCeldaSiguiente.forEach({objeto=>objeto.recibeDanioMago(danio,slime)})
const objetoEnCeldaSiguiente2 = game.getObjectsIn(posicionEnFrente)
if(!objetoEnCeldaSiguiente2.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())

method moverse()={
slime =>
slime.position().goLeft(slime.tipo().desplazamiento())
slime.meFreno()
}
method estaMuerto()= {slime=>
if (slime.llegoACasa()||slime.position().y()>4||slime.position().y()<0) {
casa.recibirDanio(slime.position().y())
slime.eliminar()
} else if (slime.sinVida()) {
slime.eliminar()
}
return slime.sinVida() || slime.llegoACasa()

method atacar()={
slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const objetoEnCeldaSiguiente = game.getObjectsIn(posicionEnFrente)
if(!objetoEnCeldaSiguiente.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())
objetoEnCeldaSiguiente.forEach({objeto=>objeto.recibeDanioMago(danio,slime)})

}

method estaMuerto()= {
slime=>

if (slime.sinVida() || slime.llegoACasa()) {
if (slime.llegoACasa()) {
casa.recibirDanio(slime.position().y())
}
slime.eliminar()
}
return slime.sinVida() || slime.llegoACasa()
}
method accionAlRecibirDanio() ={slime => return }

method accionAlRecibirDanio() ={slime => return }
}

object slimeBasico inherits Tipo(danio= 25, vida=120, imagen="s.slimeBase_01.png", imagenesNormales=["s.slimeBase_01.png","s.slimeBase_02.png","s.slimeBase_03.png"],imagenesRecibeDanio=["s.slimeBaseDanio_01.png","s.slimeBaseDanio_02.png","s.slimeBaseDanio_03.png"]) {
}
// ===============================
// Definición de los Slimes Específicos
// ===============================

object slimeGuerrero inherits Tipo(danio= 25, vida=250, imagen="s.slimeGuerrero_01.png",imagenesNormales=["s.slimeGuerrero_01.png","s.slimeGuerrero_02.png","s.slimeGuerrero_03.png"],imagenesRecibeDanio=["s.slimeGuerreroDanio_01.png","s.slimeGuerreroDanio_02.png","s.slimeGuerreroDanio_03.png"]){
}
object slimeBasico inherits Tipo(danio = 25, vida = 120, imagen = "s.slimeBase_01.png",
imagenesNormales = ["s.slimeBase_01.png", "s.slimeBase_02.png", "s.slimeBase_03.png"],
imagenesRecibeDanio = ["s.slimeBaseDanio_01.png", "s.slimeBaseDanio_02.png", "s.slimeBaseDanio_03.png"]) {}

object slimeNinja inherits Tipo(danio= 200, vida=120, imagen="s.slimeNinja_01.png",imagenesNormales=["s.slimeNinja_01.png","s.slimeNinja_02.png","s.slimeNinja_03.png"],imagenesRecibeDanio=["s.slimeNinjaDanio_01.png","s.slimeNinjaDanio_02.png","s.slimeNinjaDanio_03.png"]) {
override method desplazamiento() = 2
}
object slimeGuerrero inherits Tipo(danio = 25, vida = 250, imagen = "s.slimeGuerrero_01.png",
imagenesNormales = ["s.slimeGuerrero_01.png", "s.slimeGuerrero_02.png", "s.slimeGuerrero_03.png"],
imagenesRecibeDanio = ["s.slimeGuerreroDanio_01.png", "s.slimeGuerreroDanio_02.png", "s.slimeGuerreroDanio_03.png"]) {}

object slimeBlessed inherits Tipo(danio= 200, vida=300, imagen="s.slimeBlessed_01.png",imagenesNormales=["s.slimeBlessed_01.png","s.slimeBlessed_02.png","s.slimeBlessed_03.png"],imagenesRecibeDanio=["s.slimeBlessedDanio_01.png","s.slimeBlessedDanio_02.png","s.slimeBlessedDanio_03.png"]){
}
object slimeNinja inherits Tipo(danio = 200, vida = 120, imagen = "s.slimeNinja_01.png",
imagenesNormales = ["s.slimeNinja_01.png", "s.slimeNinja_02.png", "s.slimeNinja_03.png"],
imagenesRecibeDanio = ["s.slimeNinjaDanio_01.png", "s.slimeNinjaDanio_02.png", "s.slimeNinjaDanio_03.png"]) {
override method desplazamiento() = 2
}

object slimeBlessed inherits Tipo(danio = 200, vida = 300, imagen = "s.slimeBlessed_01.png",
imagenesNormales = ["s.slimeBlessed_01.png", "s.slimeBlessed_02.png", "s.slimeBlessed_03.png"],
imagenesRecibeDanio = ["s.slimeBlessedDanio_01.png", "s.slimeBlessedDanio_02.png", "s.slimeBlessedDanio_03.png"]) {}

object slimeLadron inherits Tipo(danio= 25, vida=120, imagen="s.slimeLadron_01.png",imagenesNormales=["s.slimeLadron_01.png","s.slimeLadron_02.png","s.slimeLadron_03.png"],imagenesRecibeDanio=["s.slimeLadronDanio_01.png","s.slimeLadronDanio_02.png","s.slimeLadronDanio_03.png"]) {
override method atacar()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x() - 1, y = slime.position().y())
const objetoEnCeldaEnFrente = game.getObjectsIn(posicionEnFrente)
puntaje.restarPuntos(200)
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio,slime)})
const objetoEnCeldaSiguiente2 = game.getObjectsIn(posicionEnFrente)
if(!objetoEnCeldaSiguiente2.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())
}
/* override method meFreno()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x() - 1, y = slime.position().y())
const objetoEnCeldaEnFrente = game.getObjectsIn(posicionEnFrente)
if (objetoEnCeldaEnFrente.any({ objeto => objeto.frenarEnemigo() })) {
slime.enMovimiento(false)

override method atacar()={
slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x() - 1, y = slime.position().y())
const objetoEnCeldaEnFrente = game.getObjectsIn(posicionEnFrente)
puntaje.restarPuntos(200)
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio) })
} else {
slime.enMovimiento(true)
}
} */

if(!objetoEnCeldaEnFrente.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse())
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio,slime)})
}

}

object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado_01.png",imagenesNormales=["s.slimeDorado_01.png","s.slimeDorado_02.png","s.slimeDorado_03.png"],imagenesRecibeDanio=["s.slimeDoradoDanio_01.png","s.slimeDoradoDanio_02.png","s.slimeDoradoDanio_03.png"]){
override method desplazamiento() = 2
/* override method meFreno()={slime=>slime.enMovimiento(true)} */

override method moverse()={
slime =>
slime.position().goLeft(slime.tipo().desplazamiento())
}

override method estaMuerto()={slime=>
if (slime.sinVida()) {
puntaje.puntos(puntaje.puntos()+1000)
Expand All @@ -165,44 +185,33 @@ object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado_01.png
if(slime.llegoACasa()){slime.eliminar()}
return slime.sinVida() || slime.llegoACasa()
}

}
object slimeBomba inherits Tipo(danio=250, vida=180, imagen="s.slimeMedioOriente_01.png",imagenesNormales=["s.slimeMedioOriente_01.png","s.slimeMedioOriente_02.png","s.slimeMedioOriente_03.png"],imagenesRecibeDanio=["s.slimeMedioOrienteDanio_01.png","s.slimeMedioOrienteDanio_02.png","s.slimeMedioOrienteDanio_03.png"]){
override method atacar()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const objetoEnCeldaSiguiente = game.getObjectsIn(posicionEnFrente)
const posicionArriba = new MutablePosition(x = slime.position().x()-1, y = slime.position().y()+1)
const posicionAbajo = new MutablePosition(x = slime.position().x()-1, y = slime.position().y()-1)
const objetosAmatar= game.getObjectsIn(posicionArriba)+game.getObjectsIn(posicionAbajo)+objetoEnCeldaSiguiente
objetosAmatar.forEach({ objeto => objeto.recibeDanioMago(danio,slime) })
slime.eliminar()
}

/* override method meFreno()={slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x(), y = slime.position().y())
const objetoEnCeldaSiguiente = game.getObjectsIn(posicionEnFrente)
if (objetoEnCeldaSiguiente.any({ objeto => objeto.frenarEnemigo() && objeto.recibeDanioMago(0)})) {
slime.enMovimiento(false)
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 objetosAmatar= game.getObjectsIn(posicionArriba)+game.getObjectsIn(posicionAbajo)+objetoEnCeldaSiguiente
objetosAmatar.forEach({ objeto => objeto.recibeDanioMago(danio) })

override method atacar()={
slime=>
const posicionEnFrente = new MutablePosition(x = slime.position().x()-1, y = slime.position().y())
const posicionArriba = new MutablePosition(x = slime.position().x()-1, y = slime.position().y()+1)
const posicionAbajo = new MutablePosition(x = slime.position().x()-1, y = slime.position().y()-1)
const objetosAmatar= game.getObjectsIn(posicionArriba)+game.getObjectsIn(posicionAbajo)+game.getObjectsIn(posicionEnFrente)
objetosAmatar.forEach({ objeto => objeto.recibeDanioMago(danio,slime) })
slime.eliminar()
} else {
slime.enMovimiento(true)
}} */
}

}

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=>self.cambiarDeCarril().apply(slime)}
method cambiarDeCarril()={slime=>
const newPosicion= new MutablePosition(x = slime.position().x(), y = (slime.position().y()+((-1).randomUpTo(2))).max(0).min(4)) //
if(game.getObjectsIn(newPosicion).isEmpty()){
administradorDeEnemigos.decrementarLinea(slime.position().y())
slime.position(newPosicion)
administradorDeEnemigos.aumentarLinea(newPosicion.y())
}

method cambiarDeCarril()={
slime=>
const newPosicion= new MutablePosition(x = slime.position().x(), y = (slime.position().y()+((-1).randomUpTo(11.999999))).max(0).min(4)) //
if(game.getObjectsIn(newPosicion).isEmpty()){
administradorDeEnemigos.decrementarLinea(slime.position().y())
slime.position(newPosicion)
administradorDeEnemigos.aumentarLinea(newPosicion.y())
}
}
}

0 comments on commit 26dd3b2

Please sign in to comment.