Buscaminas [recursividad][java]


hola a todos!!!!!!!!

Bueno aca otro programa hecho en java y al puro estilo recursivo

ok les cuento la historia...

lo que pasa es que me en mis clases nos dieron un proyecto para el primer parcial... y si... era hacer un buscaminas con recursividad

las condiciones:

prohibido for...
prohibido while...
cualquier otro itinerador (ustedes saben lo que hace que se repita una instruccion varias veces)
hacer que corra en linea de comandos


aca el codigo del buscaminas


import java.util.Scanner;
public class buscaminas{
    Scanner scan=new Scanner(System.in);
    public static void main(String arg[]){

        //esta parte del codigo se encarga de crear los objetos necesarios para ejecutar el programa

        Scanner scan=new Scanner(System.in);
        int filas;
        int columnas;
        int numMinas;
        int contador;
        int c=0;
        espacio[][] buscaminas;
        System.out.println("n"+"n"+"Buscaminas"+"n"+"n");
        System.out.print("Ingrese el numero de filas(5-50): ");
        filas=scan.nextInt();
        if(filas<5||filas>50){
            filas=10;
            c=1;
        }
        System.out.print("Ingrese el numero de columnas(5-50): ");
        columnas=scan.nextInt();
        if(columnas<5||columnas>50){
            columnas=10;
            c++;
            if (c==2){
                System.out.println("n"+"Coordenadas fuera de rango tamaño predeterminado 10X10"+"n");
            }
        }
        numMinas=filas+columnas;
        contador=(filas*columnas)-(numMinas);
        System.out.println("n"+"El numero de minas es: "+numMinas+"n");
        System.out.println("n"+"A jugar!!!"+"n");
        buscaminas=new espacio[columnas][filas];
        buscaminas=new buscaminas().llenarTablero(buscaminas,0,0,columnas,filas);
        buscaminas=new buscaminas().colocarMinas(buscaminas,numMinas,columnas,filas);
        buscaminas=new buscaminas().minasAlrededor(buscaminas,0,0,columnas,filas);
        buscaminas=new buscaminas().juego(buscaminas,columnas,filas,contador);
    }
    public espacio[][] llenarTablero(espacio[][] buscaminas,int i,int j,int c,int f){

        //esta parte del codigo se encarga de llenar el tablero de las minas con espacios vacios
        // diciendolo un poco mas tecnico se encarga de asignar memoria para el buscaminas... creo...

        if(j<f){
            if(i<c){
                buscaminas[i][j]=new espacio();
                buscaminas=llenarTablero(buscaminas,++i,j,c,f);
            }
            else{
                i=0;
                buscaminas=llenarTablero(buscaminas,i,++j,c,f);
            }
        }
        return buscaminas;
    }
    public espacio[][] colocarMinas(espacio[][] buscaminas,int n,int c,int f){

        //esta parte se encarga de colocar las minas en el buscaminas

        int azar1=(int)(Math.random()*(c-1));
        int azar2=(int)(Math.random()*(f-1));
        if(n>0){
            if(buscaminas[azar1][azar2].verMina()==false){
                buscaminas[azar1][azar2].colocarMina();
                n--;
            }
            buscaminas=colocarMinas(buscaminas,n,c,f);
        }
        return buscaminas;
    }
    public espacio[][] minasAlrededor(espacio[][] buscaminas,int i,int j,int c,int f){

        //esta parte fue la que mas me costo jajaja
        //se encarga de averiguar cuantas minas alrededor tiene un espacio en el buscaminas

        if(j<f){
            if(i<c){
                if(buscaminas[i][j].verMina()==true){
                    if(i>0){
                        buscaminas[i-1][j].aumentarMinas();
                        if(j>0){
                            buscaminas[i-1][j-1].aumentarMinas();
                        }
                        if(j<f-1){
                            buscaminas[i-1][j+1].aumentarMinas();
                        }
                    }
                    if(i<c-1){
                        buscaminas[i+1][j].aumentarMinas();
                        if(j>0){
                            buscaminas[i+1][j-1].aumentarMinas();
                        }
                        if(j<f-1){
                            buscaminas[i+1][j+1].aumentarMinas();
                        }
                    }
                    if(j>0){
                        buscaminas[i][j-1].aumentarMinas();
                    }
                    if(j<f-1){
                        buscaminas[i][j+1].aumentarMinas();
                    }
                }
                buscaminas=minasAlrededor(buscaminas,++i,j,c,f);
            }
            else{
                i=0;
                buscaminas=minasAlrededor(buscaminas,i,++j,c,f);
            }
        }
        return buscaminas;
    }
    public void imprimir(espacio[][] buscaminas,int i,int j,int c,int f){

        //su nombre lo dice todo...imprime en pantalla el tablero del buscaminas

        if(j<f){
            if(i<c){
                System.out.print(buscaminas[i][j]+" ");
                imprimir(buscaminas,++i,j,c,f);
            }
            else{
                i=0;
                System.out.println("");
                imprimir(buscaminas,i,++j,c,f);
            }
        }
    }
    public espacio[][] juego(espacio[][] buscaminas,int columnas,int filas,int contador){

        //esta parte se encarga de hacer que el usuario juegue con el buscaminas
        //(como tiene que ser recursivo y eso... es mejor tener un metodo aparte jejeje)

        imprimir(buscaminas,0,0,columnas,filas);
        System.out.println("n"+"Ingrese el numero de fila y columna que desea explorar"+"n");
        System.out.print("Ingrese el numero de la fila: ");
        int f=scan.nextInt();
        System.out.print("Ingrese el numero de la columna: ");
        int c=scan.nextInt();
        System.out.print("n"+"n");
        if(f<=filas&&c<=columnas){
            if(buscaminas[c-1][f-1].verRevelado()==false){
                buscaminas[c-1][f-1].cambiarEstado();
                contador--;
            }
            if(contador==0){
                System.out.println("n"+"n"+"GANASTE!!!"+"n"+"n"+"FELICIDADES!!!");
            }
            else{
                if(buscaminas[c-1][f-1].verMina()==true){
                    imprimir(buscaminas,0,0,columnas,filas);
                    System.out.println("n"+"n"+"BOOOOOOOOM!!!!!"+"n"+"n"+"perdiste el juego!!!");
                }
                else{
                    juego(buscaminas,columnas,filas,contador);
                }
            }
        }
        else{
            juego(buscaminas,columnas,filas,contador);
        }
        return buscaminas;
    }
}


bueno lo que falta es el espacio osea el cuadradito donde aparecen los numeros o las minas jeje


public class espacio{

    //esta clase se encarga de hacer de cuadradito en el buscaminas(tu sabes donde
    //le das click y booooooooooooooooooooom jajaja)

    private int minasAlrededor;
    private boolean esMina;
    private boolean revelado;
    public espacio(){

        //el constructor del espacio

        minasAlrededor=0;
        esMina=false;
    }
    public void colocarMina(){

        //se encarga de decir a un espacio si es mina o no...

        esMina=true;
    }
    public void aumentarMinas(){

        //se encarga de aumentar el munero deminas alrededor de este espacio

        if(esMina==false){
            minasAlrededor++;
        }
    }
    public boolean verMina(){

        //te dice si el espacio es una mina o no...

        return esMina;
    }
    public boolean verRevelado(){

        //te dice si ya visitaste este espacio mientras estas jugando(en si el programa
        //no te dice nada pero para saber si uno gano si sirve este proceso...

        return revelado;
    }
    public void cambiarEstado(){

        //una vez que visites un espacio este cambia su estado a revelado...

        revelado=true;
    }
    public String toString(){

        //ya saben cualquier toString imprime en pantalla cuando le dices System.out.println

        String res="*";
        if(revelado==true){
            res=""+minasAlrededor;
        }
        if(esMina==true&&revelado==true)
        res="X";
        return res;
    }
}



cualquier duda, sugerencia, amenaza, o cualquier otra cosa... comenten... o el pato muere...

na... a quien quiero engañar no hay pato... jajaja
Datos archivados del Taringa! original
36puntos
2,589visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

j
josemal37🇦🇷
Usuario
Puntos0
Posts2
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.