Skip to content

Commit

Permalink
Agregado de bajar lineas, Hay un problema cuando se quiere completar …
Browse files Browse the repository at this point in the history
…+ de 1 linea
  • Loading branch information
MatePirchi committed Nov 7, 2024
1 parent 1cedc60 commit a127ce9
Showing 1 changed file with 42 additions and 11 deletions.
53 changes: 42 additions & 11 deletions juego.wlk
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,14 @@ class BloqueTetris{
}

method establecerEnTablero(){
controlador.ocuparPos(a)//pasarlo como una unica posision
controlador.ocuparPos(b)
controlador.ocuparPos(c)
controlador.ocuparPos(d)
const listaDeFlagsLineaCompleta = [controlador.ocuparPos(a),
controlador.ocuparPos(b),
controlador.ocuparPos(c),
controlador.ocuparPos(d)]
if(listaDeFlagsLineaCompleta.any({flag => flag > -1})){ //Si hubo una linea completa que se ejecute el method quitar linea completa
const yDeFilaCompleta = listaDeFlagsLineaCompleta.filter({flag => flag > -1}).head()
controlador.quitarLineaCompleta(yDeFilaCompleta)
}
}

method xCentro() = xCentro
Expand Down Expand Up @@ -365,7 +369,6 @@ object controlador {
bloqueUnidad.image("numero" + (contador%10) + ".png")
bloqueDecena.image("numero" + (contador/10).truncate(0) + ".png")
}

var contadoresDeLineaCompleta = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] //Se suma 1 cada vez que se ocupa un lugar de su fila, hay 1 contador por cada fila
const matriz = [ //Para acceder a indice usar coordenada 19-y, asi fila inferior es y = 0 y la superior es y = 19
[new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz(), new ElementoMatriz()],
Expand Down Expand Up @@ -408,19 +411,25 @@ object controlador {
const x = pieza.position().x()
const y = pieza.position().y()
if(y > 19){
if (!finjuego){
if (!finjuego){
finjuego = true
self.perder()
}
return -1
}else{
matriz.get(19-y).get(x-18).pieza(pieza)
contadoresDeLineaCompleta = contadoresDeLineaCompleta.take(19 - y) + [(contadoresDeLineaCompleta.get(19 - y)) + 1] + contadoresDeLineaCompleta.drop(19 - y + 1)
if (contadoresDeLineaCompleta.get(19 - y) == 10) {
self.eliminarLinea(19 - y)
contadoresDeLineaCompleta = contadoresDeLineaCompleta.take(19 - y) + [0] + contadoresDeLineaCompleta.drop(19 - y + 1)
}
const huboLineaCompleta = (contadoresDeLineaCompleta.get(19 - y) == 10) //La agrego porque si no al retornar me marca un warning de que estoy usando mal el if
if (huboLineaCompleta) {
return y
}
return -1
}
}
method quitarLineaCompleta(yDeFilaCompleta){
self.eliminarLinea(19 - yDeFilaCompleta)
self.bajarLineas(19 - yDeFilaCompleta)
}

method dirEstaLibre(dir, listaPiezas){
if (dir == "derecha"){
Expand All @@ -443,16 +452,38 @@ object controlador {

method eliminarLinea(indexLinea){
var columna = 0
contadoresDeLineaCompleta = [0] + contadoresDeLineaCompleta.take(indexLinea) + contadoresDeLineaCompleta.drop(indexLinea + 1)//Saco la linea completa de los contadores
10.times({_=>
game.removeVisual(matriz.get(indexLinea).get(columna).pieza())
matriz.get(indexLinea).get(columna).pieza(null)
columna += 1
})
self.bajarLineas(indexLinea)

}


method bajarLineas(indexLinea){//recibe el indice (de la matriz) de la fila que se elimino
var matrizAuxiliar = matriz.take(indexLinea)//.filter({fila => fila.any({elemento => elemento.pieza() != null})}) //Agarro solo las filas que van a bajar y tienen alguna pieza
const contadorLineas= matrizAuxiliar.size() //La cantidad de lineas en esta matriz sera la cantidad de veces que se va a hacer el proceso de bajar
var lineaActual = indexLinea-1 //La fila que se va a bajar primero
contadorLineas.times({
_=>
//De la ultima fila de esta matriz, bajamos todos 1 lugar
matrizAuxiliar.last().forEach({elemento =>
if(elemento.pieza() != null){
elemento.pieza().caer() //actualizamos la posision real (visual) de la pieza
matriz.get(lineaActual+1).get(elemento.pieza().position().x()-18).pieza(elemento.pieza()) //Ponemos la nueva pos de la pieza en la matriz
}
})
matriz.get(lineaActual).forEach({elemento => elemento.pieza(null)}) //Borramos la linea de la matriz
lineaActual -= 1
matrizAuxiliar = matrizAuxiliar.take(matrizAuxiliar.size()-1) //sacamos la linea de la matriz auxiliar
})



}
method bajarLineasViejo(indexLinea){//recibe el indice (de la matriz) de la fila que se elimino
var listaAuxiliar = []
var contadorLineas= indexLinea

Expand Down

0 comments on commit a127ce9

Please sign in to comment.