Skip to content

Commit

Permalink
nuevos tipos de slime y nuevo tipo de mago
Browse files Browse the repository at this point in the history
  • Loading branch information
NahuelMarek committed Nov 17, 2024
1 parent b3cc8b3 commit 5af248f
Show file tree
Hide file tree
Showing 14 changed files with 141 additions and 23 deletions.
2 changes: 1 addition & 1 deletion administradorDeJuego.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ object sonidoPartida{
}
}
object configuracion {
const tiemposProyectiles = 500
const tiemposProyectiles = 600
const tiempoDisparo = 3000
const tiempoDinero = 750
const tiempoMuerte = 1000
Expand Down
4 changes: 2 additions & 2 deletions administradorDeOleadas.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import administradorDeJuego.*
// ===============================
object administradorDeOleadas {
const numOleadaFinal = 3
const posiblesTipos = [slimeBasico, slimeBasico, slimeGuerrero, slimeNinja, slimeBlessed]
const posiblesTipos = [slimeBasico, slimeBasico, slimeGuerrero, slimeNinja, slimeBlessed,slimeLadron]

var oleadaActual = oleadaNormal
var numeroOleada = 1
Expand Down Expand Up @@ -77,7 +77,7 @@ object administradorDeOleadas {
// Oleada Normal: Configuración y gestión de una oleada estándar
// ===============================
object oleadaNormal {
var property enemigos = [slimeBasico]
var property enemigos = [slimeBasico]
var property cantidadEnemigos = 10
var property enemigosRestantes = cantidadEnemigos
var property enemigosGenerados = 0
Expand Down
Binary file added assets/magoStop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/p.proyectilDeStop-frame1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/p.proyectilDeStop-frame2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/p.proyectilDeStop-frame3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/s.slimeDorado.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/s.slimeLadron.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 8 additions & 1 deletion magos.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class MagoIrlandes inherits Mago(vida = 100, imagen = "magoHealer.png") {

// Mago de Hielo
class MagoHielo inherits MagoQueDispara(vida = 100, imagen = "magoHielo.png", proyectilBase = proyectilPenetrante){}

class MagoStop inherits MagoQueDispara(vida = 100, imagen = "magoStop.png", proyectilBase = proyectilDeStop){}
// Mago de Piedra
class MagoPiedra inherits Mago(vida = 400, imagen = "magoPiedra.png") {}

Expand Down Expand Up @@ -183,3 +183,10 @@ override method magoQueGenera(posicionMago){return new MagoExplosivo(position =

override method image() = "magoExplosivo.png"
}

object magoStopTienda inherits MagoTienda(position = new MutablePosition(x = 5, y = 5), costo = 300) { //Nico: ver si 250 es una banda o no

override method magoQueGenera(posicionMago){return new MagoStop(position = posicionMago)}

override method image() = "magoStop.png"
}
2 changes: 1 addition & 1 deletion menu.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ object menu {
game.addVisual(magoIrlandesTienda)
game.addVisual(magoHieloTienda)
game.addVisual(magoExplosivoTienda)

game.addVisual(magoStopTienda)
// Añadiendo la pala a la tienda
game.addVisual(pala)
}
Expand Down
2 changes: 1 addition & 1 deletion pala.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import wollok.game.*
// Pala: Lo que no me gusta agarrar
// ===============================
object pala {
const position = new MutablePosition(x=5, y=5)
const position = new MutablePosition(x=6, y=5)

method image() = "pala.png"

Expand Down
46 changes: 41 additions & 5 deletions proyectil.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import adminProyectiles.*
import game.*
import administradorDeEnemigos.administradorDeEnemigos


// ===============================
// Proyectil: Clase base para proyectiles
// ===============================
Expand Down Expand Up @@ -35,16 +37,16 @@ class Proyectil {
// Método que revisa si llego al final
method llegueAlFinal() = position.x() >= 14
// Método de colisión
method colisionar() {
const posicionEnFrente = new MutablePosition(x = position.x() + 1, y = position.y())
method colisionar() {tipoProyectil.colisionar().apply(self)
/* const posicionEnFrente = new MutablePosition(x = position.x() + 1, y = position.y())
const objetosEnPosicion = game.getObjectsIn(self.position()) + game.getObjectsIn(posicionEnFrente)
const hayColision = objetosEnPosicion.any({objeto => objeto.recibeDanioEnemigo(danio) })
if (hayColision) {
self.destruirse()
}
} */
}

method combinar(){
Expand Down Expand Up @@ -101,9 +103,21 @@ object proyectilNormal {
method destruirse() = true
method combinar() = proyectilPenetrante
method puedeCombinarse() = true

method puedeCombinarseConNormal() = true
method puedeCombinarseConPenetrante() = false
method condicionParaCombinarse(otroTipo) = otroTipo.puedeCombinarseConNormal()
method colisionar() ={proyectil=>
const posicionEnFrente = new MutablePosition(x = proyectil.position().x() + 1, y = proyectil.position().y())

const objetosEnPosicion = game.getObjectsIn(proyectil.position()) + game.getObjectsIn(posicionEnFrente)

const hayColision = objetosEnPosicion.any({objeto => objeto.recibeDanioEnemigo(proyectil.danio())})

if (hayColision) {
proyectil.destruirse()
}
}
}


Expand All @@ -115,12 +129,13 @@ object proyectilPenetrante {
const property imagenes = ["p.proyectilHielo-frame1.png", "p.proyectilHielo-frame2.png", "p.proyectilHielo-frame3.png"]
method danio() = 50
method destruirse() = false

method combinar() = superProyectil
method puedeCombinarse() = true
method puedeCombinarseConNormal() = false
method puedeCombinarseConPenetrante() = true
method condicionParaCombinarse(otroTipo) = otroTipo.puedeCombinarseConPenetrante()

method colisionar() = proyectilNormal.colisionar()
}
// ===============================
// Super Proyectil: Implementación específica de un super proyectil
Expand All @@ -134,5 +149,26 @@ object superProyectil {
method puedeCombinarse() = false
method puedeCombinarseConNormal() = false
method puedeCombinarseConPenetrante() = false
method condicionParaCombinarse(otroTipo){}
method condicionParaCombinarse(otroTipo)=false
method colisionar() = proyectilNormal.colisionar()
}

object proyectilDeStop{
const property imagenes = ["p.proyectilDeStop-frame1.png", "p.proyectilDeStop-frame2.png", "p.proyectilDeStop-frame3.png"]
method danio() = 30
method destruirse() = true
method combinar() = self
method puedeCombinarse() = false
method puedeCombinarseConNormal() = false
method puedeCombinarseConPenetrante() = false
method condicionParaCombinarse(otroTipo)=false
method colisionar() ={proyectil=>
const posicionEnFrente = new MutablePosition(x = proyectil.position().x() + 1, y = proyectil.position().y())

const objetosEnPosicion = game.getObjectsIn(proyectil.position()) + game.getObjectsIn(posicionEnFrente)
const hayColision = objetosEnPosicion.any({objeto => objeto.recibeDanioEnemigo(proyectil.danio()) && objeto.meFreno(false)})
if (hayColision) {
proyectil.destruirse()
}
}
}
2 changes: 1 addition & 1 deletion puntaje.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ object puntaje {

method position() = new MutablePosition(x = 7, y = 5)
method sumarPuntos() { self.puntos(puntos + 5 + administradorDeMagos.magos().map({mago => mago.valorAgregado()}).sum())} // preguntar que opina fede | posiblemente se cambie para la presentacion del concurso
method restarPuntos(costo) { self.puntos(puntos - costo) }
method restarPuntos(costo) { if (puntos>costo) self.puntos(puntos - costo) else puntos=0 }

// Métodos para mostrar el puntaje
method text() = puntos.toString() + "$"
Expand Down
97 changes: 86 additions & 11 deletions slime.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

import administradorDeEnemigos.*
import casa.*
import puntaje.puntaje

// ===============================
// Clase Base: Slime
// ===============================
class Slime {
// Propiedades
const position
const tipo
const property tipo
var property enMovimiento = true // Indica si el slime puede moverse
var property vida = tipo.vida()
const property danio = tipo.danio()
Expand All @@ -23,17 +25,18 @@ class Slime {


// Movimiento del Slime
method movete() {
method movete() {tipo.moverse().apply(self)}/* {
self.estaMuerto()
self.meFreno()
if (self.enMovimiento())
return position.goLeft(tipo.desplazamiento())
else
self.enMovimiento(false)
}
} */

// Lógica para frenar el movimiento
method meFreno() {
method meFreno() {tipo.meFreno().apply(self)}
method meFreno(estado) {self.enMovimiento(estado) return true}/*{
const posicionEnFrente = new MutablePosition(x = self.position().x() - 1, y = self.position().y())
const objetoEnCeldaEnFrente = game.getObjectsIn(posicionEnFrente)
Expand All @@ -43,7 +46,7 @@ class Slime {
} else {
self.enMovimiento(true)
}
}
} */

// Métodos para recibir daño
method recibeDanioMago(_danio){}
Expand All @@ -57,18 +60,18 @@ class Slime {


// Comprobación de estado de vida y eliminación
method estaMuerto() {
if (self.llegoACasa()) {
method estaMuerto() {tipo.estaMuerto().apply(self)
/* if (self.llegoACasa()) {
casa.recibirDanio(self.position().y())
self.eliminar()
} else if (self.sinVida()) {
self.eliminar()
}
return self.sinVida() || self.llegoACasa()
return self.sinVida() || self.llegoACasa() */
}

method sinVida() = vida <= 0
method llegoACasa() = self.position().x() < 0
method llegoACasa() = self.position().x() == 0
method matarSlime() { vida = 0 }

// Eliminación del Slime
Expand All @@ -87,7 +90,33 @@ class Slime {
method desplazamiento() = 1
const imagen="s.slimeBase.png"
method imagen() {return imagen}

method moverse()={slime=> slime.estaMuerto()
if (slime.enMovimiento())
slime.position().goLeft(slime.tipo().desplazamiento())
else
slime.enMovimiento(false)
slime.meFreno()
}
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)
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio) })
} else {
slime.enMovimiento(true)
}
}
method estaMuerto()= {slime=>
if (slime.llegoACasa()) {
casa.recibirDanio(slime.position().y())
slime.eliminar()
} else if (slime.sinVida()) {
slime.eliminar()
}
return slime.sinVida() || slime.llegoACasa()
}
}

object slimeNinja {
Expand All @@ -96,7 +125,9 @@ class Slime {
method desplazamiento() = 2
const imagen="s.slimeNinja.png"
method imagen() {return imagen}

method moverse()= slimeBasico.moverse()
method meFreno()=slimeBasico.meFreno()
method estaMuerto()=slimeBasico.estaMuerto()
}

object slimeGuerrero {
Expand All @@ -105,6 +136,9 @@ class Slime {
method desplazamiento() = 1
const imagen = "s.slimeGuerrero.png"
method imagen() {return imagen}
method moverse()= slimeBasico.moverse()
method meFreno()=slimeBasico.meFreno()
method estaMuerto()=slimeBasico.estaMuerto()
}

object slimeBlessed {
Expand All @@ -113,7 +147,48 @@ class Slime {
method desplazamiento() = 1
const imagen="s.slimeBlessed.png"
method imagen() {return imagen}
method moverse()= slimeBasico.moverse()
method meFreno()=slimeBasico.meFreno()
method estaMuerto()=slimeBasico.estaMuerto()
}


object slimeLadron {
const property danio = 25
const property vida= 160
method desplazamiento() = 1
const imagen="s.slimeLadron.png"
method imagen() {return imagen}
method moverse()= slimeBasico.moverse()
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)
puntaje.restarPuntos(200)
objetoEnCeldaEnFrente.forEach({ objeto => objeto.recibeDanioMago(danio) })
} else {
slime.enMovimiento(true)
}
}
method estaMuerto()=slimeBasico.estaMuerto()
}

object slimeDorado {
const property danio = 0
const property vida= 175
method desplazamiento() = 2
const imagen="s.slimeDorado.png"
method imagen() {return imagen}
method moverse()= slimeBasico.moverse()
method meFreno()={slime=>slime.enMovimiento(true)}
method estaMuerto()={slime=>
if (slime.llegoACasa()) {
slime.eliminar()
} else if (slime.sinVida()) {
puntaje.puntos(puntaje.puntos()+1000)
slime.eliminar()
}
return slime.sinVida() || slime.llegoACasa()
}
}

0 comments on commit 5af248f

Please sign in to comment.