From 61ad99607f00f0cd5c4feaa8d9334a08e7369213 Mon Sep 17 00:00:00 2001 From: MatePirchi Date: Fri, 15 Nov 2024 01:42:49 -0300 Subject: [PATCH] Agregado Reseteo --- controlador.wlk | 9 ++ game.wpgm | 289 ++++++++++++++++++++++++++++-------------------- tetris.wlk | 155 ++++++++++++++++++++++++++ 3 files changed, 335 insertions(+), 118 deletions(-) create mode 100644 tetris.wlk diff --git a/controlador.wlk b/controlador.wlk index 6965e582..90b634c7 100644 --- a/controlador.wlk +++ b/controlador.wlk @@ -23,6 +23,15 @@ object controlador { matriz.last().add(new ElementoMatriz()) }) }) + } + + method resetear(){ + matriz.forEach({fila => fila.forEach({elemento => game.removeVisual(elemento.pieza())})}) + matriz.forEach({fila => fila.forEach({elemento => elemento.pieza(null)})}) + contadoresDeLineaCompleta = [] + 20.times({_=> + contadoresDeLineaCompleta.add(0) + }) } // ------------- Crear Bloque --------------------------------- diff --git a/game.wpgm b/game.wpgm index cc409279..a183ec3c 100644 --- a/game.wpgm +++ b/game.wpgm @@ -1,140 +1,193 @@ import juego.* import controlador.* import wollok.game.* +import tetris.* -program tetrizado { - game.title("TETRIZADO") - game.height(20) - game.width(47) - game.ground("celdaFondo.jpg") //imagen para cada celda - game.cellSize(40) //tamaño de cada celda en pixeles que coincide con el tamaño de las piezas (hecho a ojo) - controlador.inicializarMatriz() - var ticksCaida = 500 //milisiegundos cada los que las piezas descienden una posicion en el tablero - var bloqueActual = controlador.generarBloqueAleatorio() - var bloqueNext = controlador.generarBloqueAleatorio() - var bloqueHold - var bloqueSombra - var sePuedeUsarHold = true - var juegoPausado = false +// ----RUN + program tetrizado { + game.title("TETRIZADO") + game.height(20) + game.width(47) + game.ground("celdaFondo.jpg") //imagen para cada celda + game.cellSize(40) //tamaño de cada celda en pixeles que coincide con el tamaño de las piezas (hecho a ojo) + controlador.inicializarMatriz() + var ticksCaida = 500 //milisiegundos cada los que las piezas descienden una posicion en el tablero + var bloqueActual = controlador.generarBloqueAleatorio() + var bloqueNext = controlador.generarBloqueAleatorio() + var bloqueHold + var bloqueSombra + var sePuedeUsarHold = true + var juegoPausado = false - visuales.agregarVisuales() + visuales.agregarVisuales() - bloqueActual.entrarEnTablero() - bloqueSombra = controlador.crearSombraYUbicarla(bloqueActual) - bloqueNext.mostrar() - - game.start() - - keyboard.p().onPressDo({ - if (!juegoPausado){ - juegoPausado = true - visuales.mostrarVentanaPausa() - }else{ - juegoPausado = false - visuales.ocultarVentanaPausa() - } - }) - - keyboard.z().onPressDo({ - if(!juegoPausado){ - bloqueActual.rotar(antihoraria) - bloqueSombra.imitarPosRot(bloqueActual) + bloqueActual.entrarEnTablero() + bloqueSombra = controlador.crearSombraYUbicarla(bloqueActual) + bloqueNext.mostrar() + /*object musica { + method play(){ + game.sound("tetrisgameboy.mp3").play() + } } - }) - keyboard.up().onPressDo({ - if(!juegoPausado){ - bloqueActual.rotar(horaria) - bloqueSombra.imitarPosRot(bloqueActual) + keyboard.enter().onPressDo({musica.play()}) + */ + /* + method clearGame() { + game.allVisuals().forEach({ visual => game.removeVisual(visual) }) } - }) + + self.clearGame() + */ + game.start() + + keyboard.r().onPressDo({ + nivel.resetear() + puntaje.resetear() + lineas.resetear() + if(bloqueHold != null){ + bloqueHold.remover() + bloqueHold = null + } + bloqueNext.remover() + bloqueActual.remover() + bloqueSombra.remover() - keyboard.left().onPressDo({ - if(!juegoPausado){ - bloqueActual.mover(izquierda) - bloqueSombra.imitarPosMov(bloqueActual) - } - }) + controlador.resetear() - keyboard.right().onPressDo({ - if(!juegoPausado){ - bloqueActual.mover(derecha) - bloqueSombra.imitarPosMov(bloqueActual) - } - }) + bloqueActual = controlador.generarBloqueAleatorio() + bloqueNext = controlador.generarBloqueAleatorio() - keyboard.down().onPressDo({ - if(!juegoPausado){ - bloqueActual.mover(abajo) - } - }) + bloqueActual.entrarEnTablero() + bloqueSombra = controlador.crearSombraYUbicarla(bloqueActual) + bloqueNext.mostrar() + + /* + //reinniciamos numeros (ya existen los metodos) + //reiniciamos el tablero + //reiniciamos next y hold + //generamos nuevo bloque actual y nuevo bloque next + */ + }) + //MUSICA + // + /*const tetris = game.sound("tetrisgameboy.mp3") + tetris.shouldLoop(true) + keyboard.p().onPressDo({tetris.pause()}) + keyboard.r().onPressDo({tetris.resume()}) + keyboard.s().onPressDo({tetris.stop()}) + game.schedule(500, { tetris.play()} )*/ + //-----FIN MUSICA - keyboard.space().onPressDo({ - if (!juegoPausado){ - puntaje.sumar((bloqueActual.yCentro()*2).truncate(0)) - bloqueActual.hardDrop(bloqueSombra) - sePuedeUsarHold = true - bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) - bloqueNext = controlador.generarSiguienteBloque() - bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) - } + keyboard.p().onPressDo({ + if (!juegoPausado){ + juegoPausado = true + visuales.mostrarVentanaPausa() + }else{ + juegoPausado = false + visuales.ocultarVentanaPausa() + } + }) - }) - - keyboard.c().onPressDo({ - if(!juegoPausado){ - if(sePuedeUsarHold){ - sePuedeUsarHold = false - if(bloqueHold == null){ - bloqueHold = bloqueActual - bloqueHold.entrarEnHold() - bloqueActual = controlador.llamarSiguienteBloque(bloqueNext) - bloqueNext = controlador.generarSiguienteBloque() - }else{ - var bloqueAux - bloqueAux = bloqueHold - bloqueHold = bloqueActual - bloqueActual = bloqueAux - bloqueHold.entrarEnHold() - bloqueActual.entrarEnTablero() - } + keyboard.z().onPressDo({ + if(!juegoPausado){ + bloqueActual.rotar(antihoraria) + bloqueSombra.imitarPosRot(bloqueActual) + } + }) + keyboard.up().onPressDo({ + if(!juegoPausado){ + bloqueActual.rotar(horaria) + bloqueSombra.imitarPosRot(bloqueActual) + } + }) + + keyboard.left().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(izquierda) + bloqueSombra.imitarPosMov(bloqueActual) + } + }) + + keyboard.right().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(derecha) + bloqueSombra.imitarPosMov(bloqueActual) + } + }) + + keyboard.down().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(abajo) + } + }) + + keyboard.space().onPressDo({ + if (!juegoPausado){ + puntaje.sumar((bloqueActual.yCentro()*2).truncate(0)) + bloqueActual.hardDrop(bloqueSombra) + sePuedeUsarHold = true + bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) + bloqueNext = controlador.generarSiguienteBloque() bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) } - } - }) - - game.onTick(ticksCaida, "Caida", - { - if (!juegoPausado){ - bloqueActual.caer() - if(bloqueActual.estaEnElFondo()){ - game.schedule(500, { //La idea de esto es que tengas un ratito para mover la pieza antes de que se quede fija - if (bloqueActual.estaEnElFondo()){ - sePuedeUsarHold = true - bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) + }) + + keyboard.c().onPressDo({ + if(!juegoPausado){ + if(sePuedeUsarHold){ + sePuedeUsarHold = false + if(bloqueHold == null){ + bloqueHold = bloqueActual + bloqueHold.entrarEnHold() + bloqueActual = controlador.llamarSiguienteBloque(bloqueNext) bloqueNext = controlador.generarSiguienteBloque() - bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + }else{ + var bloqueAux + bloqueAux = bloqueHold + bloqueHold = bloqueActual + bloqueActual = bloqueAux + bloqueHold.entrarEnHold() + bloqueActual.entrarEnTablero() } - }) + bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + } } - } - }) - - //cada 1 minuto (60 segundos) se reduce el tiempo de caida - game.onTick(1000*60 , "Incremento de Dificultad", { - if(!juegoPausado){ - if(ticksCaida > 50){ - ticksCaida -= 50 - nivel.sumar(1) - } else { - game.removeTickEvent("Incremento de Dificultad") + }) + + game.onTick(ticksCaida, "Caida", + { + if (!juegoPausado){ + bloqueActual.caer() + + if(bloqueActual.estaEnElFondo()){ + game.schedule(500, { //La idea de esto es que tengas un ratito para mover la pieza antes de que se quede fija + if (bloqueActual.estaEnElFondo()){ + sePuedeUsarHold = true + bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) + bloqueNext = controlador.generarSiguienteBloque() + bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + } + }) + } } - } - }) - /* - No pareciera acelerarse la velocidad de caida de las piezas... - Quizas porque hay muchas acciones que se hacen cada vez que la pieza cae y - hasta que no se hacen todas no se vuelve a ejecutar el evento de caida - */ + }) + + //cada 1 minuto (60 segundos) se reduce el tiempo de caida + game.onTick(1000*60 , "Incremento de Dificultad", { + if(!juegoPausado){ + if(ticksCaida > 50){ + ticksCaida -= 50 + nivel.sumar(1) + } else { + game.removeTickEvent("Incremento de Dificultad") + } + } + }) + /* + No pareciera acelerarse la velocidad de caida de las piezas... + Quizas porque hay muchas acciones que se hacen cada vez que la pieza cae y + hasta que no se hacen todas no se vuelve a ejecutar el evento de caida + */ } diff --git a/tetris.wlk b/tetris.wlk new file mode 100644 index 00000000..0bfa6964 --- /dev/null +++ b/tetris.wlk @@ -0,0 +1,155 @@ +import juego.* +import wollok.game.* +import controlador.* + +object tetris{ + method inicioJuego(){ + game.title("TETRIZADO") + game.height(20) + game.width(47) + game.ground("celdaFondo.jpg") //imagen para cada celda + game.cellSize(40) //tamaño de cada celda en pixeles que coincide con el tamaño de las piezas (hecho a ojo) + controlador.inicializarMatriz() + var ticksCaida = 500 //milisiegundos cada los que las piezas descienden una posicion en el tablero + var bloqueActual = controlador.generarBloqueAleatorio() + var bloqueNext = controlador.generarBloqueAleatorio() + var bloqueHold + var bloqueSombra + var sePuedeUsarHold = true + var juegoPausado = false + + visuales.agregarVisuales() + + bloqueActual.entrarEnTablero() + bloqueSombra = controlador.crearSombraYUbicarla(bloqueActual) + bloqueNext.mostrar() + + game.start() + /* + method clearGame() { + game.allVisuals().forEach({ visual => game.removeVisual(visual) }) + } + + self.clearGame() + */ + + + //reinniciamos numeros (ya existen los metodos) + //reiniciamos el tablero + //reiniciamos next y hold + //generamos nuevo bloque actual y nuevo bloque next + + + keyboard.p().onPressDo({ + if (!juegoPausado){ + juegoPausado = true + visuales.mostrarVentanaPausa() + }else{ + juegoPausado = false + visuales.ocultarVentanaPausa() + } + }) + + keyboard.z().onPressDo({ + if(!juegoPausado){ + bloqueActual.rotar(antihoraria) + bloqueSombra.imitarPosRot(bloqueActual) + } + }) + keyboard.up().onPressDo({ + if(!juegoPausado){ + bloqueActual.rotar(horaria) + bloqueSombra.imitarPosRot(bloqueActual) + } + }) + + keyboard.left().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(izquierda) + bloqueSombra.imitarPosMov(bloqueActual) + } + }) + + keyboard.right().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(derecha) + bloqueSombra.imitarPosMov(bloqueActual) + } + }) + + keyboard.down().onPressDo({ + if(!juegoPausado){ + bloqueActual.mover(abajo) + } + }) + + keyboard.space().onPressDo({ + if (!juegoPausado){ + puntaje.sumar((bloqueActual.yCentro()*2).truncate(0)) + bloqueActual.hardDrop(bloqueSombra) + sePuedeUsarHold = true + bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) + bloqueNext = controlador.generarSiguienteBloque() + bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + } + + }) + + keyboard.c().onPressDo({ + if(!juegoPausado){ + if(sePuedeUsarHold){ + sePuedeUsarHold = false + if(bloqueHold == null){ + bloqueHold = bloqueActual + bloqueHold.entrarEnHold() + bloqueActual = controlador.llamarSiguienteBloque(bloqueNext) + bloqueNext = controlador.generarSiguienteBloque() + }else{ + var bloqueAux + bloqueAux = bloqueHold + bloqueHold = bloqueActual + bloqueActual = bloqueAux + bloqueHold.entrarEnHold() + bloqueActual.entrarEnTablero() + } + bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + } + } + }) + + game.onTick(ticksCaida, "Caida", + { + if (!juegoPausado){ + bloqueActual.caer() + + if(bloqueActual.estaEnElFondo()){ + game.schedule(500, { //La idea de esto es que tengas un ratito para mover la pieza antes de que se quede fija + if (bloqueActual.estaEnElFondo()){ + sePuedeUsarHold = true + bloqueActual = controlador.establecerYLlamarSiguente(bloqueActual, bloqueNext) + bloqueNext = controlador.generarSiguienteBloque() + bloqueSombra = controlador.ReemplazarSombra(bloqueActual, bloqueSombra) + } + }) + } + } + }) + + //cada 1 minuto (60 segundos) se reduce el tiempo de caida + game.onTick(1000*60 , "Incremento de Dificultad", { + if(!juegoPausado){ + if(ticksCaida > 50){ + ticksCaida -= 50 + nivel.sumar(1) + } else { + game.removeTickEvent("Incremento de Dificultad") + } + } + }) + /* + No pareciera acelerarse la velocidad de caida de las piezas... + Quizas porque hay muchas acciones que se hacen cada vez que la pieza cae y + hasta que no se hacen todas no se vuelve a ejecutar el evento de caida + */ + } +} \ No newline at end of file