diff --git a/assets/perdiste.png b/assets/perdiste.png new file mode 100644 index 0000000..4b84918 Binary files /dev/null and b/assets/perdiste.png differ diff --git a/assets/perdiste2.png b/assets/perdiste2.png new file mode 100644 index 0000000..79491b2 Binary files /dev/null and b/assets/perdiste2.png differ diff --git a/enemigos.wlk b/enemigos.wlk new file mode 100644 index 0000000..f8799b9 --- /dev/null +++ b/enemigos.wlk @@ -0,0 +1,38 @@ +class Enemigo1{ + var property position = game.at(4,16) + var lado = 0 + method image() = "piopio.png" + + method moverseH(limite1, limite2){ + game.onTick(500, self, {self.muevete(limite1, limite2)}) + } + + method muevete(limite1, limite2){ + if(self.position().x() == limite2){ + lado = 1 + } + if(self.position().x() == limite1){ + lado = 0 + } + if(lado == 0 && self.position().x()limite1){ + position = game.at(self.position().x()-1, 16) + } + } + + method limpiarEnemigos(){ + game.removeVisual(self) + } + +} + +object lineaEnemiga{ + var property enemigo = new Enemigo1() + + method activar(){ + game.addVisual(enemigo) + enemigo.moverseH(4,13) + } +} \ No newline at end of file diff --git a/jugador.wlk b/jugador.wlk index d733e24..e85d078 100644 --- a/jugador.wlk +++ b/jugador.wlk @@ -1,8 +1,12 @@ import muros.* +import menus.menuPerdiste + object jugador { var position = game.at(1,1) + method jugador() = true + method position() = position method equisCorrecta(equis) = equis >= 1 && equis <= (game.width()-2) @@ -19,7 +23,7 @@ object jugador { self.position(game.at(1, 1)) game.addVisualCharacter(self) } - + var property valor = "helado.png" method image() = valor @@ -27,6 +31,11 @@ object jugador { method recolectar(fruta){ game.removeVisual(fruta) } + + method eliminate(){ + game.removeVisual(self) + //menuPerdiste.cargar() + } } object points{ @@ -35,8 +44,9 @@ object points{ frutasObtenidas += 1 } method frutasObtenidas() = frutasObtenidas - method position() = game.at((game.width()-3),(game.height()-1)) - method text() = " Puntos: " + frutasObtenidas + method position() = game.at((game.width()-3),(game.height()-1)) + method text() = " Puntos: " + frutasObtenidas + method textColor() = "FF0000FF" method reset(){ frutasObtenidas = 0 } diff --git a/mainExample.wpgm b/mainExample.wpgm index d672401..e649cd7 100644 --- a/mainExample.wpgm +++ b/mainExample.wpgm @@ -6,38 +6,46 @@ import jugador.* import puntos.* +import enemigos.* + program BadIceCreamGame { - game.cellSize(40) - game.title("Bad Ice Cream") - game.height(18) - game.width(18) - //Inicio menu - menuPersonaje.cargar() - //inicio - game.start() - - //Juego puntos - keyboard.r().onPressDo({ - const nuevaFruta = interactuador.obtenerPrimerElemento("r"," sobre una fruta para recolectarla") - if(nuevaFruta.esFruta()){ - jugador.recolectar(nuevaFruta) - points.sumarFrutas() - } - if(points.frutasObtenidas() == 10 || points.frutasObtenidas() == 20){ - spawn.dibujarFrutas() - } - if(points.frutasObtenidas() == 30){ - sincronizadorDePantallas.cambiarPantalla("ganador") - menuGanaste.cargar() - } - }) + game.cellSize(40) + game.title("Bad Ice Cream") + game.height(18) + game.width(18) + //Inicio menu + menuPersonaje.cargar() + //inicio + game.start() + + +//const position = new MutablePosition + + + //Juego puntos + keyboard.r().onPressDo({ + const nuevaFruta = interactuador.obtenerPrimerElemento("r"," sobre una fruta para recolectarla") + if(nuevaFruta.esFruta()){ + jugador.recolectar(nuevaFruta) + points.sumarFrutas() + } + if(points.frutasObtenidas() == 10 || points.frutasObtenidas() == 20){ + spawn.dibujarFrutas() + } + if(points.frutasObtenidas() == 30){ + sincronizadorDePantallas.cambiarPantalla("ganador") + menuGanaste.cargar() + } + }) + + game.onCollideDo(lineaEnemiga.enemigo(), {elemento => if(elemento.jugador()){ elemento.eliminate() sincronizadorDePantallas.cambiarPantalla("perdedor") menuPerdiste.cargar()}}) } object interactuador{ method obtenerPrimerElemento(key,accion){ - const colliders = game.colliders(jugador) - if (colliders.isEmpty()) - throw new DomainException(message = "Apreta "+ key + accion, source = jugador) + const colliders = game.colliders(jugador) + if (colliders.isEmpty()) + throw new DomainException(message = "Apreta "+ key + accion, source = jugador) return colliders.head() } } \ No newline at end of file diff --git a/menus.wlk b/menus.wlk index 015a5c7..7702826 100644 --- a/menus.wlk +++ b/menus.wlk @@ -6,6 +6,8 @@ import jugador.* import muros.* +import enemigos.* + import puntos.* import miscelaneos.* @@ -41,17 +43,17 @@ object menuPersonaje inherits Menus(add_1 = menuPersonajes, add_2 = marcoDeSelec if(sincronizadorDePantallas.pantallaActual() == tipoDeMenu){ sincronizadorDePantallas.cambiarPantalla("niveles") jugador.valor(marcoDeSeleccion.position().x()) - if(marcoDeSeleccion.position().x() == 2){ + if(marcoDeSeleccion.position().x() == 2){ //elementos del helado jugador.valor("helado.png") fondoJuego.valor("f_slime.png") visual.valor("b_fiesta.png") - spawn.puntos(["bananas.png", "uva.png", "sandia.png"]) - } else if(marcoDeSeleccion.position().x() == 7){ + spawn.puntos(["bananas.png", "uva.png", "sandia.png"]) //Rompe encapsulamiento? + } else if(marcoDeSeleccion.position().x() == 7){ //elementos del pajarito jugador.valor("piopio.png") fondoJuego.valor("f_pio.png") visual.valor("b_pio.png") spawn.puntos(["archaic coin.png", "circus coin.png", "lunaver coin.png"]) - } else { + } else { //elementos de Goku jugador.valor("goku.png") fondoJuego.valor("f_pasto.png") visual.valor("b_pasto.png") @@ -105,10 +107,9 @@ object menuGanaste inherits Menus(add_1 = ganaste, add_2 = seleccionGanaste, mov override method cargar(){ super() game.removeVisual(jugador) + lineaEnemiga.enemigo().limpiarEnemigos() game.removeVisual(fondoJuego) - //game.removeVisual(marcadorLeft) game.removeVisual(points) - //game.removeVisual(marcadorRight) escenario.limpiarEscenario() keyboard.enter().onPressDo({ if(sincronizadorDePantallas.pantallaActual() == tipoDeMenu){ @@ -126,6 +127,30 @@ object menuGanaste inherits Menus(add_1 = ganaste, add_2 = seleccionGanaste, mov }) } } +object menuPerdiste inherits Menus(add_1 = perdiste, add_2 = seleccionGanaste, moverA = seleccionGanaste, cantidadDeIncrementoParaPosiciones = 4, equisMax = 10, equisMin = 6, yeMax = 7, yeMin = 7, tipoDeMenu = "perdedor"){ + override method cargar(){ + super() + game.removeVisual(jugador) + lineaEnemiga.enemigo().limpiarEnemigos() + game.removeVisual(fondoJuego) + game.removeVisual(points) + escenario.limpiarEscenario() + keyboard.enter().onPressDo({ + if(sincronizadorDePantallas.pantallaActual() == tipoDeMenu){ + game.removeVisual(seleccionGanaste) + game.removeVisual(perdiste) + if (seleccionGanaste.position() == game.at(6, 5)) { + sincronizadorDePantallas.cambiarPantalla("jugar") + juego.jugar() + } + if (seleccionGanaste.position() == game.at(10, 5)){ + game.addVisual(finDelJuego) + game.stop() + } + } + }) + } +} object juego{ @@ -136,6 +161,8 @@ object juego{ spawn.dibujarFrutas() //dibujar muros muros.crearLaterales() + //? + lineaEnemiga.activar() //dibujar escenario escenario.generarEscenario() //dibujar puntos @@ -145,6 +172,7 @@ object juego{ //dibujar jugador jugador.posicionate() //game.addVisualCharacter(jugador) + muros.crearBordeInferior() game.showAttributes(jugador) } } @@ -155,4 +183,4 @@ object sincronizadorDePantallas{ pantalla = nuevaPantalla } method pantallaActual() = pantalla -} +} \ No newline at end of file diff --git a/miscelaneos.wlk b/miscelaneos.wlk index 468d7f3..cec9280 100644 --- a/miscelaneos.wlk +++ b/miscelaneos.wlk @@ -1,55 +1,60 @@ import jugador.jugador object fondo_de_pausa{ - var property position = game.origin() - method image() = "pausa.png" + var property position = game.origin() + method image() = "pausa.png" } object ganaste{ - var property position = game.origin() - method image() = "ganaste2.png" + var property position = game.origin() + method image() = "ganaste2.png" +} + +object perdiste{ + var property position = game.origin() + method image() = "perdiste2.png" } object menuPersonajes{ - var property position = game.origin() - method image() = "FondoSeleccion1.png" + var property position = game.origin() + method image() = "FondoSeleccion1.png" } object marcoDeSeleccion{ - var property position = game.at(2,5) - method image() = "si.png" + var property position = game.at(2,5) + method image() = "si.png" } object menuNiveles{ - var property position = game.origin() - method image() = "niveles2.png" + var property position = game.origin() + method image() = "niveles2.png" } object seleccionNivel{ - var property position = game.at(1, 11) - method image() = "nivel_s.png" + var property position = game.at(1, 11) + method image() = "nivel_s.png" } object seleccionGanaste{ - var property position = game.at(6, 5) - method image() = "nivel_s.png" + var property position = game.at(6, 5) + method image() = "nivel_s.png" } object bloqueado{ - var property position = game.at(1, 1) - method image() = "bloqueado.png" + var property position = game.at(1, 1) + method image() = "bloqueado.png" } object finDelJuego{ - var property position = game.origin() - method image() = "PantallaFinal.png" + var property position = game.origin() + method image() = "PantallaFinal.png" } object fondoJuego{ - var property position = game.origin() - var property valor = "f_slime.png" - method image() = valor - /*method image(){ + var property position = game.origin() + var property valor = "f_slime.png" + method image() = valor + /*method image(){ if(jugador.image() == "helado.png"){ return "f_slime.png" } else if(jugador.image() == "piopio.png"){ diff --git a/muros.wlk b/muros.wlk index c997fcb..09a5698 100644 --- a/muros.wlk +++ b/muros.wlk @@ -18,12 +18,17 @@ object muros{ method crearLaterales(){ const ancho = game.width() - 1 const alto = game.height() - 1 - (0 .. ancho).forEach({x => new Bloque().ubicarYDibujar(game.at(x, 0))}) // Borde inferior + //(0 .. ancho).forEach({x => new Bloque().ubicarYDibujar(game.at(x, 0))}) // Borde inferior (0 .. ancho).forEach({x => new Bloque().ubicarYDibujar(game.at(x, alto))}) // Borde superior (alto .. 0).forEach({y => new Bloque().ubicarYDibujar(game.at(0, y))}) // Borde izquierdo (alto .. 0).forEach({y => new Bloque().ubicarYDibujar(game.at(ancho, y))}) // Borde derecho } -} + method crearBordeInferior(){ + const ancho = game.width() - 1 + const alto = game.height() - 1 + (0 .. ancho).forEach({x => new Bloque().ubicarYDibujar(game.at(x, 0))}) // Borde inferior + } +}//4.times({unValor => 5.times(action)}) object escenario{ const niveles = [ diff --git a/puntos.wlk b/puntos.wlk index 9662718..05c3a27 100644 --- a/puntos.wlk +++ b/puntos.wlk @@ -3,6 +3,8 @@ import muros.* class Fruta{ var property position = posicionAleatoria.generarPosicionAleatoria() + method jugador() = false + method image(){ if(points.frutasObtenidas() < 10){ return spawn.puntos().get(0)