diff --git a/characters.wlk b/characters.wlk index 9bf787c..da2201f 100644 --- a/characters.wlk +++ b/characters.wlk @@ -8,14 +8,14 @@ class Character { var property position var property oldPosition - const unidadMovimiento = 1 - - const nivelActual + const property nivelActual var property murioPersonaje = false var plataformaAdherida = null - var jumping = false + var property jumping = false + + const unidadMovimiento = 1 // -------------------- Métodos @@ -37,64 +37,27 @@ class Character { // Movimientos - method moveLeft() { + method move (direction){ self.plataformaDesadherida() - - const nuevaPosicion = position.left(unidadMovimiento) - - if(!nivelActual.estaFueraDelMarco(nuevaPosicion) && self.puedeDesplazarse(nuevaPosicion)) - position.goLeft(unidadMovimiento) - oldPosition = new MutablePosition(x = self.position().x() + 1, y = self.position().y()) - } - - method moveRight() { - - self.plataformaDesadherida() - - const nuevaPosicion = position.right(unidadMovimiento) - - if (!nivelActual.estaFueraDelMarco(nuevaPosicion) && self.puedeDesplazarse(nuevaPosicion)) - position.goRight(unidadMovimiento) - oldPosition = new MutablePosition(x = self.position().x() - unidadMovimiento, y = self.position().y()) - } - - method moveUp() { - - const nuevaPosicion = position.up(unidadMovimiento) - - if(!nivelActual.estaFueraDelMarco(nuevaPosicion) && self.puedeDesplazarse(nuevaPosicion)) - position.goUp(unidadMovimiento) - oldPosition = new MutablePosition(x = self.position().x(), y = self.position().y() - unidadMovimiento) - } - - method moveDown() { - - const nuevaPosicion = position.down(unidadMovimiento) + + const nuevaPosicion = direction.calcularNuevaPosicion(self) - if (nivelActual.esZonaProhibida(self, nuevaPosicion) && nivelActual.todosVivos()) { - self.die() - } + + if(direction.puedeMoverse(self, nuevaPosicion)) + direction.actualizarPosicion(self, nuevaPosicion) - else if(!nivelActual.estaFueraDelMarco(nuevaPosicion) && self.puedeAtravesar(nuevaPosicion)){ - position.goDown(unidadMovimiento) - oldPosition = new MutablePosition(x = self.position().x(), y = self.position().y() + unidadMovimiento) - } - else { - // SETEAMOS FLAG SALTANDO = FALSE (para evitar doble salto) - jumping = false - } } - + method jump() { self.plataformaDesadherida() const nuevaPosicion = position.down(unidadMovimiento) - if (!jumping && (nivelActual.estaFueraDelMarco(nuevaPosicion) || !self.puedeAtravesar(nuevaPosicion))){ + if (!jumping && (self.nivelActual().estaFueraDelMarco(nuevaPosicion) || !self.puedeAtravesar(nuevaPosicion))){ self.desactivarGravedad() jumping = true - [150, 300, 450, 600].forEach { num => game.schedule(num, { self.moveUp() }) } + [150, 300, 450, 600].forEach { num => game.schedule(num, { self.move(up) }) } game.schedule(800, {self.gravedad()}) } } @@ -104,7 +67,7 @@ class Character { method eventoGravedad () method gravedad(){ - game.onTick(250, self.eventoGravedad(), {self.moveDown()}) + game.onTick(250, self.eventoGravedad(), {self.move(down)}) } method desactivarGravedad (){ @@ -117,11 +80,15 @@ class Character { game.onCollideDo(self, {element => element.colision(self)}) } - method puedeDesplazarse(nuevaPosicion) = self.puedeAtravesar(nuevaPosicion) || self.puedeColisionar(nuevaPosicion) + //Control movimiento + method puedeDesplazarse(nuevaPosicion) = self.puedeAtravesar(nuevaPosicion) || self.puedeColisionar(nuevaPosicion) + method puedeAtravesar(nuevaPosicion) = game.getObjectsIn(nuevaPosicion).all{obj => obj.esAtravesable()} - + method puedeColisionar(nuevaPosicion) = game.getObjectsIn(nuevaPosicion).all{obj => obj.esColisionable()} + + method estaDentroDelMarco (nuevaPosicion) = !self.nivelActual().estaFueraDelMarco(nuevaPosicion) // Puntos y Mecanica del Juego @@ -138,6 +105,7 @@ class Character { game.schedule(3000, {self.murioPersonaje(false)}) // Reiniciamos el flag de muerte } + // Con Elementos method moverALaPar(plataforma) { @@ -166,8 +134,8 @@ class Fireboy inherits Character { override method eventoGravedad () = "F_Gravedad" override method setupControls(){ - keyboard.left().onPressDo ({ self.moveLeft() }) - keyboard.right().onPressDo ({ self.moveRight() }) + keyboard.left().onPressDo ({ self.move(left) }) + keyboard.right().onPressDo ({ self.move(right) }) keyboard.up().onPressDo ({ self.jump() }) } } @@ -179,8 +147,8 @@ class Watergirl inherits Character { override method image() = "P_Watergirl.png" override method setupControls(){ - keyboard.a().onPressDo ({ self.moveLeft() }) - keyboard.d().onPressDo ({ self.moveRight() }) + keyboard.a().onPressDo ({ self.move(left) }) + keyboard.d().onPressDo ({ self.move(right) }) keyboard.w().onPressDo ({ self.jump() }) } @@ -191,4 +159,68 @@ object fuego {} object agua {} -object acido {} \ No newline at end of file +object acido {} + +object left { + + method calcularNuevaPosicion(character) = character.position().left(1) + + method puedeMoverse(character, nuevaPosicion)= character.estaDentroDelMarco(nuevaPosicion) && character.puedeDesplazarse(nuevaPosicion) + + method actualizarPosicion(character, nuevaPosicion){ + character.position().goLeft(1) + character.oldPosition(new MutablePosition(x = character.position().x() + 1, y = character.position().y())) + } +} + +object right { + + method calcularNuevaPosicion(character) = character.position().right(1) + + method puedeMoverse(character, nuevaPosicion)= character.estaDentroDelMarco(nuevaPosicion) && character.puedeDesplazarse(nuevaPosicion) + + method actualizarPosicion(character, nuevaPosicion){ + character.position().goRight(1) + character.oldPosition(new MutablePosition(x = character.position().x() - 1, y = character.position().y())) + } +} + +object up { + + method calcularNuevaPosicion(character) = character.position().up(1) + + method puedeMoverse(character, nuevaPosicion)= character.estaDentroDelMarco(nuevaPosicion) && character.puedeDesplazarse(nuevaPosicion) + + method actualizarPosicion(character, nuevaPosicion){ + character.position().goUp(1) + character.oldPosition(new MutablePosition(x = character.position().x(), y = character.position().y() - 1)) + } +} + +object down { + + method puedeMoverse(character, nuevaPosicion) = true + + method calcularNuevaPosicion(character) = character.position().down(1) + + method actualizarPosicion(character, nuevaPosicion) { + + if (character.nivelActual().esZonaProhibida(self, nuevaPosicion) && character.nivelActual().todosVivos()) { + + character.die() + } + else if(character.estaDentroDelMarco(nuevaPosicion) && character.puedeAtravesar(nuevaPosicion)){ + + character.position().goDown(1) + character.oldPosition(new MutablePosition(x = character.position().x(), y = character.position().y() + 1)) + } + else{ + + // SETEAMOS FLAG SALTANDO = FALSE (para evitar doble salto) + character.jumping(false) + } + + + } + +} \ No newline at end of file diff --git a/config.wlk b/config.wlk index cdb4054..da39c94 100644 --- a/config.wlk +++ b/config.wlk @@ -8,10 +8,10 @@ object settings { // ---------------------- Métodos + const cantNiveles = 2 const niveles = [level1, level2] - const cantNiveles = niveles.size() - const property bordeJuego = [] // Guardamos todos los bordes + const property bordeJuego = [] //Guardamos todos los bordes var nivelActual = 0 @@ -56,7 +56,7 @@ object settings { game.addVisual(finJuegoCartel) game.removeVisual(niveles.get(nivelActual - 1)) game.schedule(4000, {game.removeVisual(finJuegoCartel)}) - nivelActual = 0 // empezamos los niveles de 0 + nivelActual = 0 //empezamos los niveles de 0 } method startGame(){ @@ -122,6 +122,8 @@ class Level { method esZonaProhibida(personaje, nuevaPosicion) = charcos.any({charco => charco.posicionProhibida(nuevaPosicion) && !charco.mismoTipo(personaje)}) + method estaDentroDelMarco (nuevaPosicion) = !self.estaFueraDelMarco(nuevaPosicion) + // Mecanica de los Personajes method setupCharacters() { @@ -146,7 +148,7 @@ class Level { elementosNivel.forEach({x=> game.removeVisual(x)}) } - // Para que no se pueda morir el otro personaje cuando ya se murio uno + //Para que no se pueda morir el otro personaje cuando ya se murio uno method todosVivos() = !fireboy.murioPersonaje() && !watergirl.murioPersonaje() // Métodos Sobrescritos en los Niveles diff --git a/elements.wlk b/elements.wlk index 056ef00..8409622 100644 --- a/elements.wlk +++ b/elements.wlk @@ -1,7 +1,5 @@ import characters.* import config.* -import level_1.* -import level_2.* import visualCarteles.* diff --git a/pruebas.wtest b/pruebas.wtest index f1fa7a6..b02a702 100644 --- a/pruebas.wtest +++ b/pruebas.wtest @@ -70,7 +70,7 @@ describe "Zonas Prohibidas" { nivelActual = level1) fireboy.setPosition(2, 1) - fireboy.moveDown() + fireboy.move(down) assert.that(fireboy.murioPersonaje())} test "Fireboy no muere al moverse a posiciones no peligrosas" { @@ -81,7 +81,7 @@ describe "Zonas Prohibidas" { nivelActual = 0) fireboy.setPosition(1, 1) - fireboy.moveRight() + fireboy.move(right) assert.notThat(fireboy.murioPersonaje()) } }