Skip to content

Commit

Permalink
Jefe final echo
Browse files Browse the repository at this point in the history
Co-authored-by: Luciano Ezequiel Tapia <[email protected]>
Co-authored-by: Bruno <[email protected]>
  • Loading branch information
3 people committed Nov 7, 2024
1 parent ad2b6f8 commit 14c23cf
Show file tree
Hide file tree
Showing 10 changed files with 161 additions and 92 deletions.
Binary file removed assets/2vidas.png
Binary file not shown.
Binary file removed assets/3vidas.png
Binary file not shown.
Binary file removed assets/4vidas.png
Binary file not shown.
Binary file removed assets/5vidas.png
Binary file not shown.
86 changes: 86 additions & 0 deletions ataques.wlk
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import proyectiles.*
import general.*

class ProyectilJefe1 inherits Proyectiles {
method image() = "ataque_prueba.png"
}

object ataquePerro1 {
method atacar() {
const proyectilPerroR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilPerroL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 3), id = "L1")

game.schedule(100, {proyectilPerroR1.direccionDerecha(100)})
game.schedule(300, {proyectilPerroL1.direccionIzquierda(100)})

return 6000
}
}

object ataquePerro2 {
method atacar() {
const proyectilPerroR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilPerroL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 8), id = "L1")

game.schedule(300, {proyectilPerroR1.direccionDerecha(100)})
game.schedule(100, {proyectilPerroL1.direccionIzquierda(50)})

return 6000
}
}

object ataqueGato1 {
method atacar() {
const proyectilGatoDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 30), id = "DR1")
const proyectilGatoDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 27), id = "DL1")

game.schedule(100, {proyectilGatoDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(300, {proyectilGatoDL1.direccionDiagonalAbajoIzquierda(100)})

return 6000
}
}

object ataqueGato2 {
method atacar() {
const proyectilGatoDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 27), id = "DR1")
const proyectilGatoDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 32), id = "DL1")

game.schedule(300, {proyectilGatoDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(100, {proyectilGatoDL1.direccionDiagonalAbajoIzquierda(50)})

return 6000
}
}

object ataqueFinal1 {
method atacar() {
const proyectilFinalDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 30), id = "DR1")
const proyectilFinalDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 27), id = "DL1")
const proyectilFinalR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilFinalL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 3), id = "L1")

game.schedule(100, {proyectilFinalDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(300, {proyectilFinalDL1.direccionDiagonalAbajoIzquierda(100)})
game.schedule(100, {proyectilFinalR1.direccionDerecha(100)})
game.schedule(300, {proyectilFinalL1.direccionIzquierda(100)})

return 6000
}
}

object ataqueFinal2 {
method atacar() {
const proyectilFinalDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 27), id = "DR1")
const proyectilFinalDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 32), id = "DL1")
const proyectilFinalR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilFinalL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 8), id = "L1")

game.schedule(300, {proyectilFinalDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(100, {proyectilFinalDL1.direccionDiagonalAbajoIzquierda(50)})
game.schedule(300, {proyectilFinalR1.direccionDerecha(100)})
game.schedule(100, {proyectilFinalL1.direccionIzquierda(50)})

return 6000
}
}
47 changes: 42 additions & 5 deletions entorno.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,38 @@ import wollok.game.*
import morcilla.*
import general.*
import jefe.*
import ataques.*

object entorno {
var jefesDerrotados = 0

method jefeDerrotado() {
jefesDerrotados += 1
}

method limpiarEntorno() {
game.allVisuals().forEach({visible => game.removeVisual(visible)})
administradorVidas.mostrarVidas()
}

method volverAlHub() {
const jefesHub = [jefeDePrueba, jefeGato]
const jefesHub = [jefePerro, jefeGato]

game.allVisuals().forEach({visible => game.removeVisual(visible)})
administradorVidas.mostrarVidas()
self.limpiarEntorno()

game.addVisual(morcilla)

jefesHub.forEach({jefe => jefe.posicionPrevia()})

// Comprobar si se derrotaron 2, que aparezca el malo malísimo
if (jefesDerrotados == jefesHub.size()) {
//game.schedule(1000, game.addVisual(jefeFinal))
//game.whenCollideDo(jefeFinal, { personaje => if(personaje === morcilla) {personaje.iniciarPeleaMorcilla(jefeFinal, 500)}})
game.schedule(1000, { morcilla.iniciarPeleaMorcilla(jefeFinal, 500) })
}

if (jefeFinal.derrotado()) {
new Cinematica (position = game.origin(), image = "celda_gris.png", frames = [], id = "FINAL").empezar()
}
}
}

Expand All @@ -32,7 +46,29 @@ class Colisiones {
// =============================================== VISUALES ===============================================
class Visual {
const property position
const property image
var property image
}

class Cinematica inherits Visual {
const frames
const id
var frameActual = 0

method empezar() {
image = frames.head()
const duracion = frames.size() * 100
game.onTick(100, id, {self.siguienteFrame()})
game.addVisual(self) // arbitrario para saber si funciona

game.schedule(duracion, { game.removeTickEvent(id) })
}

method siguienteFrame() {
if(frameActual < frames.size()) {
frameActual += 1
image = frames.get(frameActual)
}
}
}

const derrota = new Visual (position = game.origin(), image = "celda_gris.png")
Expand Down Expand Up @@ -99,6 +135,7 @@ class BossFight {
method finalizarBatalla() {
jefeEnBatalla = false
game.boardGround("stock_fondo2.png")
entorno.jefeDerrotado()
entorno.volverAlHub()

morcilla.enBatalla(false)
Expand Down
88 changes: 17 additions & 71 deletions jefe.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ import wollok.game.*
import morcilla.*
import general.*
import proyectiles.*
import ataques.*

class JefeInteractuable{
class Jefe {
var property position
const property image
var property vida = 5
var property vida
const property ataques
var bossfight = null

const posInicial = new PositionMejorada (x = position.x(), y = position.y())

Expand All @@ -29,79 +32,22 @@ class JefeInteractuable{
}

method derrotado() = vida <= 0
}

class JefeDePrueba inherits JefeInteractuable {
method ataque() {
const opcion = (0.randomUpTo(2)).roundUp()
method ataque() {
// Resto 1 para que sea un valor de la lista
const ataque = (0.randomUpTo(ataques.size())).roundUp() - 1

if(opcion == 1)
return self.ataque1()
else if(opcion == 2)
return self.ataque2()
else
return 0

}

method ataque1() {
const proyectilR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 3), id = "L1")

game.schedule(100, {proyectilR1.direccionDerecha(100)})
game.schedule(300, {proyectilL1.direccionIzquierda(100)})

return 6000
}

method ataque2() {
const proyectilR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 2), id = "R1")
const proyectilL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 8), id = "L1")

game.schedule(300, {proyectilR1.direccionDerecha(100)})
game.schedule(100, {proyectilL1.direccionIzquierda(50)})

return 6000
}
}
return ataques.get(ataque).atacar()
}

class ProyectilJefe1 inherits Proyectiles {
method image() = "ataque_prueba.png"
method nuevaPelea() {
bossfight = new BossFight (jefe = self)
bossfight.iniciarPelea()
}
}

const jefeDePrueba = new JefeDePrueba (position = new PositionMejorada(x=3, y=2), image = "celda_roja.png")

class JefeGato inherits JefeInteractuable {

method ataque() {
const opcion = (0.randomUpTo(2)).roundUp()

if(opcion == 1)
return self.ataque1()
else if(opcion == 2)
return self.ataque2()
else
return 0
}

method ataque1() {
const proyectilDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 30), id = "DR1")
const proyectilDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 27), id = "DL1")
const jefePerro = new Jefe (position = new PositionMejorada(x=3, y=2), vida = 3, image = "celda_roja.png", ataques = [ataquePerro1, ataquePerro2])

game.schedule(100, {proyectilDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(300, {proyectilDL1.direccionDiagonalAbajoIzquierda(100)})
const jefeGato = new Jefe (position = new PositionMejorada(x=27, y=2), vida = 3, image = "celda_gris.png", ataques = [ataqueGato1, ataqueGato2])

return 6000
}

method ataque2() {
const proyectilDR1 = new ProyectilJefe1(position = new PositionMejorada(x = 0, y = 27), id = "DR1")
const proyectilDL1 = new ProyectilJefe1(position = new PositionMejorada(x = 32, y = 32), id = "DL1")

game.schedule(300, {proyectilDR1.direccionDiagonalAbajoDerecha(100)})
game.schedule(100, {proyectilDL1.direccionDiagonalAbajoIzquierda(50)})

return 6000
}
}
const jefeGato = new JefeGato (position = new PositionMejorada(x=27, y=2), image = "celda_gris.png")
const jefeFinal = new Jefe (position = new PositionMejorada (x = 15, y = 15), vida = 5, image = "morcilla256.png", ataques = [ataqueFinal1, ataqueFinal2])
8 changes: 4 additions & 4 deletions main.wpgm
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ program MorcillaGame {
game.width(33)
game.cellSize(100)

game.addVisual(jefeDePrueba)
game.addVisual(jefePerro)
game.addVisual(jefeGato)

game.addVisual(morcilla)
administradorVidas.mostrarVidas()

game.showAttributes(morcilla)
game.showAttributes(jefeGato)
game.showAttributes(jefeDePrueba)
game.showAttributes(jefePerro)

// Mover a morcilla
keyboard.d().onPressDo({ morcilla.caminarDerecha(1) })
keyboard.a().onPressDo({ morcilla.caminarIzquierda(1) })
keyboard.space().onPressDo({ morcilla.saltar(1000) })

game.whenCollideDo(jefeDePrueba, {personaje => if(personaje === morcilla){personaje.iniciarPeleaMorcilla(jefeDePrueba)}})
game.whenCollideDo(jefeGato, {personaje => if(personaje === morcilla){personaje.iniciarPeleaMorcilla(jefeGato)}})
game.whenCollideDo(jefePerro, {personaje => if(personaje === morcilla){personaje.iniciarPeleaMorcilla(jefePerro, 2000)}})
game.whenCollideDo(jefeGato, {personaje => if(personaje === morcilla){personaje.iniciarPeleaMorcilla(jefeGato, 2000)}})

game.start()
}
7 changes: 3 additions & 4 deletions morcilla.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,12 @@ object morcilla {
enBatalla = estado
}

method iniciarPeleaMorcilla(jefe){
if(!enBatalla){ // Un pequeño problema es que una vez que se activa el method podés activar la pelea en cualquier momento

method iniciarPeleaMorcilla(jefe, espera){
if(!enBatalla) {
self.desactivarMovimiento()
game.say(jefe, "Has llegado morcilla. Ahora nos vamos a agarrar")

game.schedule(2000, new BossFight(jefe = jefe).iniciarPelea())
game.schedule(espera, jefe.nuevaPelea())
}
}

Expand Down
17 changes: 9 additions & 8 deletions proyectiles.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ class Proyectiles {
const id

method direccionIzquierda(velocidad) {
game.onCollideDo(self, {elemento => if(elemento === morcilla){elemento.perderVida()}})
game.addVisual(self)
self.basicoDireccion()
game.onTick(velocidad, "proyectilIzquierda" + id, {self.movimientoIzquierda(velocidad)})
}

Expand All @@ -20,8 +19,7 @@ class Proyectiles {
}

method direccionDerecha(velocidad) {
game.onCollideDo(self, {elemento => if(elemento === morcilla){elemento.perderVida()}})
game.addVisual(self)
self.basicoDireccion()
game.onTick(velocidad, "proyectilDerecha" + id, {self.movimientoDerecha(velocidad)})
}

Expand All @@ -35,8 +33,7 @@ class Proyectiles {
}

method direccionDiagonalAbajoDerecha(velocidad) {
game.onCollideDo(self, {elemento => if(elemento === morcilla){elemento.perderVida()}})
game.addVisual(self)
self.basicoDireccion()
game.onTick(velocidad, "proyectilDiagonalAbajoDerecha" + id, {self.movimientoDiagonalAbajoDerecha(velocidad)})
}

Expand All @@ -51,8 +48,7 @@ class Proyectiles {
}

method direccionDiagonalAbajoIzquierda(velocidad) {
game.onCollideDo(self, {elemento => if(elemento === morcilla){elemento.perderVida()}})
game.addVisual(self)
self.basicoDireccion()
game.onTick(velocidad, "proyectilDiagonalAbajoDerecha" + id, {self.movimientoDiagonalAbajoIzquierda(velocidad)})
}

Expand All @@ -65,4 +61,9 @@ class Proyectiles {
game.removeTickEvent("proyectilDiagonalAbajoIzquierda" + id)
}
}

method basicoDireccion () {
game.onCollideDo(self, {elemento => if(elemento === morcilla){elemento.perderVida()}})
game.addVisual(self)
}
} // revisar proyectiles en diagonal

0 comments on commit 14c23cf

Please sign in to comment.