Skip to content

Commit

Permalink
Cambios start y restart | Abstracción de metodos | Fin de juego corre…
Browse files Browse the repository at this point in the history
…gido | Evasión de objetos duplicados
  • Loading branch information
AscarlatoUTN committed Oct 31, 2024
1 parent 8f3e323 commit 8ff14bc
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 152 deletions.
34 changes: 14 additions & 20 deletions characters.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Character {
var puntos = 0

const nivelActual
var murioPersonaje = false
var property murioPersonaje = false

var plataformaAdherida = null

Expand All @@ -22,8 +22,8 @@ class Character {

// Métodos Sobrescritos en las Subclases

method image() = ""
method tipo() = ""
method image()
method tipo()
method setupControls()

// Métodos Propios
Expand Down Expand Up @@ -73,7 +73,7 @@ class Character {

const nuevaPosicion = position.down(unidadMovimiento)

if (nivelActual.esZonaProhibida(self, nuevaPosicion)){
if (nivelActual.esZonaProhibida(self, nuevaPosicion) && nivelActual.todosVivos()) {
self.die()
}

Expand All @@ -94,17 +94,17 @@ class Character {
if (!jumping){
self.desactivarGravedad()
jumping = true
[100, 200, 300, 400].forEach { num => game.schedule(num, { self.moveUp() }) }
game.schedule(900, {self.gravedad()})
}
[150, 300, 450, 600].forEach { num => game.schedule(num, { self.moveUp() }) }
game.schedule(800, {self.gravedad()})
}
}

// Gravedad

method eventoGravedad ()

method gravedad(){
game.onTick(100, self.eventoGravedad(), {self.moveDown()})
game.onTick(250, self.eventoGravedad(), {self.moveDown()})
}

method desactivarGravedad (){
Expand All @@ -124,18 +124,16 @@ class Character {
method collect () {puntos += 100}

// Muerte de personaje

method murioPersonaje() = murioPersonaje

method die (){
murioPersonaje = true
self.murioPersonaje(true)
game.sound("S_muerte.mp3").play()
game.addVisual(muerteCartel)
nivelActual.cleanVisuals()
game.sound("S_game_over.mp3").play()
game.schedule(3000,{game.removeVisual(muerteCartel)})
nivelActual.cleanVisuals() ///

game.schedule(3500, {nivelActual.start()}) // Reiniciamos el nivel
game.schedule(3000, {nivelActual.restart()}) // Reiniciamos el nivel
game.schedule(3000, {self.murioPersonaje(false)}) // Reiniciamos el flag de muerte
}


Expand Down Expand Up @@ -164,9 +162,7 @@ class Fireboy inherits Character {

override method tipo() = fuego

override method image() {
return "P_Fireboy.png"
}
override method image() = "P_Fireboy.png"

override method eventoGravedad () = "F_Gravedad"

Expand All @@ -183,9 +179,7 @@ class Watergirl inherits Character {

override method tipo() = agua

override method image() {
return "P_Watergirl.png"
}
override method image() = "P_Watergirl.png"

override method setupControls(){
keyboard.a().onPressDo ({ self.moveLeft() })
Expand Down
87 changes: 66 additions & 21 deletions config.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -11,76 +11,114 @@ object settings {
const cantNiveles = 2
const niveles = [level1, level2]

const property bordeJuego = [] //Guardamos todos los bordes

var nivelActual = 0

var nivelesInicializados = false //Para saber si hay que hacer start o restart

method init(title, boardground, height, width, cellSize){
game.title(title)
game.boardGround(boardground)
game.height(height)
game.width(width)
game.cellSize(cellSize) // 1404x1044 // 39x29 = 36px
game.cellSize(cellSize) // 1404x1044 // 39x29 = 36px
self.initLimitesJuego()
game.start()
}

//Inicializamos los limites del juego al principio

method initLimitesJuego (){
bordeJuego.add(new Zona (xMin = 0, xMax = 38, yMin = 0, yMax = 0 ))
bordeJuego.add(new Zona (xMin = 0, xMax = 0, yMin = 1, yMax = 27 ))
bordeJuego.add(new Zona (xMin = 0, xMax = 38, yMin = 28, yMax = 28 ))
bordeJuego.add(new Zona (xMin = 38, xMax = 38, yMin = 1, yMax = 27 ))
}

method pasarSgteNivel(){

niveles.get(nivelActual).cleanVisuals()
game.sound("S_nivel_pasado.mp3").play()
nivelActual += 1
if(nivelActual == cantNiveles){
nivelActual = 0
if(nivelActual == cantNiveles){ //Si estamos en el ultimo nivel finalizamos el juego y volvemos al inicio
self.finDeJuego()
} else {
game.addVisual(nivelSuperadoCartel)
game.schedule(2000,{game.removeVisual(nivelSuperadoCartel)})
game.schedule(3500,{niveles.get(nivelActual).start()})
game.schedule(2000,{game.removeVisual(niveles.get(nivelActual - 1))})
game.schedule(2000, {self.startGame()})
}
}

method finDeJuego () {
nivelesInicializados = true //Una vez que finalizamos el juego, ya no hay que volver a crear todos los elementos, solo hacemos addVisual y removeVisual
game.addVisual(finJuegoCartel)
game.removeVisual(niveles.get(nivelActual - 1))
game.schedule(4000, {game.removeVisual(finJuegoCartel)})
niveles.forEach{nivel => game.schedule(4000, {game.removeVisual(nivel)})}
nivelActual = 0 //empezamos los niveles de 0
}

method startGame(){
if(!nivelesInicializados){
niveles.get(nivelActual).start(bordeJuego)
} else {
game.addVisual(niveles.get(nivelActual))
niveles.get(nivelActual).restart()
}
}
}


class Level {

// ---------------------- Referencias

const marcoJuego = []
const charcos = []
const pisosJuego = [] // Zonas de cada nivel
const charcos = [] // Lista de charcos de cada nivel
const diamantes = [] // Diamantes
const elementosNivel = [] // Lista de elementos de cada nivel
const bordeJuego = [] // Bordes del juego

// Personajes

const fireboy = new Fireboy(position = self.positionF(),
oldPosition = self.positionF(),
nivelActual = self.nivelActual())
nivelActual = self.nivelActual()
)

const watergirl = new Watergirl(
position = self.positionW(),
oldPosition = self.positionW(),
nivelActual = self.nivelActual())
nivelActual = self.nivelActual()
)

// ---------------------- Métodos

// Inicialización

method start() {
//self.setupMechanicsInit()
method start(bordesJuego) { //Pasamos la lista de bordes para chequear si esta dentro de los limites o no
bordesJuego.forEach({zona => bordeJuego.add(zona)})
game.addVisual(self.nivelActual())
self.setupMarco()
self.setupMechanicsInit()
self.setupPisos()
self.setupDiamonds()
self.setupCharacters()
self.setupCharcos()
self.setupElements() // Bloques, palancas, plataformas, etc.
}

method restart () {
self.setupCharacters()
elementosNivel.forEach({element => game.addVisual(element)})
diamantes.forEach({x => game.addVisual(x)})
}

method position() = game.origin()

// Marco y Charco
// Control de si esta dentro del marco de juego

method estaFueraDelMarco(posicion) = pisosJuego.any({zona => zona.posicionProhibida(posicion)}) || bordeJuego.any({zona => zona.posicionProhibida(posicion)})

method estaFueraDelMarco(posicion) = marcoJuego.any({zona => zona.posicionProhibida(posicion)})
//Control de si esta en una zona prohibida

method esZonaProhibida(personaje, nuevaPosicion) = charcos.any({charco => charco.posicionProhibida(nuevaPosicion) && !charco.mismoTipo(personaje)})

Expand All @@ -92,7 +130,6 @@ class Level {
watergirl.setPosition(self.positionW().x(),self.positionW().y())
}


method setupMechanicsInit(){
self.setupMechanics(fireboy)
self.setupMechanics(watergirl)
Expand All @@ -104,15 +141,23 @@ class Level {
personaje.setupCollisions()
}

// Métodos Sobrescritos en los Niveles
method cleanVisuals(){
diamantes.forEach({x => game.removeVisual(x)})
elementosNivel.forEach({x=> game.removeVisual(x)})
}

//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

method setupElements ()
method setupDiamonds()
method setupElements ()
method setupCharcos()
method cleanVisuals()
method setupMarco ()
method setupPisos()
method positionF()
method positionW()
method nivelActual()
method image()
method agregarElementosNivel()
}
86 changes: 33 additions & 53 deletions level_1.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ object level1 inherits Level {

// --------------------- Referencias -------------------------

// Diamantes

const diamantes = []

// Puertas

const puertaFireboy1 = new Puerta(posX = 32, posY = 23, tipo = fuego)
Expand Down Expand Up @@ -50,18 +46,6 @@ object level1 inherits Level {
// Caja
const caja = new Caja(position = new MutablePosition (x=13, y=18))

// Lista con Todos los Elementos - Para la limpieza luego

const elementosNivel1 = [
fireboy, watergirl,
caja,
puertaFireboy1, puertaFireboy2, puertaWatergirl1, puertaWatergirl2,
extensionPlatAmarilla1, extensionPlatAmarilla2,
plataformaAmarilla,
botonAmarilloA, botonAmarilloB,
extensionPlatBordo1, extensionPlatBordo2,
plataformaBordo,
botonBordoA, botonBordoB]

// Lista con Elementos con Colision Especial

Expand All @@ -86,6 +70,7 @@ object level1 inherits Level {
// Diamantes

override method setupDiamonds() {

diamantes.add(new DiamanteRojo(posX = 28, posY = 3))
diamantes.add(new DiamanteRojo(posX = 9, posY = 14))
diamantes.add(new DiamanteRojo(posX = 10, posY = 25))
Expand All @@ -106,38 +91,33 @@ object level1 inherits Level {

// Marcos

override method setupMarco(){
marcoJuego.add(new Zona (xMin = 0, xMax = 38, yMin = 0, yMax = 0 ))
marcoJuego.add(new Zona (xMin = 0, xMax = 0, yMin = 1, yMax = 27 ))
marcoJuego.add(new Zona (xMin = 0, xMax = 38, yMin = 28, yMax = 28 ))
marcoJuego.add(new Zona (xMin = 38, xMax = 38, yMin = 1, yMax = 27 ))
marcoJuego.add(new Zona (xMin = 35, xMax = 37, yMin = 1, yMax = 2 ))
marcoJuego.add(new Zona (xMin = 36, xMax = 37, yMin = 3, yMax = 3 ))
marcoJuego.add(new Zona (xMin = 1, xMax = 12, yMin = 4, yMax = 4 ))
marcoJuego.add(new Zona (xMin = 23, xMax = 25, yMin = 5, yMax = 5 ))
marcoJuego.add(new Zona (xMin = 16, xMax = 32, yMin = 6, yMax = 6 ))
marcoJuego.add(new Zona (xMin = 15, xMax = 17, yMin = 7, yMax = 7 ))
marcoJuego.add(new Zona (xMin = 1, xMax = 16, yMin = 8, yMax = 8 ))
marcoJuego.add(new Zona (xMin = 35, xMax = 37, yMin = 9, yMax = 9 ))
marcoJuego.add(new Zona (xMin = 34, xMax = 37, yMin = 10, yMax = 10))
marcoJuego.add(new Zona (xMin = 32, xMax = 37, yMin = 11, yMax = 11))
marcoJuego.add(new Zona (xMin = 18, xMax = 37, yMin = 12, yMax = 12))
marcoJuego.add(new Zona (xMin = 5, xMax = 19, yMin = 13, yMax = 13 ))
marcoJuego.add(new Zona (xMin = 29, xMax = 33, yMin = 16, yMax = 16))
marcoJuego.add(new Zona (xMin = 1, xMax = 33, yMin = 17, yMax = 17 ))
marcoJuego.add(new Zona (xMin = 19, xMax = 26, yMin = 18, yMax = 18))
marcoJuego.add(new Zona (xMin = 19, xMax = 25, yMin = 19, yMax = 19))
marcoJuego.add(new Zona (xMin = 1, xMax = 5, yMin = 18, yMax = 21 ))
marcoJuego.add(new Zona (xMin = 11, xMax = 15, yMin = 20, yMax = 21))
marcoJuego.add(new Zona (xMin = 11, xMax = 37, yMin = 22, yMax = 22))
marcoJuego.add(new Zona (xMin = 10, xMax = 13, yMin = 23, yMax = 23))
marcoJuego.add(new Zona (xMin = 27, xMax = 29, yMin = 23, yMax = 23))
marcoJuego.add(new Zona (xMin = 9, xMax = 11, yMin = 24, yMax = 24 ))
override method setupPisos(){
pisosJuego.add(new Zona (xMin = 35, xMax = 37, yMin = 1, yMax = 2 ))
pisosJuego.add(new Zona (xMin = 36, xMax = 37, yMin = 3, yMax = 3 ))
pisosJuego.add(new Zona (xMin = 1, xMax = 12, yMin = 4, yMax = 4 ))
pisosJuego.add(new Zona (xMin = 23, xMax = 25, yMin = 5, yMax = 5 ))
pisosJuego.add(new Zona (xMin = 16, xMax = 32, yMin = 6, yMax = 6 ))
pisosJuego.add(new Zona (xMin = 15, xMax = 17, yMin = 7, yMax = 7 ))
pisosJuego.add(new Zona (xMin = 1, xMax = 16, yMin = 8, yMax = 8 ))
pisosJuego.add(new Zona (xMin = 35, xMax = 37, yMin = 9, yMax = 9 ))
pisosJuego.add(new Zona (xMin = 34, xMax = 37, yMin = 10, yMax = 10))
pisosJuego.add(new Zona (xMin = 32, xMax = 37, yMin = 11, yMax = 11))
pisosJuego.add(new Zona (xMin = 18, xMax = 37, yMin = 12, yMax = 12))
pisosJuego.add(new Zona (xMin = 5, xMax = 19, yMin = 13, yMax = 13 ))
pisosJuego.add(new Zona (xMin = 29, xMax = 33, yMin = 16, yMax = 16))
pisosJuego.add(new Zona (xMin = 1, xMax = 33, yMin = 17, yMax = 17 ))
pisosJuego.add(new Zona (xMin = 19, xMax = 26, yMin = 18, yMax = 18))
pisosJuego.add(new Zona (xMin = 19, xMax = 25, yMin = 19, yMax = 19))
pisosJuego.add(new Zona (xMin = 1, xMax = 5, yMin = 18, yMax = 21 ))
pisosJuego.add(new Zona (xMin = 11, xMax = 15, yMin = 20, yMax = 21))
pisosJuego.add(new Zona (xMin = 11, xMax = 37, yMin = 22, yMax = 22))
pisosJuego.add(new Zona (xMin = 10, xMax = 13, yMin = 23, yMax = 23))
pisosJuego.add(new Zona (xMin = 27, xMax = 29, yMin = 23, yMax = 23))
pisosJuego.add(new Zona (xMin = 9, xMax = 11, yMin = 24, yMax = 24 ))
}

// Agregamos Elementos
override method setupElements() {
elementosNivel1.forEach({element => game.addVisual(element)})
diamantes.forEach({x => game.addVisual(x)})

// Puertas
Expand All @@ -147,23 +127,23 @@ object level1 inherits Level {
puertaWatergirl1.otrasPuertas([puertaFireboy1, puertaFireboy2])
puertaWatergirl2.otrasPuertas([puertaFireboy1, puertaFireboy2])

// Boton

// Botones y Plataformas
botonAmarilloA.botonAsoc(botonAmarilloB)
botonAmarilloB.botonAsoc(botonAmarilloA)
botonBordoA.botonAsoc(botonBordoB)
botonBordoB.botonAsoc(botonBordoA)

// Elementos con Colision Especial
elemsColisionEspecial.forEach({x => x.setupCollisions()})

// Agregamos Elementos a la lista de elementos del Nivel
self.agregarElementosNivel()
elementosNivel.forEach({element => game.addVisual(element)})
}

// Lista con Todos los Elementos - Para la limpieza luego

// Limpieza Final

override method cleanVisuals() {
elementosNivel1.forEach({element => game.removeVisual(element)})
diamantes.forEach({x => game.removeVisual(x)})
marcoJuego.clear()
charcos.clear()
override method agregarElementosNivel (){
[fireboy, watergirl, caja, puertaFireboy1, puertaFireboy2, puertaWatergirl1, puertaWatergirl2, extensionPlatAmarilla1, extensionPlatAmarilla2, plataformaAmarilla, botonAmarilloA, botonAmarilloB, extensionPlatBordo1, extensionPlatBordo2, plataformaBordo, botonBordoA, botonBordoB].forEach({element => elementosNivel.add(element)})
}
}
Loading

0 comments on commit 8ff14bc

Please sign in to comment.