diff --git a/assets/C_game_over.png b/assets/C_game_over.png deleted file mode 100644 index aa97e9b..0000000 Binary files a/assets/C_game_over.png and /dev/null differ diff --git a/assets/E_boton.png b/assets/E_boton.png new file mode 100644 index 0000000..9fbf79d Binary files /dev/null and b/assets/E_boton.png differ diff --git a/characters.wlk b/characters.wlk index 50443f6..00c5788 100644 --- a/characters.wlk +++ b/characters.wlk @@ -2,7 +2,7 @@ import config.* class Character { - // Referencias + // -------------------- Referencias var property position var property oldPosition @@ -17,10 +17,15 @@ class Character { const nivelActual + // -------------------- Métodos + // Métodos Sobrescritos en las Subclases method image() = "" - method tipo() = "" + method tipo() = "" + method setupControls() {} + + // Métodos Propios method setPosition (posX, posY){ position = new MutablePosition(x=posX, y=posY) @@ -29,11 +34,10 @@ class Character { method colision(personaje) {} // Para que no genere error si colisionan entre personajes method esColisionable () = true // Para los bordes y pisos - - // ------------ Movimientos - method esAtravesable () = true + // Movimientos + method moveLeft() { const nuevaPosicion = [position.left(unidadMovimiento).x(), position.y()] @@ -83,8 +87,6 @@ class Character { game.onTick(100, "Gravedad", {self.moveDown()}) } - method setupControls() {} - method setupCollisions() { game.onCollideDo(self, {element => element.colision(self)}) } @@ -101,27 +103,24 @@ class Character { method die (){ //game.sound("S_muerte.mp3").play() - //game.addVisual(muerte) - //game.sound("S_game_over.mp3").play() - //game.schedule(3000,{game.removeVisual(muerte)}) + game.addVisual(muerte) + game.sound("S_game_over.mp3").play() + game.schedule(3000,{game.removeVisual(muerte)}) game.schedule(3000, {nivelActual.start()}) // Reiniciamos el nivel // RESTART LEVEL1 } - - - } class Fireboy inherits Character { + method puntaje() = puntos + override method tipo() = fuego override method image() { return "P_Fireboy.png" } - method puntaje() = puntos - override method setupControls(){ keyboard.left().onPressDo ({ self.moveLeft() }) keyboard.right().onPressDo ({ self.moveRight() }) @@ -131,6 +130,8 @@ class Fireboy inherits Character { class Watergirl inherits Character { + method puntaje() = puntos + override method tipo() = agua override method image() { @@ -142,8 +143,6 @@ class Watergirl inherits Character { keyboard.d().onPressDo ({ self.moveRight() }) keyboard.w().onPressDo ({ self.jump() }) } - - method puntaje() = puntos } object fuego {} diff --git a/config.wlk b/config.wlk index d0f116a..56c0576 100644 --- a/config.wlk +++ b/config.wlk @@ -3,11 +3,12 @@ import elements.* object settings { - // Referencias + // ---------------------- Referencias const niveles = [level1, level2] var nivelActual = 0 // Índice del nivel actual - // Métodos + // ---------------------- Métodos + method init (background, height, width, cellSize){ game.title("FireBoyWaterGirlGame") game.boardGround(background) @@ -17,7 +18,7 @@ object settings { game.start() } - method checkLevelCompletion(level) { + method checkLevelCompletion(level) { game.schedule(100, { if(level.isLevelComplete()) { //game.addVisual(nivelSuperado) @@ -29,6 +30,8 @@ object settings { }) } + + method pasarSgteNivel(){ nivelActual += 1 if (nivelActual < niveles.size()) { // Avanza al siguiente nivel @@ -39,7 +42,7 @@ object settings { game.schedule(5000,{game.removeVisual(nivelSuperado)}) niveles.get(nivelActual).start() - self.checkLevelCompletion(niveles.get(nivelActual)) + self.checkLevelCompletion(niveles.get(nivelActual)) } /*else { // Todos los niveles completados @@ -56,7 +59,7 @@ class Level { // ---------------- JUEGO PRINCIPAL method start() { - game.clear() + //game.clear() self.setupElements() // Bloques, palancas, plataformas, etc. self.setupDiamonds() self.setupCharacters() @@ -77,9 +80,9 @@ class Level { (0..28).forEach { y => positions.add([38, y]) } } - method setupPositions(){} - // Métodos Sobrescritos en los Niveles + + method setupPositions(){} method setupDiamonds() {} method setupElements () {} method setupCharcos() {} @@ -97,6 +100,8 @@ object level1 inherits Level { const fireboy = new Fireboy(position = new MutablePosition (x=16, y=18), oldPosition = new MutablePosition (x=16, y=18), nivelActual = self, zonasProhibidas = zonasProhibidasFuego, invalidPositions = positions) //Depende del nivel const watergirl = new Watergirl(position = new MutablePosition (x=24, y=1), oldPosition = new MutablePosition (x=24, y=1), nivelActual = self, zonasProhibidas = zonasProhibidasAgua, invalidPositions = positions) //Depende del nivel + // Lista de Posiciones prohibidas y diamantes + const zonasProhibidasFuego = [] const zonasProhibidasAgua = [] const diamantes = [] @@ -109,7 +114,7 @@ object level1 inherits Level { const botonAmarillo = new Boton(posX = 10, posY = 9, plataformaAsoc = plataformaAmarilla) const botonInvAmarillo1 = new BotonInvisible(posX = 11, posY = 9, botonAsoc = botonAmarillo) - const botonInvAmarillo2 = new BotonInvisible(posX = 11, posY = 9, botonAsoc = botonAmarillo) + const botonInvAmarillo2 = new BotonInvisible(posX = 9, posY = 9, botonAsoc = botonAmarillo) const plataformaBordo = new PlataformaMovible(posX = 34, posY = 13, maxAltura = 16, minAltura = 13) @@ -121,9 +126,6 @@ object level1 inherits Level { const botonInvBordoB1 = new BotonInvisible(posX = 31, posY = 18, botonAsoc = botonBordoB) const botonInvBordoB2 = new BotonInvisible(posX = 29, posY = 18, botonAsoc = botonBordoB) - - - // --------------------- Métodos // Métodos Sobrescritos @@ -151,19 +153,26 @@ object level1 inherits Level { override method setupElements() { game.addVisual(new Caja(position = new MutablePosition (x=13, y=18))) + + game.addVisual(puertaFireboy) + game.addVisual(puertaWatergirl) + game.addVisual(plataformaAmarilla) + game.addVisual(botonAmarillo) + game.addVisual(botonInvAmarillo1) game.addVisual(botonInvAmarillo2) game.addVisual(plataformaBordo) + game.addVisual(botonBordoA) game.addVisual(botonBordoB) + game.addVisual(botonInvBordoA1) game.addVisual(botonInvBordoA2) game.addVisual(botonInvBordoB1) game.addVisual(botonInvBordoB2) - } override method setupCharcos() { @@ -206,7 +215,7 @@ object level1 inherits Level { } override method isLevelComplete() = - self.posicionIgual(fireboy, puertaFireboy) and self.posicionIgual(watergirl, puertaWatergirl) + self.posicionIgual(fireboy, puertaFireboy) and self.posicionIgual(watergirl, puertaWatergirl) // Métodos Propios @@ -238,6 +247,6 @@ object muerte{ object nivelSuperado{ method position() = game.center() method image() = "F_Nivel_Superado.png" - method text1() {Fireboy.puntaje()} - method text2() {Watergirl.puntaje()} + // method text1() {Fireboy.puntaje()} + // method text2() {Watergirl.puntaje()} } \ No newline at end of file diff --git a/elements.wlk b/elements.wlk index 38174ea..43f4c41 100644 --- a/elements.wlk +++ b/elements.wlk @@ -104,10 +104,13 @@ class BotonInvisible { const posY const botonAsoc + method esAtravesable() = true + method esColisionable() = true + method position() = game.at(posX, posY) method colision(personaje) { - botonAsoc.personajeMovido() + botonAsoc.personajeMovido(personaje) } } @@ -118,30 +121,36 @@ class Boton { const posX const posY const plataformaAsoc - const unidadMovimiento = 1 - var enColision = false + + + method esAtravesable() = false + method esColisionable() = true method position() = game.at(posX, posY) method colision(personaje){ - enColision = true - if(plataformaAsoc.hastaMaxAltura()) - plataformaAsoc.goUp(unidadMovimiento) - - enColision = false + if(personaje.position() == self.position()) { + if(self.hastaMaxAltura()) { + plataformaAsoc.moveUp() + game.schedule(100, {self.colision(personaje)}) + } + } } - method personajeMovido() { - if(plataformaAsoc.hastaMinAltura() and !enColision) { - plataformaAsoc.goDown(unidadMovimiento) - self.personajeMovido() + method personajeMovido(personaje) { + + if(personaje.position() != self.position()) { + if(self.hastaMinAltura()) { + plataformaAsoc.moveDown() + game.schedule(100, {self.personajeMovido(personaje)}) + } } } - method image() = "E_button.png" + method image() = "E_cube.png" method hastaMaxAltura() = plataformaAsoc.position().y() != plataformaAsoc.maxAltura() - method hastaMinAltura() = plataformaAsoc.position().y() == plataformaAsoc.minAltura() + method hastaMinAltura() = plataformaAsoc.position().y() != plataformaAsoc.minAltura() } // ------------------ Plataforma Movible @@ -152,15 +161,26 @@ class PlataformaMovible { const posY const maxAltura const minAltura - + const position = new MutablePosition(x=posX, y=posY) + const unidadMovimiento = 1 + method maxAltura() = maxAltura method minAltura() = minAltura - method position() = game.at(posX, posY) + method position() = position method colision(personaje) {} method esAtravesable() = false + method esColisionable() = true + + method moveUp() { + position.goUp(unidadMovimiento) + } + + method moveDown() { + position.goDown(unidadMovimiento) + } method image() = "E_horizontal_gate.png" diff --git a/main.wpgm b/main.wpgm index 7b14325..fe73cb9 100644 --- a/main.wpgm +++ b/main.wpgm @@ -13,6 +13,6 @@ program FireBoyWaterGirlGame { // Mecanica del Juego level1.start() - settings.checkLevelCompletion(level1) + settings.checkLevelCompletion(level1) } \ No newline at end of file