From 14c23cf98ce9163b864efeeac62537e5b917609b Mon Sep 17 00:00:00 2001 From: Juanter134 Date: Wed, 6 Nov 2024 23:57:47 -0300 Subject: [PATCH] Jefe final echo Co-authored-by: Luciano Ezequiel Tapia Co-authored-by: Bruno --- assets/2vidas.png | Bin 578 -> 0 bytes assets/3vidas.png | Bin 554 -> 0 bytes assets/4vidas.png | Bin 529 -> 0 bytes assets/5vidas.png | Bin 546 -> 0 bytes ataques.wlk | 86 ++++++++++++++++++++++++++++++++++++++++++++ entorno.wlk | 47 ++++++++++++++++++++++--- jefe.wlk | 88 +++++++++------------------------------------- main.wpgm | 8 ++--- morcilla.wlk | 7 ++-- proyectiles.wlk | 17 ++++----- 10 files changed, 161 insertions(+), 92 deletions(-) delete mode 100644 assets/2vidas.png delete mode 100644 assets/3vidas.png delete mode 100644 assets/4vidas.png delete mode 100644 assets/5vidas.png create mode 100644 ataques.wlk diff --git a/assets/2vidas.png b/assets/2vidas.png deleted file mode 100644 index d520ba8ac6c378f47ea3ea1eae197c458546a5f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^wLqN1!2~2vWN7&SDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoYDkE{-7;ac}Qz%su2F((tf2ty9{qfzzqV zt-*+U$r*+nJ?={^8x_pCR9WFUmh{lT>bB*Khj!+1H(GKX=^uYgBXP&F$~o zYi@eq`7a??ez!{J_TfK2FP%#fD%pR%ag*EnW}j0p!nbc!o01vdKI2!D<(5*nkGuZ& zz0pknR(){S{cTm>UWBfBw|(!w_t{+H+#h~dq7sS%!OzP=1vKsE;ugTSTW$so$p)z4*}Q$iB}-9H&B diff --git a/assets/3vidas.png b/assets/3vidas.png deleted file mode 100644 index 78166a6c32c082e778d5ee1746608a76006c35f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^wLqN1!2~2vWN7&SDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoXQME{-7;ac}P)%spfv(vWyLau)Y1mc(X0 zr~Xut2(`HjW-fRnROabh8G4%O&-rWrV<#Lv`ZINJM9hsfucN*c_j(V5uRzjz6@GGHU|)cz@^~HAj;F#&t;uc GLK6TdNET@T diff --git a/assets/4vidas.png b/assets/4vidas.png deleted file mode 100644 index 16f03bb25343483a8874c28ebcd2eb9bead851b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^wLqN1!2~2vWN7&SDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoSh#7srr_xVLvV`W|+WXt;Pl$LAp12A0?$ zCuet0cW19l8(lUr25<0Ycsy&;`;w~l8_ySgJ^8CN?@jmTpL-tOk6q{fZ~8mlyVASN zOY&dbyRdg*we$Bj8VgA5{+(IA@y6V1+?OSG0-4nj{>zQ?zMud5IdQYC-1gU1dW*~c z-??vF6SLp$-kR4pd2apv@+tW5-+x)L{^=*)oldxKcQ(2f#F$@kM5pcbKE7|A?q`y= zyt8kv{UrGLwapa!^4{BztFE)O{eSoGyY}n14|o5#9rL*ELhX|;CHX)0yC42cb+3w> t&DJke=(4bgZ}A337GG+FXPU1sgBFm@0mLA1DR?r7@^tlcS?83{1ORy{1r7iJ diff --git a/assets/5vidas.png b/assets/5vidas.png deleted file mode 100644 index 723fc5913bfffd545e0818076c8825dbcbc03a76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^wLqN1!2~2vWN7&SDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpoY1gE{-7;ac}Q#EIi~O!TKceqOul<>kGXuUGH9Y*yZuSl)J5a%;JLz5l7sS!?^A zX8peP^X}irtA5{c*Wu4J*PkwR?cBLD 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() + } } } @@ -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") @@ -99,6 +135,7 @@ class BossFight { method finalizarBatalla() { jefeEnBatalla = false game.boardGround("stock_fondo2.png") + entorno.jefeDerrotado() entorno.volverAlHub() morcilla.enBatalla(false) diff --git a/jefe.wlk b/jefe.wlk index a95aef4..01bb3d2 100644 --- a/jefe.wlk +++ b/jefe.wlk @@ -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()) @@ -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") \ No newline at end of file +const jefeFinal = new Jefe (position = new PositionMejorada (x = 15, y = 15), vida = 5, image = "morcilla256.png", ataques = [ataqueFinal1, ataqueFinal2]) \ No newline at end of file diff --git a/main.wpgm b/main.wpgm index 3123204..88a8c60 100644 --- a/main.wpgm +++ b/main.wpgm @@ -12,7 +12,7 @@ program MorcillaGame { game.width(33) game.cellSize(100) - game.addVisual(jefeDePrueba) + game.addVisual(jefePerro) game.addVisual(jefeGato) game.addVisual(morcilla) @@ -20,15 +20,15 @@ program MorcillaGame { 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() } diff --git a/morcilla.wlk b/morcilla.wlk index 1f3b87d..8a3bc5d 100644 --- a/morcilla.wlk +++ b/morcilla.wlk @@ -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()) } } diff --git a/proyectiles.wlk b/proyectiles.wlk index 8c931ba..d3831d6 100644 --- a/proyectiles.wlk +++ b/proyectiles.wlk @@ -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)}) } @@ -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)}) } @@ -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)}) } @@ -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)}) } @@ -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 \ No newline at end of file