A10. Ayuda Busca Minas

publicado a la‎(s)‎ 21 mar. 2017 14:55 por Antonio López Jaimes
Para quienes todavía no tienen el procedimiento para descubrir una casilla sin bomba y todas las demás en cascada, acá les dejo el pseudocódigo de cómo hacerlo.

La descripción de abajo está en PSEUDOCÓDIGO, así que ustedes deben reescribirlo adecuadamente para
ponerlo en lenguaje C.

Tablero: arreglo 2D que tiene los contadores de bombas alrededor de cada casilla.
Destapada: arreglo 2D que dice qué casilla está ya destapada.
r: renglón por destapar.
c: columna por destapar.

// Este procedimiento tratará de destapar la casilla r,c, y además verificará
// si sus casillas vecinas también se deben destapar.

Procedimiento descubrirCasilla(nRens, nCols, Tablero, Destapadas, r, c)
Inicio
    
    // Destapar posicion r,c sólo si NO está tapada y NO tenga bomba.
1:  Si Destapada[r][c] = FALSO y Tablero[r][c] != 9 Entonces

2:      Destapada[r][c] = TRUE // La marcamos como ya destapada
        
        //Cuando la casilla r,recien destapada tiene al menos una bomba alrededor, NO seguimos.
        //Pero, si casilla r,c NO tiene bombas alrededor tratamos de destapar sus vecinas.
3:      Si Tablero[r][c] == 0 Entonces
            // En el siguiente ciclo, renVec,colVec serán las coordenadas de las
            // casillas vecinas, calculadas en cada iteración.
4:          Para cada posición una de las 8 posiciones renVec,colVecina de casillas vecinas Hacer
5:                descubrirCasilla(nRens, nCols, Tablero, Destapadas, renVec, colVec)
            FinPara
        FinSi
    FinSi
Fin
 

NOTAS

Ciclo de la línea 4:
En el pseudocódigo lo pongo en un ciclo para indicar que pasan por cada una de las coordenadas
de los 8 vecinos. Sin embargo, muchos de ustedes no hacían ciclo, sino que ponían los 8 casos explícitamente
calculando las posiciones de los vecinos con base en r,c. 

Llamada al procedimiento en línea 5:
Dentro de la definición del procedimiento descubrirCasilla invocamos al mismo 
procedimiento descubrirCasilla, pero NO con los mismos parámetros. Noten que 
en la llamada de la línea 5, los dos últimos parámetros son renVec, y colVec. Es decir,
queremos intentar descubrir ahora una de las casillas vecinas.

IMPORTANTE: Usen la llamada de línea 5 como la pongo en el pseudocódigo, 
en la clase les explicaré por qué funciona.
 
Cuando invoquen descubrirCasilla desde su procedimiento jugar háganlo
de manera normal usando r,c leídas del jugador, no tienen que hacer nada especial.





Comments