From e8eb55cf14195768c3efc24321e70f8669ba5b57 Mon Sep 17 00:00:00 2001 From: Ali Date: Tue, 12 Nov 2024 20:42:46 -0300 Subject: [PATCH] Actualizo version bis con mis ultimos cambios --- ProximosPasos.md | 32 ++-- assets/comida.png | Bin 0 -> 3313 bytes assets/cornerFlag.png | Bin 0 -> 940 bytes assets/food.png | Bin 2797 -> 0 bytes main.wpgm | 318 ++++++++++--------------------------- objects.wlk | 362 ++++++++++++++++++++++++++---------------- 6 files changed, 324 insertions(+), 388 deletions(-) create mode 100644 assets/comida.png create mode 100644 assets/cornerFlag.png delete mode 100644 assets/food.png diff --git a/ProximosPasos.md b/ProximosPasos.md index b8be20f..3bef964 100644 --- a/ProximosPasos.md +++ b/ProximosPasos.md @@ -1,17 +1,15 @@ -- [X] Cambiar background por una mejor cancha. -- [X] Agregar más consumibles (objetos distintos). -- [X] Agregar la pelota. -- [X] MODELAR COLISION BASICA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -- [ ] Modelar interacción con la pelota (que la patee en una direccion). -- [ ] Revisar colisión con consumibles (que el consumible desaparezca (y cómo vuelve a aparecer otro?)). -- [ ] Modelar colisión con jugador rival? (que lo empuje). -- [ ] Definir bordes de la cancha. -- [X] Agregar sonido de ambiente. -- [ ] Agregar sonidos de colisiones. -- [ ] Modelar mecánica de goles............y de fin de partida. -- [ ] Agregar menú? -- [X] Agregar ¿tarjetas? para afectar al otro jugador (tarjeta roja lo deja quieto por ej.). -- DELEGAR Y MODULARIZAR CON OBJETOS Y METODOS, ELIMINAR ALGORITMIA PROCEDURAL DE C. -- EN COLISION, NO PREGUNTAR SI CHOCA CON BANANA. USAR MENSAJES: CUANDO ALGO CHOCA CON UNA BANANA, MANDARLE UN MENSAJE - A ESE ALGO (MOVETE). -- SOBRE EL REMOVE VISUAL: EL OBJETO SIGUE ESTANDO PORQUE ESTÁ LA REFERENCIA (CONSTANTE). HAY QUE MODIFICAR ESO. \ No newline at end of file +- [X] Arreglar mecánica para llevar la pelota. +- [X] Agregar mecánica para patear la pelota en una dirección. +- [ ] Agregar mecánica para colisiones con borde de la cancha. +- [ ] Agregar sonidos colisiones. +- [ ] Agregar mecánica de goles: sonido, contador y reinicio posiciones. +- [ ] Agregar mecánica para fin de partida: que imprima un cartelito y envíe al menú principal. +- [ ] Agregar menú principal. +- [ ] Agregar banana maestra que invoque un montón de bananas. + +Observaciones +- Tal vez la evaluacion de si alguien está cerca de algo podría delegarse en el programa en vez de tenerla en 800 ifs. +- El mute del sonido funciona una sola vez. +- Los cuadros de diálogo no siempre se muestran (?). +- EL ONTICK AL AGARRAR UN CONSUMIBLE SE COMPARTE: DEL TOTAL SIEMPRE QUEDA UNO SOLO. + diff --git a/assets/comida.png b/assets/comida.png new file mode 100644 index 0000000000000000000000000000000000000000..0861e36064b63fd32dee1e08d4a758c178fb4fd8 GIT binary patch literal 3313 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 + jugador.agarrarConsumible (consumibles) + jugador.llevarPelota (pelota) + }) + jugador1.agarrarTarjeta (tarjetas, jugador2) + jugador2.agarrarTarjeta (tarjetas, jugador1) }) - */ - - /*game.onTick(100, "chequeo de colisiones", { - // CON CONSUMIBLES /* - if ((jugador1.position().x() - gaseosa1.position().x()).abs() < 5 and - (jugador1.position().y() - gaseosa1.position().y()).abs() < 5) { - jugador1.consumir(gaseosa1) - game.say(jugador1, jugador1.decir("Rica gaseosa!")) - game.removeVisual(gaseosa1) - } - if ((jugador1.position().x() - gaseosa2.position().x()).abs() < 5 and - (jugador1.position().y() - gaseosa2.position().y()).abs() < 5) { - jugador1.consumir(gaseosa2) - game.say(jugador1, jugador1.decir("Rica gaseosa!")) - game.removeVisual(gaseosa2) - } - if ((jugador1.position().x() - agua1.position().x()).abs() < 5 and - (jugador1.position().y() - agua1.position().y()).abs() < 5) { - jugador1.consumir(agua1) - game.say(jugador1, jugador1.decir("Rica agua!")) - game.removeVisual(agua1) - } - if ((jugador1.position().x() - agua2.position().x()).abs() < 5 and - (jugador1.position().y() - agua2.position().y()).abs() < 5) { - jugador1.consumir(agua2) - game.say(jugador1, jugador1.decir("Rica agua!")) - game.removeVisual(agua2) - } - if ((jugador1.position().x() - banana1.position().x()).abs() < 5 and - (jugador1.position().y() - banana1.position().y()).abs() < 5) { - jugador1.consumir(banana1) - game.say(jugador1, jugador1.decir("Gracias por la fruta")) - game.removeVisual(banana1) - } - if ((jugador1.position().x() - banana2.position().x()).abs() < 5 and - (jugador1.position().y() - banana2.position().y()).abs() < 5) { - jugador1.consumir(banana2) - game.say(jugador1, jugador1.decir("Gracias por la fruta")) - game.removeVisual(banana2) - } - if ((jugador1.position().x() - comida.position().x()).abs() < 5 and - (jugador1.position().y() - comida.position().y()).abs() < 5) { - jugador1.consumir(comida) - game.say(jugador1, jugador1.decir("Gracias por la comida")) - game.removeVisual(comida) - } - if ((jugador1.position().x() - bananaPeel1.position().x()).abs() < 5 and - (jugador1.position().y() - bananaPeel1.position().y()).abs() < 5) { - jugador1.moverseArriba(5) - jugador1.moverseDerecha(10) - game.say(jugador1, jugador1.decir("Noooooooo")) - //bananaPeel1.moverse(0,0) - game.removeVisual(bananaPeel1) - } - if ((jugador1.position().x() - bananaPeel2.position().x()).abs() < 5 and - (jugador1.position().y() - bananaPeel2.position().y()).abs() < 5) { - jugador1.moverseArriba(5) - jugador1.moverseDerecha(10) - game.say(jugador1, jugador1.decir("Noooooooo")) - //bananaPeel2.moverse(0,0) - game.removeVisual(bananaPeel2) - } - if ((jugador1.position().x() - bananaPeel3.position().x()).abs() < 5 and - (jugador1.position().y() - bananaPeel3.position().y()).abs() < 5) { - jugador1.moverseArriba(5) - jugador1.moverseDerecha(10) - game.say(jugador1, jugador1.decir("Noooooooo")) - //bananaPeel3.moverse(0,0) - game.removeVisual(bananaPeel3) - } - if ((jugador1.position().x() - cerveza.position().x()).abs() < 5 and - (jugador1.position().y() - cerveza.position().y()).abs() < 5) { - jugador1.decir("ESTOY MAREADO") - game.schedule(10000, jugador1.efectoAlReves(jugador1)) - game.removeVisual(cerveza) - jugador1.decir("NO TOMO MAS") - keyboard.w().onPressDo({ jugador1.moverseArriba(5) }) - keyboard.a().onPressDo({ jugador1.moverseIzquierda(5) }) - keyboard.s().onPressDo({ jugador1.moverseAbajo(5) }) - keyboard.d().onPressDo({ jugador1.moverseDerecha(5) }) - } - - // CON TARJETAS - if ((jugador1.position().x() - tarjetaAmarilla.position().x()).abs() < 5 and - (jugador1.position().y() - tarjetaAmarilla.position().y()).abs() < 5) { - tarjetaAmarilla.aplicar(jugador2) - game.say(jugador1, jugador1.decir("Toma amarilla")) - game.removeVisual(tarjetaAmarilla) - } - if ((jugador1.position().x() - tarjetaRoja.position().x()).abs() < 5 and - (jugador1.position().y() - tarjetaRoja.position().y()).abs() < 5) { - tarjetaRoja.aplicar(jugador2) - game.say(jugador1, jugador1.decir("Toma roja")) - game.removeVisual(tarjetaRoja) - } - if ((jugador2.position().x() - tarjetaAmarilla.position().x()).abs() < 5 and - (jugador2.position().y() - tarjetaAmarilla.position().y()).abs() < 5) { - tarjetaAmarilla.aplicar(jugador1) - game.say(jugador2, jugador2.decir("Amarelo para voce")) - game.removeVisual(tarjetaAmarilla) - } - if ((jugador2.position().x() - tarjetaRoja.position().x()).abs() < 5 and - (jugador2.position().y() - tarjetaRoja.position().y()).abs() < 5) { - tarjetaRoja.aplicar(jugador1) - game.say(jugador2, jugador2.decir("Vermelho para voce")) - game.removeVisual(tarjetaRoja) - } - - // CON PELOTA: DRIBBLING - if ((jugador1.position().x() - pelota.position().x()).abs() < proximidad && - (jugador1.position().y() - pelota.position().y()).abs() < proximidad) { - // Empuja la pelota en la dirección de movimiento del jugador - if (jugador1.position().x() < pelota.position().x()) { - pelota.moverse(pelota.position().x() + 5, pelota.position().y()) - } else if (jugador1.position().x() > pelota.position().x()) { - pelota.moverse(pelota.position().x() - 5, pelota.position().y()) - } - if (jugador1.position().y() < pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() + 5) - } else if (jugador1.position().y() > pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() - 5) - } - } - if ((jugador2.position().x() - pelota.position().x()).abs() < proximidad && - (jugador2.position().y() - pelota.position().y()).abs() < proximidad) { - // Empuja la pelota en la dirección de movimiento del jugador - if (jugador2.position().x() < pelota.position().x()) { - pelota.moverse(pelota.position().x() + 5, pelota.position().y()) - } else if (jugador2.position().x() > pelota.position().x()) { - pelota.moverse(pelota.position().x() - 5, pelota.position().y()) - } - if (jugador2.position().y() < pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() + 5) - } else if (jugador2.position().y() > pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() - 5) - } - } - / CON PELOTA: GOLES if (pelota.position().x() >= arco1X && pelota.position().x() <= (arco1X + arco1Ancho) && pelota.position().y() >= arco1Y && pelota.position().y() <= (arco1Y + arco1Alto)) { golesJugador2 += 1 game.say(jugador2, "¡Gol para el Jugador 2! Total: " + golesJugador2) - pelota.moverse(110, 50) // Reiniciar la posición de la pelota + // Reiniciamos posiciones + pelota.moverse(110, 50) + jugador1.moverse(xiJugador1, yiAmbosJugadores) + jugador2.moverse(xiJugador2, yiAmbosJugadores) } if (pelota.position().x() >= arco2X && pelota.position().x() <= (arco2X + arco2Ancho) && pelota.position().y() >= arco2Y && pelota.position().y() <= (arco2Y + arco2Alto)) { golesJugador1 += 1 game.say(jugador1, "¡Gol para el Jugador 1! Total: " + golesJugador1) - pelota.moverse(110, 50) // Reiniciar la posición de la pelota + // Reiniciamos posiciones + pelota.moverse(110, 50) + jugador1.moverse(xiJugador1, yiAmbosJugadores) + jugador2.moverse(xiJugador2, yiAmbosJugadores) } - })*/ - + */ game.start() } diff --git a/objects.wlk b/objects.wlk index 309bf87..3f2d27e 100644 --- a/objects.wlk +++ b/objects.wlk @@ -1,169 +1,251 @@ class Jugador { - var goles = 0 - const imagen - const position = game.center() - var cansancio = 0 - - method image() = imagen - method position() = position - method cansancio() = cansancio - method goles() = goles - method consumir(consumible) { - cansancio = 0.max(cansancio - consumible.energia()) + const property image + var property x = 105 + var property y = 50 + var property position = game.at(x, y) + var property ultimaDireccion = "ninguna" + var property energia = 100 + var property potencia = 0 + const rangoProximidad = 4 + + method ganarPotencia(input) { + potencia = 30.min(potencia + input) } - - method efectoAlReves(jugador) { - keyboard.s().onPressDo({ jugador.moverseArriba(5) }) - keyboard.d().onPressDo({ jugador.moverseIzquierda(5) }) - keyboard.w().onPressDo({ jugador.moverseAbajo(5) }) - keyboard.a().onPressDo({ jugador.moverseDerecha(5) }) + method perderPotencia(input) { + potencia = 0.max(potencia - input) } - - method recuperarEnergia(energia) { - cansancio = 0.max(cansancio - energia)cansancio = 0.max(cansancio - energia) + method ganarEnergia(input) { + energia = 100.min(energia + input) } - - method cansarse(pos) { - cansancio += pos + method perderEnergia(input) { + energia = 0.max(energia - input) } - - method moverseArriba(pos) { - if (pos-(cansancio/100) <= 0){position.goUp(0)} - else { - self.cansarse(pos) - position.goUp(pos-(cansancio/100)) - } + method ajustarPorEnergia(cantidad) { + if (energia >= 80) return cantidad + else if (energia >= 60) return 0.8* cantidad + else if (energia >= 40) return 0.6* cantidad + else if (energia >= 20) return 0.4* cantidad + else if (energia > 0) return 0.2* cantidad + else return 0 } - - method moverseAbajo(pos) { - if (pos-(cansancio/100) <= 0){position.goDown(0)} - else { - self.cansarse(pos) - position.goDown(pos-(cansancio/100)) - } + method moverseArriba(cantCeldas) { + position.goUp(self.ajustarPorEnergia(cantCeldas)) + self.perderEnergia(2) + ultimaDireccion = "arriba" } - - method moverseDerecha(pos) { - if (pos-(cansancio/100) <= 0){position.goRight(0)} - else { - self.cansarse(pos) - position.goRight(pos-(cansancio/100)) - } + method moverseAbajo(cantCeldas) { + position.goDown(self.ajustarPorEnergia(cantCeldas)) + self.perderEnergia(2) + ultimaDireccion = "abajo" } - - method moverseIzquierda(pos) { - if (pos-(cansancio/100) <= 0){position.goLeft(0)} - else { - self.cansarse(pos) - position.goLeft(pos-(cansancio/100)) - } + method moverseDerecha(cantCeldas) { + position.goRight(self.ajustarPorEnergia(cantCeldas)) + self.perderEnergia(2) + ultimaDireccion = "derecha" } - - method decir(texto) = texto - - method colision(item,jugador, numero) = - (jugador.position().x() - item.position().x()).abs() < numero and - (jugador.position().y() - item.position().y()).abs() < numero - - method efectoColision(jugador,item) { - if (jugador.colision(item,jugador,5)) { - jugador.aplicar(item) - game.say(jugador, jugador.decir(item.frase())) - game.removeVisual(item) + method moverseIzquierda(cantCeldas) { + position.goLeft(self.ajustarPorEnergia(cantCeldas)) + self.perderEnergia(2) + ultimaDireccion = "izquierda" + } + method seMueveDerecha() = ultimaDireccion == "derecha" + method seMueveIzquierda() = ultimaDireccion == "izquierda" + method seMueveArriba() = ultimaDireccion == "arriba" + method seMueveAbajo() = ultimaDireccion == "abajo" + + method moverse(xNueva, yNueva) { // por ahora este método no lo usamos. + x = xNueva + y = yNueva + } + method estaCercaDe(algo) = + (self.position().x() - algo.position().x()).abs() < rangoProximidad and + (self.position().y() - algo.position().y()).abs() < rangoProximidad + + method llevarPelota(pelota) { + if (self.estaCercaDe(pelota)) { + if (self.seMueveDerecha()) { + pelota.moverse(pelota.position().x() + (rangoProximidad + 1), pelota.position().y()) + self.perderEnergia(1) + } + else if (self.seMueveIzquierda()) { + pelota.moverse(pelota.position().x() - (rangoProximidad + 1), pelota.position().y()) + self.perderEnergia(1) + } + else if (self.seMueveArriba()) { + pelota.moverse(pelota.position().x(), pelota.position().y() + (rangoProximidad + 1)) + self.perderEnergia(1) + } + else if (self.seMueveAbajo()) { + pelota.moverse(pelota.position().x(), pelota.position().y() - (rangoProximidad + 1)) + self.perderEnergia(1) + } } - } - - - method hacerGol(pelota,jugador){ - if(pelota.estaEnAreaDeGol(pelota)){ - goles += 1 - game.say(jugador, "¡Gol para el Jugador 1! Total: " + goles) - pelota.moverse(110, 50) + method patearPelota(pelota){ + if (self.estaCercaDe(pelota)) { + if (self.seMueveDerecha()) { + pelota.moverse(pelota.position().x() + self.ajustarPorEnergia(potencia), pelota.position().y()) + self.perderEnergia(25) + } + else if (self.seMueveIzquierda()) { + pelota.moverse(pelota.position().x() - self.ajustarPorEnergia(potencia), pelota.position().y()) + self.perderEnergia(25) + } + else if (self.seMueveArriba()) { + pelota.moverse(pelota.position().x(), pelota.position().y() + self.ajustarPorEnergia(potencia)) + self.perderEnergia(25) + } + else if (self.seMueveAbajo()) { + pelota.moverse(pelota.position().x(), pelota.position().y() - self.ajustarPorEnergia(potencia)) + self.perderEnergia(25) } } - + } + method agarrarConsumible(consumibles) { + consumibles.forEach({ consumible => + if (self.estaCercaDe(consumible)) { + consumible.aplicarSobre(self) + consumible.desaparecer() } + }) + } + method agarrarTarjeta(tarjetas, otroJugador) { + tarjetas.forEach({ tarjeta => + if (self.estaCercaDe(tarjeta)) { + tarjeta.aplicarTarjeta(self, otroJugador) + tarjeta.desaparecer() } + }) + } + method decir(texto) = texto } class Item { - const imagen - var frase - const x = 0.randomUpTo(game.width()).truncate(0) - const y = 0.randomUpTo(game.height()).truncate(0) - var position = game.at(x, y) + const property image + var property position = game.at(-100, -100) - method image() = imagen - method position() = position - method moverse(nuevo_x, nuevo_y) { - position = game.at(nuevo_x, nuevo_y) + method moverse(xf, yf) { + position = game.at(xf, yf) } method moverseAlAzar() { - const x_random = 0.randomUpTo(game.width()).truncate(0) - const y_random = 0.randomUpTo(game.height()).truncate(0) - position = game.at(x_random,y_random) + position = game.at(12.randomUpTo(208).truncate(0), 2.randomUpTo(96).truncate(0)) } - - method frase() = frase } - +// Consumibles class Consumible inherits Item { - const energia - method energia() = energia - method aplicar(jugador,consumible) { - jugador.recuperarEnergia(energia) + const property energia = 0 + const property potencia = 0 + method aplicarSobre (jugador) {} + method desaparecer() {} +} +class Agua inherits Consumible (energia = 20, potencia = 5, image = "agua.png") { + override method aplicarSobre(jugador) { + jugador.ganarEnergia(energia) // permite 10 pasos más. + jugador.ganarPotencia(potencia) // llena 1/6 de la potencia máxima. + game.say(jugador, jugador.decir("Rica agua")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(1000, { + self.moverseAlAzar() // reaparece luego de 1 seg. + game.onTick (8000, "el agua se empieza a mover", {self.moverseAlAzar()}) }) } } - -class Tarjetas inherits Item { - var cantidad - method aplicar(jugador) { - jugador.cansarse(cantidad) // cuál es la diferencia entre esto y hardcodearle el efecto desde main? +class Gaseosa inherits Consumible (energia = 30, potencia = 5, image = "coke2.png") { + override method aplicarSobre(jugador) { + jugador.ganarEnergia(energia) // permite 15 pasos más. + jugador.ganarPotencia(potencia) // llena 1/6 de la potencia máxima. + game.say(jugador, jugador.decir("Rica gaseosa")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(2000, { + self.moverseAlAzar() // reaparece luego de 2 seg. + game.onTick (8000, "la gaseosa se empieza a mover", {self.moverseAlAzar()}) }) } } - -class CascaraBanana inherits Item { - method aplicar(jugador) { - jugador.moverseArriba(5) - jugador.moverseDerecha(10) +class Banana inherits Consumible (energia = 40, potencia = 10, image = "bananas.png") { + override method aplicarSobre(jugador) { + jugador.ganarEnergia(energia) // permite 20 pasos más. + jugador.ganarPotencia(potencia) // llena 1/3 de la potencia máxima. + game.say(jugador, jugador.decir("Rica fruta")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(3000, { + self.moverseAlAzar() // reaparece luego de 3 seg. + game.onTick (6000, "la banana se empieza a mover", {self.moverseAlAzar()}) }) } } - -class Pelota inherits Item{ - const arco1X = game.width() / 2 - 5 // Coordenada x de la portería 1 (izquierda) - const arco1Y = 0 // Coordenada y de la portería 1 - const arco1Ancho = 10 // Ancho de la portería 1 - const arco1Alto = 5 // Alto de la portería 1 - - const arco2X = game.width() / 2 - 5 // Coordenada x de la portería 2 (derecha) - const arco2Y = game.height() - 10 // Coordenada y de la portería 2 - const arco2Ancho = 10 // Ancho de la portería 2 - const arco2Alto = 5 // Alto de la portería 2 - - // Marcadores de goles - const proximidad = 4 - - method golpearPelota(jugador, pelota){ - if (jugador.colision(pelota,jugador,4)){ - pelota.direccionarPelota(jugador,pelota) - } - } - - method direccionarPelota(jugador,pelota){ - if (jugador.position().x() < pelota.position().x()) { - pelota.moverse(pelota.position().x() + 3, pelota.position().y()) - } else if (jugador.position().x() > pelota.position().x()) { - pelota.moverse(pelota.position().x() - 3, pelota.position().y()) - } - if (jugador.position().y() < pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() + 3) - } else if (jugador.position().y() > pelota.position().y()) { - pelota.moverse(pelota.position().x(), pelota.position().y() - 3) - } - } - - method estaEnAreaDeGol(pelota) = pelota.position().x() >= arco1X && pelota.position().x() <= (arco1X + arco1Ancho) && - pelota.position().y() >= arco1Y && pelota.position().y() <= (arco1Y + arco1Alto) - - +class Comida inherits Consumible (energia = 80, potencia = 20, image = "comida.png") { + override method aplicarSobre(jugador) { + jugador.ganarEnergia(energia) // permite 30 pasos más. + jugador.ganarPotencia(potencia) // llena 2/3 de la potencia máxima. + game.say(jugador, jugador.decir("Rica comida")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(5000, { + self.moverseAlAzar() // reaparece luego de 5 seg. + game.onTick (5000, "la comida se empieza a mover", {self.moverseAlAzar()}) }) + } +} +class BananaPeelDer inherits Consumible (energia = 20, image = "bananaPeel.png") { + override method aplicarSobre(jugador) { + jugador.perderEnergia(energia) // permite 10 pasos menos. + jugador.moverseArriba(5.randomUpTo(15).truncate(0)) + jugador.moverseDerecha(5.randomUpTo(15).truncate(0)) + game.say(jugador, jugador.decir("Noooooooo")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(100, { + self.moverseAlAzar() // reaparece casi instantáneamente. + game.onTick (2000, "la bananaPeelDer se empieza a mover", {self.moverseAlAzar()}) }) + } } - +class BananaPeelIzq inherits Consumible (energia = 20, image = "bananaPeel.png") { + override method aplicarSobre(jugador) { + jugador.perderEnergia(energia) // permite 10 pasos menos. + jugador.moverseAbajo(5.randomUpTo(15).truncate(0)) + jugador.moverseIzquierda(5.randomUpTo(15).truncate(0)) + game.say(jugador, jugador.decir("Noooooooo")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(100, { + self.moverseAlAzar() // reaparece casi instantáneamente. + game.onTick (4000, "la bananaPeelIzq se empieza a mover", {self.moverseAlAzar()}) }) + } +} +// Tarjetas +class Tarjeta inherits Item { + const property energia + const property potencia + method aplicarTarjeta (jugador, jugadorAplicado) {} + method desaparecer() {} +} +class TarjetaAmarilla inherits Tarjeta (energia = 50, potencia = 10, image = "yellowCard.png") { + override method aplicarTarjeta(jugador, jugadorAplicado) { + jugadorAplicado.perderEnergia(energia) // permite 25 pasos menos. + jugadorAplicado.perderPotencia(potencia) // quita 1/3 de la potencia máxima. + game.say(jugador, jugador.decir("Toma amarilla")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(5000, { + self.moverseAlAzar() // reaparece luego de 5 seg. + game.onTick (4000, "la tarjAmarilla se empieza a mover", {self.moverseAlAzar()}) }) + } +} +class TarjetaRoja inherits Tarjeta (energia = 100, potencia = 20, image = "redCard.png") { + override method aplicarTarjeta(jugador, jugadorAplicado) { + jugadorAplicado.perderEnergia(energia) // permite 50 pasos menos (inmobiliza). + jugadorAplicado.perderPotencia(potencia) // quita 2/3 de la potencia máxima. + game.say(jugador, jugador.decir("Toma roja!")) + } + override method desaparecer() { + self.moverse(-100, -100) + game.schedule(10000, { + self.moverseAlAzar() // reaparece luego de 10 seg. + game.onTick (2000, "la tarjRoja se empieza a mover", {self.moverseAlAzar()}) }) + } +} \ No newline at end of file