Skip to content

Commit

Permalink
Merge pull request #2 from pdepjm/agujeros
Browse files Browse the repository at this point in the history
Agujeros, cuerpo y menú
  • Loading branch information
valenosa authored Sep 30, 2024
2 parents 24beb8c + dd01f5a commit 5e0433d
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 84 deletions.
9 changes: 9 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"cSpell.words": [
"compi",
"compis"
],
"cSpell.enableFiletypes": [
"!wollok"
]
}
Binary file modified assets/Trampa1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/Trampa2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Trampa3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Trampa4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/Trampa5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 23 additions & 3 deletions levels.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import stickyBlocks.*
goalPositions.add(game.at(x, y))
}

method cuerpoSobreMeta(cuerpo) = goalPositions.all({goalPos => cuerpo.any({compi => compi.position() == goalPos})})
method cuerpoSobreMeta() = goalPositions.all({goalPos => cuerpo.compis().any({compi => compi.position() == goalPos})})

//Personaje Principal
var property mainCharacterPosition = null
Expand All @@ -46,9 +46,13 @@ import stickyBlocks.*
}

method drawCharacters(){
const personajePrincipal = new PersonajePrincipal(position = mainCharacterPosition)

//Instanciamos un StickyBlock pero lo inicializamos como cuerpo
const personajePrincipal = new StickyBlock(position = mainCharacterPosition)
personajePrincipal.iniciar()
personajePrincipal.setAsCuerpo()

//Instanciamos los compis
stickyBlockPositions.forEach({position =>
const stickyBlock = new StickyBlock(position = position)
stickyBlock.iniciar()
Expand Down Expand Up @@ -102,6 +106,22 @@ import stickyBlocks.*
}
}

//Trampa
object o{
method decode(x,y,_level){
const agujero = new Agujero(position = game.at(x, y), activa = true)
agujero.iniciar()
}
}

//Trampa
object x{
method decode(x,y,_level){
const agujero = new Agujero(position = game.at(x, y), activa = false)
agujero.iniciar()
}
}

//Meta
object g{
method decode(x,y,level){
Expand Down Expand Up @@ -145,7 +165,7 @@ import stickyBlocks.*
[v,v,v,v,p,p,p,p,p,p,p,p,p,p,p,v,v,v,v,v],
[v,v,v,v,p,_,_,_,_,p,_,z,_,_,p,v,v,v,v,v],
[v,v,v,v,p,_,m,_,_,_,_,_,_,_,p,v,v,v,v,v],
[v,v,v,v,l,_,_,_,_,_,_,_,g,g,p,v,v,v,v,v],
[v,v,v,v,l,_,x,_,_,_,_,o,g,g,p,v,v,v,v,v],
[v,v,v,v,p,_,_,_,z,_,_,_,g,_,p,v,v,v,v,v],
[v,v,v,v,p,_,_,_,_,_,_,_,_,_,p,v,v,v,v,v],
[v,v,v,v,p,p,p,p,p,p,p,p,p,p,p,v,v,v,v,v],
Expand Down
196 changes: 115 additions & 81 deletions stickyBlocks.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ object juegoStickyBlock {
game.height(10)
game.width(20)
game.boardGround("Fondo.png")

menu.iniciar()
keyboard.m().onPressDo({menu.iniciar()})
cuerpo.iniciar()
}

var property nivelActual = nivel1
Expand All @@ -18,116 +19,103 @@ object juegoStickyBlock {
}

method clear(){
cuerpo.clear()
game.allVisuals().forEach({visual => game.removeVisual(visual)})
}
}

//*==========================| MENU Inical |==========================
object menu{
method iniciar(){
juegoStickyBlock.clear()

menuActivo = true
levelMenuIsOpen = false

self.drawMenu()
//*==========================| MENU Inicial |==========================
object menu{
method iniciar(){
juegoStickyBlock.clear()

keyboard.p().onPressDo({if(menuActivo) juegoStickyBlock.nivelActual().iniciar() menuActivo = false})
keyboard.l().onPressDo({if(menuActivo)self.toggleLevelMenu() levelMenuIsOpen = !levelMenuIsOpen})
}
menuActivo = true
levelMenuIsOpen = false

var menuActivo = true //! AYUDAA!! esto es una mierda pero no se como eliminar el onPressDo lpm
var levelMenu = null
var levelMenuIsOpen = false
self.drawMenu()

method toggleLevelMenu() = if(levelMenuIsOpen) self.closeLevelMenu() else self.openLevelMenu()
keyboard.p().onPressDo({if(menuActivo) {juegoStickyBlock.nivelActual().iniciar() menuActivo = false}})
keyboard.l().onPressDo({if(menuActivo) {self.toggleLevelMenu()}})
}

method drawMenu(){
new OnlyVisual(image = "Logo.png", position = game.at(7,6)).iniciar()
levelMenu = new OnlyVisual(image = "CloseMenu.png", position = game.at(6,3))
levelMenu.iniciar()
}

method closeLevelMenu(){
levelMenu.image("CloseMenu.png")
keyboard.num1().onPressDo({})
}
var menuActivo = true //!AYUDA!! esto es una mierda pero no se como eliminar el onPressDo lpm
var levelMenu = null
var levelMenuIsOpen = false

method openLevelMenu(){
levelMenu.image("OpenMenu.png")
keyboard.num1().onPressDo({if(menuActivo)nivel1.iniciar() menuActivo = false})
keyboard.num2().onPressDo({if(menuActivo)nivel2.iniciar() menuActivo = false})
}
method toggleLevelMenu() = if(levelMenuIsOpen) self.closeLevelMenu() else self.openLevelMenu()

method drawMenu(){
new OnlyVisual(image = "Logo.png", position = game.at(7,6)).iniciar()
levelMenu = new OnlyVisual(image = "CloseMenu.png", position = game.at(6,3))
levelMenu.iniciar()
}

}
method closeLevelMenu(){
levelMenu.image("CloseMenu.png")
levelMenuIsOpen = false
}

//PD: Level menu podria ser un objeto pero...
method openLevelMenu(){
levelMenu.image("OpenMenu.png")
levelMenuIsOpen = true
keyboard.num1().onPressDo({if(menuActivo && levelMenuIsOpen) {nivel1.iniciar() menuActivo = false}})
keyboard.num2().onPressDo({if(menuActivo && levelMenuIsOpen) {nivel2.iniciar() menuActivo = false}})
}

class OnlyVisual{
method iniciar(){
game.addVisual(self)
}

var property image
//PD: Level menu podría ser un objeto pero...

const property position
}
class OnlyVisual{
method iniciar(){
game.addVisual(self)
}

var property image

//*==========================| Personajes |==========================
//--------- Personaje Principal ---------
class PersonajePrincipal{

//Posicion
var property position
const property position
}

//Movimiento
var movimiento = null
//*==========================| Cuerpo |==========================
object cuerpo{

method esPisable() = true
var movimiento = null

method iniciar(){
game.addVisual(self)



// Colision
game.onCollideDo(self, { objeto => objeto.interactuarConPersonaje(self) })

// Movimiento
keyboard.up().onPressDo({movimiento = arriba self.moverCuerpo() })
keyboard.down().onPressDo({movimiento = abajo self.moverCuerpo() })
keyboard.left().onPressDo({movimiento = izquierda self.moverCuerpo() })
keyboard.right().onPressDo({movimiento = derecha self.moverCuerpo() })
}

// Imagen
method image() = "Rojo.png"

// Cuerpo
const cuerpo = [self]

method agregarACuerpo(compi){
cuerpo.add(compi)
method clear(){
compis.clear()
}

// Desplazamiento
method puedeAvanzar(posicion) = game.getObjectsIn(posicion).all({objeto => objeto.esPisable()})
// Cuerpo
const property compis = []

method moveTo(movement){
position = movement.nuevaPosicion(self)
method agregarACuerpo(compi){
compis.add(compi)
}

method eliminarCompi(compi){
compis.remove(compi)
}

method moverCuerpo(){
const cuerpoPuedeAvanzar = cuerpo.all({compi => compi.puedeAvanzar(movimiento.nuevaPosicion(compi))})
const cuerpoPuedeAvanzar = compis.all({compi => compi.puedeAvanzar(movimiento.nuevaPosicion(compi))})
if(cuerpoPuedeAvanzar)
cuerpo.forEach({elemento => elemento.moveTo(movimiento)}) //Mueve a los elementos del cuerpo
compis.forEach({elemento => elemento.moveTo(movimiento)}) //Mueve a los elementos del cuerpo
}

// Victoria
method victoraValida() = juegoStickyBlock.nivelActual().cuerpoSobreMeta(cuerpo) // Verifica si existen compis sobre cada meta
method victoriaValida() = juegoStickyBlock.nivelActual().cuerpoSobreMeta() // Verifica si existen compis sobre cada meta
}

//*==========================| Personajes |==========================
//--------- StickyCompis ---------
class StickyBlock{
method iniciar(){
Expand All @@ -136,7 +124,7 @@ class OnlyVisual{
}

//Imagen
method image() = "Azul.png"
method image() = "Rojo.png"

//Posicion
var property position
Expand All @@ -153,10 +141,13 @@ class OnlyVisual{
]

//Setea el compi como elemento del cuerpo del personaje principal
method setAsCuerpo(personajePrincipal){
const pj = personajePrincipal
method setAsCuerpo(){

self.eliminarHitBoxes()
game.onCollideDo(self, {objeto => objeto.interactuarConPersonaje(pj)})

cuerpo.agregarACuerpo(self)

game.onCollideDo(self, {objeto => objeto.interactuarConPersonaje(self)})
}

method iniciarHitBoxes(){
Expand All @@ -173,8 +164,15 @@ class OnlyVisual{
method moveTo(movimiento){
position = movimiento.nuevaPosicion(self)
}
}

//Desaparecer 🚙😥🔫
method desaparecer(){
game.removeVisual(self)
cuerpo.eliminarCompi(self)
}
}

//--------- HitBox ---------
class HitBox{
method iniciar(){
game.addVisual(self)
Expand All @@ -192,10 +190,10 @@ class OnlyVisual{
//Colision
method esPisable() = true

method interactuarConPersonaje(personajePrincipal){
method interactuarConPersonaje(pj){

//Setea como compi al padre
personajePrincipal.agregarACuerpo(padre)
padre.setAsCuerpo(personajePrincipal)
padre.setAsCuerpo()
}
}

Expand Down Expand Up @@ -231,11 +229,12 @@ class OnlyVisual{
//Colision
method esPisable() = true

method interactuarConPersonaje(personajePrincipal){
method interactuarConPersonaje(pj){

//Verifica si ha ganado el nivel
const ganoNivel = personajePrincipal.victoraValida()
if (ganoNivel) juegoStickyBlock.siguienteNivel()//TODO: pasar de nivel debe ser delegado al juego
const ganoNivel = cuerpo.victoriaValida()
if (ganoNivel) juegoStickyBlock.siguienteNivel()

}
}

Expand Down Expand Up @@ -306,4 +305,39 @@ class OnlyVisual{
method esPisable() = true

method interactuarConPersonaje(pj){}
}

class Agujero{
method iniciar(){
self.choseImage()
game.addVisual(self)
}

var activa // activa = abierta

//Imagen
const images = ["Trampa2.png","Trampa3.png","Trampa4.png","Trampa5.png"]
var image = ""

method image() = image

method choseImage(){
image = if(activa) "Trampa1.png" else images.randomized().head()

}

//Posicion
const property position

method activar(){
image = "Trampa1.png"
activa = true
}

//Colision
method esPisable() = true

method interactuarConPersonaje(compi){
if(activa) compi.desaparecer() else self.activar()
}
}

0 comments on commit 5e0433d

Please sign in to comment.