diff --git a/comida.wlk b/comida.wlk index 15cfed1..e614384 100644 --- a/comida.wlk +++ b/comida.wlk @@ -1,19 +1,22 @@ import homero.* import wollok.game.* import tableros.* - -// TODO: La velocidad no debe ser la de homero, sino el coeficiente general de tick de caída -// TODO: Deben existir cosas que no conviene agarrar (silla de plástico) porque pierden de una -// TODO: Cuando agarra la cerveza se invierten los movimientos -> NO VALE USAR IF EN NINGUN LADO -// POLEMORFESMOOOOOOOOO +import niveles.* class Comida{ var property nombre var property puntos var property velocidad + var property velocidadCaida const tipoAvance = aLaDerecha const fulminante = noPierde + method velocidadCaida() = velocidadCaida + + method velocidadCaida(nuevaVelocidad){ + velocidadCaida = nuevaVelocidad + } + var position = new MutablePosition(x=(0..game.width()).anyOne()*2, y=game.height()) method image() = nombre + ".png" @@ -25,10 +28,10 @@ class Comida{ method bajar(){ if (position.y() >= -2){ - position.goDown(2) + position.goDown(1) }else{ game.removeVisual(self) - position.goUp(18) + position.goUp(game.height()) self.positionX((0..(game.width()-2)).anyOne()) game.addVisual(self) } @@ -87,16 +90,16 @@ object noPierde{ } } -const rosquilla = new Comida(nombre="rosquilla", puntos=5, velocidad=0) -const banana = new Comida(nombre="banana", puntos=-3, velocidad=1.2) -const plutonio = new Comida(nombre="plutonio", puntos=15, velocidad=0.25) -const cerveza = new Comida(nombre="cerveza", puntos=15, velocidad=0.25,tipoAvance=aLaIzquierda) -const choripan = new Comida(nombre="choripan", puntos=7, velocidad=0.5) -const mate = new Comida(nombre="mate", puntos=20, velocidad=0.1) -const te = new Comida(nombre="te", puntos=-50, velocidad=2) -const ensalada = new Comida(nombre="ensalada", puntos=-15, velocidad=1.75) -const guiso = new Comida(nombre="guiso", puntos=15, velocidad=0.75) -const silla = new Comida(nombre="silla", puntos=-100, velocidad=1, fulminante=pierde) +const rosquilla = new Comida(nombre="rosquilla", puntos=5, velocidad=0, velocidadCaida=1500) +const banana = new Comida(nombre="banana", puntos=-3, velocidad=1.2, velocidadCaida=1400) +const plutonio = new Comida(nombre="plutonio", puntos=15, velocidad=0.25, velocidadCaida=1300) +const cerveza = new Comida(nombre="cerveza", puntos=15, velocidad=0.25, velocidadCaida=1200, tipoAvance=aLaIzquierda) +const choripan = new Comida(nombre="choripan", puntos=7, velocidad=0.5, velocidadCaida=1100) +const mate = new Comida(nombre="mate", puntos=20, velocidad=0.1, velocidadCaida=1000) +const te = new Comida(nombre="te", puntos=-50, velocidad=2, velocidadCaida=900) +const ensalada = new Comida(nombre="ensalada", puntos=-15, velocidad=1.75, velocidadCaida=800) +const guiso = new Comida(nombre="guiso", puntos=15, velocidad=0.75, velocidadCaida=700) +const silla = new Comida(nombre="silla", puntos=-100, velocidad=1, velocidadCaida=600, fulminante=pierde) const comidasNivel1 = [rosquilla, banana, plutonio, choripan, cerveza,silla] const comidasNivel2 = comidasNivel1 + [mate,ensalada,guiso,te] diff --git a/homero.wlk b/homero.wlk index 7dce4ae..88738b9 100644 --- a/homero.wlk +++ b/homero.wlk @@ -17,8 +17,9 @@ object homero{ method come(comida) { ultimaComida = comida - self.sumarPuntos(comida.puntos()) juego.velocidad(comida.velocidad()) + juego.actualizarCaida() + self.sumarPuntos(comida.puntos()) } method position() = position @@ -47,10 +48,3 @@ object homero{ method image() = "homero-"+ ultimaComida.image() } - -// Usar bastante polimorfismo. Podemos usarlo con los objetos que caen (las caracteristicas de los objetos, comportamientios, efectos sobre Homero, puntos, -// si tiene un efecto de mejora o peora sobre Homero que le cambie la imagen de él), la imagen de fondo por cada nivel, (efectos de sonido, musica para mas adelante) -// Ivo da permiso para repetir el permiso "bajá" -> Importante -// Dos niveles con fondos distintos (idealmente) -// Para pasar de nivel tenemos que matar el código del 1er nivel para se que incorpore el siguiente y asi sucesivamente -// No poner en Tests colisiones o ticks diff --git a/niveles.wlk b/niveles.wlk index c6e3bc0..7b95c33 100644 --- a/niveles.wlk +++ b/niveles.wlk @@ -4,15 +4,17 @@ import tableros.* import wollok.game.* import fondos.* -//Estados : inicio, jugando, finalizado -// TODO: pensar la estructura general de cada nivel, y lo que difiere. -// No repetir lo general. -> Pista, seguro usarán clases. -// Pista: quizás la herencia pueda ayudar también. -// No repetir nada de lógica. object juego { var nivelActual = nivel1 var velocidad = 1 + var contador = 0 + + method contador () = contador + + method sumarContador(){ + contador = contador + 100 + } method verificarFinDeNivel(){ nivelActual.verificarFinDeNivel() @@ -21,6 +23,11 @@ object juego { } } + method actualizarCaida(){ + game.removeTickEvent("baja") + self.nivelActual().bajarComidas() + } + method nivelActual() = nivelActual method velocidad(x){ @@ -41,6 +48,15 @@ class Nivel{ estado = x } + method bajarComidas(){ + //lvl1 + game.onTick(rosquilla.velocidadCaida()* juego.velocidad(), "baja", {rosquilla.bajar()}) + game.onTick(cerveza.velocidadCaida()* juego.velocidad(), "baja", {cerveza.bajar()}) + game.onTick(banana.velocidadCaida()* juego.velocidad(), "baja", {banana.bajar()}) + game.onTick(plutonio.velocidadCaida()* juego.velocidad(), "baja", {plutonio.bajar()}) + game.onTick(silla.velocidadCaida()* juego.velocidad(), "baja", {silla.bajar()}) + } + method inicializarValores(){ homero.puntos(0) juego.velocidad(1) @@ -73,22 +89,22 @@ class Nivel{ //Que el ontick sea global y que el juego.velocidad() sea como un contador de ticks, en el que si pasa cierto tiempo //baja la comida (para que se actualice en el juego) + //ACA: Un solo onTick que haga bajar todas las comidas, que tendrías un IF que cada cierta cantidad de onTicks. El onTick tiene que ser global del juego. + //Contador de tick, un valor que se calcula de la propia velocidad y de la velocidad de la comida, y eso que sea divisor del contador que tengo. + //hacer que los asserts sean mas lindos, corregir la velocidad + method iniciarNivel(){ self.estado("jugando") game.removeVisual(mensajes) comidasNivel1.forEach({comida => game.addVisual(comida)}) - game.onTick(1000 * juego.velocidad(), "baja", {rosquilla.bajar()}) - game.onTick(800 * juego.velocidad() , "baja", {banana.bajar()}) - game.onTick(400 * juego.velocidad() , "baja", {choripan.bajar()}) - game.onTick(900 * juego.velocidad() , "baja", {cerveza.bajar()}) - game.onTick(500 * juego.velocidad() , "baja", {plutonio.bajar()}) - game.onTick(200 * juego.velocidad() , "baja", {silla.bajar()}) - keyboard.a().onPressDo({homero.moverseIzquierda()}) keyboard.d().onPressDo({homero.moverseDerecha()}) - game.onCollideDo(homero, {cosa => cosa.interactua(homero) }) + + self.bajarComidas() + + game.onCollideDo(homero, {cosa => cosa.interactua(homero)}) game.onTick(1000, "restarSegundo", {tiempo.restarSegundo()}) } @@ -125,6 +141,21 @@ class Nivel{ object nivel2 inherits Nivel(estado = "espera"){ + override method bajarComidas(){ + //lvl1 + game.onTick(rosquilla.velocidadCaida() * juego.velocidad() * 2, "baja", {rosquilla.bajar()}) + game.onTick(cerveza.velocidadCaida()* juego.velocidad() * 2, "baja", {cerveza.bajar()}) + game.onTick(banana.velocidadCaida()* juego.velocidad() * 2, "baja", {banana.bajar()}) + game.onTick(plutonio.velocidadCaida()* juego.velocidad() * 2, "baja", {plutonio.bajar()}) + game.onTick(silla.velocidadCaida()* juego.velocidad() * 2, "baja", {silla.bajar()}) + + //lvl2 + game.onTick(mate.velocidadCaida() * juego.velocidad(), "baja", {mate.bajar()}) + game.onTick(te.velocidadCaida() * juego.velocidad() , "baja", {te.bajar()}) + game.onTick(ensalada.velocidadCaida() * juego.velocidad(), "baja", {ensalada.bajar()}) + game.onTick(guiso.velocidadCaida() * juego.velocidad() , "baja", {guiso.bajar()}) + } + override method iniciarFondo(){ game.title("Homero en El Obelisco") @@ -143,18 +174,8 @@ object nivel2 inherits Nivel(estado = "espera"){ self.estado("jugando") game.removeVisual(mensajeParaNivel2) comidasNivel2.forEach({comida => game.addVisual(comida)}) - //lvl2 - game.onTick(1200 * juego.velocidad(), "baja", {mate.bajar()}) - game.onTick(500 * juego.velocidad() , "baja", {te.bajar()}) - game.onTick(600 * juego.velocidad(), "baja", {ensalada.bajar()}) - game.onTick(1500 * juego.velocidad() , "baja", {guiso.bajar()}) - //lvl1 - game.onTick(1200 * juego.velocidad(), "baja", {rosquilla.bajar()}) - game.onTick(1300 * juego.velocidad() , "baja", {banana.bajar()}) - game.onTick(1400 * juego.velocidad() , "baja", {choripan.bajar()}) - game.onTick(800 * juego.velocidad() , "baja", {cerveza.bajar()}) - game.onTick(1000 * juego.velocidad() , "baja", {plutonio.bajar()}) - game.onTick(200 * juego.velocidad() , "baja", {silla.bajar()}) + + self.bajarComidas() game.onTick(1000, "restarSegundo", {tiempo.restarSegundo()}) } @@ -174,6 +195,5 @@ object nivel2 inherits Nivel(estado = "espera"){ } -//Estados nivel2 : espera,inicio, jugando, finalizado diff --git a/pruebas.wtest b/pruebas.wtest index e3338f1..d7059a6 100644 --- a/pruebas.wtest +++ b/pruebas.wtest @@ -5,13 +5,10 @@ import comida.* import tableros.* describe "homero" { - // TODO: Hay que testear funcionalidad interesante, lógica del juego. test "Homero inicia con 0 puntos" { assert.equals(homero.puntos(), 0) } - // TODO: Si quieren chequear igualdad, deben usar .equals - test "Homero inicia en la posicion x=mitad de la pantalla, y=0" { assert.equals(homero.position().x(), (game.width()/2).roundUp()) assert.equals(homero.position().y(), 0) @@ -84,11 +81,4 @@ describe "homero" { assert.equals(nivel1.estado(),"ganado") } - - // TODO: tests de los distintos comportamientos de las comidas - // (o sea que la velocidad y los puntos se aumenten correctamente) - // TODO: test que se mueve correctamente de acuerdo a la velocidad (la cantidad de casillas) - // TODO: tests de distintos casos de movimientos (por ejemplo que no salga de la pantalla) - // Pensar los casos de tests que yo quiero probar. (escribir con texto) - // Elijan algún conjunto lindo y cerrado para testear. } \ No newline at end of file