diff --git a/assets/cofreabiertovacio.png b/assets/cofreabiertovacio.png new file mode 100644 index 0000000..5252265 Binary files /dev/null and b/assets/cofreabiertovacio.png differ diff --git a/assets/cofreabiertovaritaa.png b/assets/cofreabiertovaritaa.png new file mode 100644 index 0000000..72e606c Binary files /dev/null and b/assets/cofreabiertovaritaa.png differ diff --git a/assets/cofrecerrado.png b/assets/cofrecerrado.png new file mode 100644 index 0000000..e31e2dd Binary files /dev/null and b/assets/cofrecerrado.png differ diff --git a/assets/harryCongelado.png b/assets/harryCongelado.png new file mode 100644 index 0000000..31e68ad Binary files /dev/null and b/assets/harryCongelado.png differ diff --git a/assets/harry.png b/assets/harryHumanoConNada.png similarity index 100% rename from assets/harry.png rename to assets/harryHumanoConNada.png diff --git a/assets/harryHumanoConVarita.png b/assets/harryHumanoConVarita.png new file mode 100644 index 0000000..cbdabd6 Binary files /dev/null and b/assets/harryHumanoConVarita.png differ diff --git a/assets/nivelM.png b/assets/nivelM.png index 4a72295..87e3289 100644 Binary files a/assets/nivelM.png and b/assets/nivelM.png differ diff --git a/assets/sirius.png b/assets/siriusHumanoConNada.png similarity index 100% rename from assets/sirius.png rename to assets/siriusHumanoConNada.png diff --git a/assets/siriusHumanoConVarita.png b/assets/siriusHumanoConVarita.png new file mode 100644 index 0000000..8fd93fc Binary files /dev/null and b/assets/siriusHumanoConVarita.png differ diff --git a/assets/siriusPerro.png b/assets/siriusPerroConNada.png similarity index 100% rename from assets/siriusPerro.png rename to assets/siriusPerroConNada.png diff --git a/assets/siriusPerroConVarita.png b/assets/siriusPerroConVarita.png new file mode 100644 index 0000000..8e15c73 Binary files /dev/null and b/assets/siriusPerroConVarita.png differ diff --git a/assets/varita.png b/assets/varita.png new file mode 100644 index 0000000..9cab0dd Binary files /dev/null and b/assets/varita.png differ diff --git a/src/enemigos.wlk b/src/enemigos.wlk index d3b74fa..f330679 100644 --- a/src/enemigos.wlk +++ b/src/enemigos.wlk @@ -2,6 +2,8 @@ import wollok.game.* import direcciones.* import personajes.* import nivelx.* +import objetosUtiles.* + class Guardia { @@ -12,7 +14,7 @@ class Guardia { method image() { - return "guardia." + ladoAMover.toString() + ".png" + return "dementor_" + ladoAMover.toString() + ".png" } method perseguir() { @@ -242,10 +244,10 @@ class ZonaDeGuardias { } -class PuertaNivel{ +object puertaNivel{ var property position = game.at(0, 0) - var property estado = abierta + var property estado = abierto method puedePasar(){ @@ -265,48 +267,14 @@ class PuertaNivel{ } method sePuedePasarNivel(){ - return self.estanHarryYSirius() and protagonistas.puedenPasarPuerta(self) + return self.estanHarryYSirius() and protagonistas.puedenPasarPuerta(self) and estado.estaAbierta() } method estanHarryYSirius() { // se fija si estan los dos para cambiar de nivel return harry.position() == position && sirius.position() == position } - -} - -object puertaNivel inherits PuertaNivel{ - -} - -class Puerta { - - var property position = game.at(0, 0) - var property estado = cerrada - - method colisionarCon(personaje){} - - method esSolidoPara(personaje){ - // La puerta sabe si esta abierta o no segun el estado que posea. - return estado.esSolidoPara(personaje) - } - method seAbre(){ - estado = abierta - } - - } -object abierta{ - // no importa el personaje, si esta abierta NO es solida - method esSolidoPara(personaje) = false - method estaAbierta() = true -} - -object cerrada{ - // no importa el personaje, si esta cerrada SI es solida - method esSolidoPara(personaje) = true - method estaAbierta() = false -} \ No newline at end of file diff --git a/src/juego.wpgm b/src/juego.wpgm index c4498eb..db86a91 100644 --- a/src/juego.wpgm +++ b/src/juego.wpgm @@ -30,7 +30,9 @@ program juego { keyboard.space().onPressDo({ sirius.usarObjeto() }) keyboard.enter().onPressDo({ harry.usarObjeto() }) //keyboard.p().onPressDo({ harry.estaticos()}) - - + keyboard.o().onPressDo({ harry.abrir() }) + keyboard.e().onPressDo({ sirius.abrir() }) + keyboard.q().onPressDo({ sirius.soltar() }) + game.start() } diff --git a/src/nivelx.wlk b/src/nivelx.wlk index db719e1..58a950b 100644 --- a/src/nivelx.wlk +++ b/src/nivelx.wlk @@ -6,12 +6,16 @@ import direcciones.* import musica.* object nivelActual{ // hago directamente un obj nivel que se acuerde en donde esta. - var property nivelActual = nivel1 + var property nivelActual = nivelM method pasarDeNivel(){ nivelActual = nivelActual.siguiente() nivelActual.iniciar() } + + method reiniciar(){ + nivelActual.iniciar() + } } class Nivel{ @@ -76,11 +80,11 @@ object nivelM inherits Nivel { [_, _, _, _, _, _, _, _, _, _, p, _, _, _, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _], [_, _, p, p, p, p, p, p, p, p, p, p, _, _, p, p, p, p, p, p, p, p, p, p, p, p, p, p, _, _], [_, _, p, p, p, p, p, p, p, p, p, p, _, _, p, p, p, p, p, p, p, p, p, p, p, p, p, p, _, _], - [_, _, p, _, _, _, _, _, _, _, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, p, _, _], - [_, _, p, _, _, _, _, _, _, _, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, p, _, _], - [_, _, p, _, _, _, _, _, _, _, p, _, _, _, _, _, _, _, _, _, gp, _, _, lr6, _, _, _, p, _, _], + [_, _, p, _, _, p, p, _, _, _, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, p, _, _], + [_, _, p, _, _, c, p, _, _, _, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, p, _, _], + [_, _, p, _, _, ss, ss, _, _, _, p, _, _, _, _, _, _, _, _, _, gp, _, _, lr6, _, _, _, p, _, _], [_, _, p, p, p, _, _, p, _, p, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, p, p, p], - [p, p, p, p, p, dr, dr, p, tn, p, p, _, _, _, _, _, _, gp, _, _, _, _, gp, _, _, _, _, p, p, p], + [p, p, p, p, p, p, p, p, tn, p, p, _, _, _, _, _, _, gp, _, _, _, _, gp, _, _, _, _, p, p, p], [_, _, _, h, s, _, _, _, _, _, _, _, _, _, gp, _, _, lr1, _, _, _, _, _, _, _, _, _, _, _, _], [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, gp, _, _, _, lr5, _, _, _, _, _], [p, p, p, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, lr3, _, _, _, _, _, _, p, p, p], @@ -101,39 +105,6 @@ object nivelM inherits Nivel { } -object lr1 inherits LlaveRota{ - - override method image() = "LR1.png" - -} - -object lr2 inherits LlaveRota{ - - override method image() = "LR2.png" - -} - -object lr3 inherits LlaveRota{ - - override method image() = "LR3.png" - -} - -object lr4 inherits LlaveRota{ - - override method image() = "LR4.png" - -} -object lr5 inherits LlaveRota{ - - override method image() = "LR5.png" - -} -object lr6 inherits LlaveRota{ - - override method image() = "LR6.png" - -} object nivel1 inherits Nivel { @@ -216,6 +187,7 @@ object _{ method generar(position){} } + object i{ method generar(_position){ const camino = new CaminoInvalido(position = _position) @@ -254,13 +226,6 @@ object p{ } -object dr{ - - method generar(position){ - game.addVisual(new Puerta(position = position)) - } -} - object g{ @@ -282,6 +247,41 @@ object gp{ } +object c{ + + method generar (_position){ + cofre.position(_position) + game.addVisual(cofre) + objetosUsables.agregarObjeto(cofre) + } + +} + + +object ss{ + + method generar(position){ + const sensor = new SensorCofre(position = position) + game.addVisual(sensor) + objetosUsables.agregarObjeto(sensor) + } +} + + +object v{ + method generar (_position){ + varita.position(_position) + game.addVisual(varita) + objetosUsables.agregarObjeto(varita) + } +} + +object lr1 inherits LlaveRota{override method image() = "LR1.png"} +object lr2 inherits LlaveRota{override method image() = "LR2.png"} +object lr3 inherits LlaveRota{override method image() = "LR3.png"} +object lr4 inherits LlaveRota{override method image() = "LR4.png"} +object lr5 inherits LlaveRota{override method image() = "LR5.png"} +object lr6 inherits LlaveRota{override method image() = "LR6.png"} object a{ diff --git a/src/objetosUtiles.wlk b/src/objetosUtiles.wlk index 3330937..c23d844 100644 --- a/src/objetosUtiles.wlk +++ b/src/objetosUtiles.wlk @@ -1,26 +1,23 @@ import wollok.game.* - +import personajes.* class Objeto { var property position = game.at(0,0) method image() - method serUsado(personaje) { - } - + method serUsado(personaje) {} + method abrir(personaje){} method colisionarCon(personaje){} method esSolidoPara(personaje){ return false } - + } - - class Oculto inherits Objeto{ override method image() = "ocultoo.png" @@ -62,20 +59,76 @@ class LlaveRota inherits Objeto{ game.removeVisual(self) } - } object varita inherits Objeto{ - - override method image() = "varita" + + method esLlave() = false + method esVarita() = true + + override method image() = "varita.png" override method serUsado(personaje){ personaje.llevaVarita() game.removeVisual(self) } } +class Cofre inherits Objeto{ + + var property estado = cerrado + override method image() = "cofre" + self.estado() + ".png" + override method abrir(personaje){ + personaje.contenidoPermitido() + self.estado(estado.estadoContrario()) + } + + method estaEnFrente(personaje){ + return personaje.position().y() == (position.y() - 1) + } + + + override method esSolidoPara(personaje){ + return true + } + method estaAbierto(){ + return estado.estaAbierto() + } +} + + + +object cerrado{ + + var property contenido = varita + method estadoContrario() = "" + abierto + self.contenido() + "" + method estaAbierto() = false + +} + +object abierto{ + + method estadoContrario() = cerrado + method estaAbierto() = true +} + +object cofre inherits Cofre{} + +class SensorCofre { + + var property position + method colisionarCon(personaje){} + method esSolidoPara(personaje) = false + method abrir(personaje){ + cofre.abrir(personaje) + } + method serUsado(personaje){ + personaje.obtenerVarita() + cerrado.contenido(vacio) + } +} +object vacio{} diff --git a/src/personajes.wlk b/src/personajes.wlk index b398813..9339603 100644 --- a/src/personajes.wlk +++ b/src/personajes.wlk @@ -7,28 +7,26 @@ import enemigos.* class Personaje { var property estado = self.estadoHabitual() - var property nivel = null var property position = game.at(0, 0) var property posicionPrincipio = game.at(0, 0) const property llavesRotas = #{} var property tieneVarita = false + var property nivel = nivelActual + var property puedeAgarrarVarita = false method transformacion() method estadoHabitual() - method llaveEnMano() - method congelado() method entrarEnZonaGuardias() method image() = estado.image() + ".png" - method varitaEnMano() - method colisionarCon(personaje) { } + method transformarse() { estado = self.transformacion() @@ -40,7 +38,19 @@ class Personaje { self.validarUso(colisiones) colisiones.head().serUsado(self) } - + + method abrir(){ + const colisiones = objetosUsables.losQuePertenecen(game.colliders(self)) + self.validarAbrir(colisiones) + colisiones.head().abrir(self) + } + + method validarAbrir(objetos) { + if (objetos.isEmpty()) { + self.error("No tengo nada para abrir") + } + } + method validarUso(objetos) { if (objetos.isEmpty()) { self.error("No tengo nada para usar") @@ -99,13 +109,12 @@ class Personaje { method repararLlave() { self.validarReparar() - estado = self.llaveEnMano() + estado.objeto(llave) llavesRotas.clear() - estado.tieneLlave() } method validarReparar() { - if (not self.sePuedeRepararLlave() and not self.tieneVarita()) { + if (not self.sePuedeRepararLlave() or not self.tieneVarita()) { self.error("¡No puedo reparar la llave todavia!") } } @@ -120,40 +129,54 @@ class Personaje { } } - method abrirPuertaCerrada(puerta) { - self.validarAbrirPuerta(puerta) - puerta.seAbre(self) - self.estado(self.estadoHabitual()) + method contenidoPermitido(){ + puedeAgarrarVarita = true } - - method validarAbrirPuerta(puerta) { - if (not estado.tieneLlave()) { - self.error("No puedo abrirla") + + method obtenerVarita(){ + if (self.puedeAgarrarVarita()){ + tieneVarita = true + estado.objeto(varita) } } - method llevarVarita(){ - tieneVarita = true - self.estado(self.varitaEnMano()) - } - + +// method usarLlave(puerta){ +// if (self.estaEnLaPuerta(puerta)){ +// puerta.seAbre() +// } +// } + + } -object harry inherits Personaje { +object protagonistas { - var property patronus = 1 + const property personajes = #{ harry, sirius } + method perder() { + personajes.forEach({ personaje => personaje.perder()}) + } - override method llaveEnMano() { - return harryConLlave + method congelar() { + personajes.forEach({ personaje => personaje.congelar()}) } - - override method varitaEnMano() { - return harryConVarita + + method descongelar() { + personajes.forEach({ personaje => personaje.estado(personaje.estadoHabitual())}) } - + method puedenPasarPuerta(puerta) { + return personajes.all({ personaje => personaje.puedePasar(puerta) }) + } + +} + +object harry inherits Personaje { + + var property patronus = 1 + override method transformacion() { return harryInvisible @@ -171,25 +194,36 @@ object harry inherits Personaje { return harryCongelado } - -// method estaticos(){ -// if (patronus == 1){ -// guardiasNoPerseguidores.estaticos() -// patronus = 0 -// } -// } } object sirius inherits Personaje { + + + +// override method varitaEnMano() { +// return siriusConVarita +// } +// +// override method llaveEnMano() { +// return siriusConLlave +// } - override method varitaEnMano() { - return siriusConVarita + method soltar(){ + const colisiones = objetosUsables.losQuePertenecen(game.colliders(self)) + self.validarAbrir(colisiones) + colisiones.head().tirar(self) + } + + method validarSoltar(objetos) { + if (objetos.isEmpty() ) { + self.error("No tengo nada para abrir") + } } - override method llaveEnMano() { - return siriusConLlave + method tirar(){ + estado.objeto().position(position) } override method transformacion() { @@ -212,175 +246,294 @@ object sirius inherits Personaje { } -object protagonistas { - - const property personajes = #{ harry, sirius } +// estados normal - method perder() { - personajes.forEach({ personaje => personaje.perder()}) - } - - method congelar() { - personajes.forEach({ personaje => personaje.congelar()}) - } - - method descongelar() { - personajes.forEach({ personaje => personaje.estado(personaje.estadoHabitual())}) - } - - method puedenPasarPuerta(puerta) { - return personajes.all({ personaje => personaje.puedePasar(puerta) }) - } - -} - -object siriusConLlave { - - method image() = "sirius" - - method puedePasar(puerta) = false +class Estado { + var property objeto = nada + method image() = "" + self + "Con" + self.objeto() + "" method esPerseguible() = true - - method tieneLlave() = true - method puedeMoverse() = true - -} - -object siriusConVarita{ + method puedePasar(puerta) = false -} -object harryConVarita{ + method tieneLlave() = objeto.esLlave() // o objeto == llave + method tieneVarita() = objeto.esVarita() -} - -object harryConLlave { - - method image() = "harry" - - method tieneLlave() = true - - method esPerseguible() = true - - method puedePasar(puerta) = false - - method puedeMoverse() = true + method entrarEnZonaGuardias(personaje){} +// + } -object harryHumano { - method image() = "harry" - - method entrarEnZonaGuardias(personaje) { +object harryHumano inherits Estado { + + override method entrarEnZonaGuardias(personaje) { game.say(personaje, "Me pueden ver!") // game.schedule(1500, { personaje.volverAlPrincipio()}) personaje.serAtrapado() } - method esPerseguible() = true - - method puedePasar(puerta) = false - - method puedeMoverse() = true - - method tieneLlave() = false - } -object harryInvisible { - - method image() = "harryInvisible" - - method entrarEnZonaGuardias(personaje) { - } - - method esPerseguible() = false - - method puedePasar(puerta) = false - - method puedeMoverse() = true - - method tieneLlave() = false +object harryInvisible inherits Estado { + override method image() = "harryInvisible" + override method esPerseguible() = false } -object harryCongelado { - - method puedeMoverse() = false - - method puedePasar(puerta) = false - - method image() = "harry" - - method entrarEnZonaGuardias(harry) { - } - - method tieneLlave() = false +object harryCongelado inherits Estado{ + override method puedeMoverse() = false +} - method esPerseguible() = true +object siriusHumano inherits Estado {} -} +object siriusPerro inherits Estado{ -object caminando { + var property accion = ninguna + override method puedePasar(puerta) = true + override method esPerseguible() = accion.esPerseguible() - method puedeMover() { - } } -object siriusHumano { - - method image() = "sirius" +object siriusCongelado inherits Estado{ - method puedePasar(puerta) = false - - method esPerseguible() = true - - method tieneLlave() = false - - method puedeMoverse() = true - + override method puedeMoverse() = false } -object siriusPerro { - - method image() = "siriusPerro" - - method puedePasar(puerta) = true +object ninguna{ method esPerseguible() = false - - method tieneLlave() = false - - method puedeMoverse() = true - } - -object siriusPerroLadrando { - - method image() = "siriusPerro" - - method puedePasar(puerta) = true - +object ladrido{ method esPerseguible() = true +} - method tieneLlave() = false - - method puedeMoverse() = true +object nada inherits Objeto{ + + override method image(){} + method esLlave() = false + method esVarita() = false } -object siriusCongelado { +object llave inherits Objeto{ + override method image(){} + method esLlave() = true + method esVarita() = false +} - method puedeMoverse() = false +object caminando { - method image() = "sirius" + method puedeMover() { + } - method puedePasar(puerta) = false +} - method esPerseguible() = true -} +// +//object harryHumano { +// +// override method personajeCon() = "harryCon" +// +// method estadoConVarita() = harryConLlave +// +// method entrarEnZonaGuardias(personaje) { +// game.say(personaje, "Me pueden ver!") +// // game.schedule(1500, { personaje.volverAlPrincipio()}) +// personaje.serAtrapado() +// } +// +// method esPerseguible() = true +// +// method puedePasar(puerta) = false +// +// method puedeMoverse() = true +// +// method tieneLlave() = false +// +//} +// +//object harryInvisible { +// +// method image() = "harryInvisible" +// +// method entrarEnZonaGuardias(personaje) { +// } +// +// method estadoConVarita() = self +// +// method esPerseguible() = false +// +// method puedePasar(puerta) = false +// +// method puedeMoverse() = true +// +// method tieneLlave() = false +// +//} +// +//object harryCongelado { +// +// method puedeMoverse() = false +// +// method puedePasar(puerta) = false +// +// method image() = "harry" +// +// method entrarEnZonaGuardias(harry) { +// } +// +// method estadoConVarita() = self +// +// method tieneLlave() = false +// +// method esPerseguible() = true +// +//} +// +//object siriusCongelado { +// +// method puedeMoverse() = false +// +// method image() = "sirius" +// +// method puedePasar(puerta) = false +// +// method esPerseguible() = true +// method estadoConVarita() = siriusConVarita +// +//} +// +// +// +//object siriusHumano { +// +// method image() = "sirius" +// +// method puedePasar(puerta) = false +// +// method esPerseguible() = true +// +// method tieneLlave() = false +// +// method puedeMoverse() = true +// +// method estadoConVarita() = siriusConVarita +// +//} +// +//object siriusPerro { +// +// method image() = "siriusPerro" +// +// method puedePasar(puerta) = true +// +// method esPerseguible() = false +// +// method tieneLlave() = false +// +// method puedeMoverse() = true +// +// method estadoConVarita() = siriusPerroConVarita +// +//} +// +//object caminando { +// +// method puedeMover() { +// } +// +//} +// +// +// +// +// +//// estadosConObjetos +// +//object siriusConLlave { +// +// method image() = "sirius" +// +// method puedePasar(puerta) = false +// +// method esPerseguible() = true +// +// method tieneLlave() = true +// method estadoConVarita() = siriusConVarita +// method puedeMoverse() = true +// +//} +// +//object siriusConVarita{ +// method image() = "siriusConVarita" +// +// method tieneLlave() = true +// +// method esPerseguible() = true +// +// method puedePasar(puerta) = false +// +// method puedeMoverse() = true +// method estadoConVarita() = self +//} +// +//object harryConVarita{ +// +// method image() = "harryConVarita" +// +// method tieneLlave() = true +// +// method esPerseguible() = true +// +// method puedePasar(puerta) = false +// method estadoConVarita() = self +// method puedeMoverse() = true +//} +// +//object harryConLlave { +// +// method image() = "harry" +// +// method tieneLlave() = true +// +// method esPerseguible() = true +// +// method puedePasar(puerta) = false +// +// method puedeMoverse() = true +// +// method estadoConVarita() = harryConVarita +// +//} +// +// +//object siriusPerroLadrando { +// +// method image() = "siriusPerro" +// +// method puedePasar(puerta) = true +// +// method esPerseguible() = true +// +// method tieneLlave() = false +// method estadoConVarita() = siriusPerroConVarita +// method puedeMoverse() = true +// +//} +//object siriusPerroConVarita { +// +// method estadoConVarita() = self +// method image() = "siriusPerroConVarita" +// method puedePasar(puerta) = true +// method esPerseguible() = false +// method tieneLlave() = false +// method puedeMoverse() = true +//} +// +// +// +// diff --git a/wollokREPL.wlk b/wollokREPL.wlk new file mode 100644 index 0000000..8972ab0 --- /dev/null +++ b/wollokREPL.wlk @@ -0,0 +1 @@ +object __repl {}