buscaminas [recursividad][java]

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

Fuentes de Información - buscaminas [recursividad][java]

El contenido del post es de mi autoría, y/o, es un recopilación de distintas fuentes.

Dar puntos
39 Puntos
Votos: 6 - T!score: 6.5/10
  • 1 Seguidores
  • 6.266 Visitas
  • 10 Favoritos

15 comentarios - buscaminas [recursividad][java]

@BhWrestler Hace más de 3 años
excelente man, sigue asi.. +10
@hustle2006 Hace más de 2 años
Gracias!!!...te daria puntos pero soy novato u.u me inspira para hacerlo en visual c++ =D
@kimbeeer Hace más de 2 años
buenisimo :3
@villa0808 Hace más de 2 años
buen post
@AndruDF Hace más de 2 años
Hola, si el post esta genial... pero... te falta el main en el código, o yo soy la burra! je en caso de ser lo 2º explicame... gracias...
@elocomoi Hace más de 2 años
grooooooooooooooooooooooooooosssssssssoooooooooooooooooooooo headbang: headbang: headbang: :headbang :headbang :headbang si me decis como
te dejo puntos
@Rac0921 Hace más de 2 años
El segundo código que pusiste otra clase aparte dentro del paquete o va junto con el primer código que pusiste?????
@josemal37 Hace más de 2 años
son dos clases distintas si copias el codigo deberias tener los siguientes archivos

buscaminas.java
espacio.java

ya luego los compilas
@OoDaNnYoO Hace más de 1 año
Bakan brother.. Podrias Hacer El Cubo Magico???...
@josemal37 Hace más de 1 año
te refieres al cubo de rubik???
@OoDaNnYoO Hace más de 1 año
Asi es Brother..!!! Facil Y Sencillo Como Hiciste El Buscaminas..!


Gracias Y Saludos
@josemal37 Hace más de 1 año
si quieres que sea en 3d no domino ese nivel de programacion, y hacerlo en consola parece bastante interesante, a ver que sale D
@danielmcl9 Hace más de 1 año
Gracias men! te dejo funciona a la perfeccion !
@josemal37 Hace más de 1 año
gracias a ti c:
@efield Hace más de 1 año
lo tienes con jframe?
@josemal37 Hace más de 1 año
no, el objetivo era hacerlo en consola c: pero la implementacion no es nada dificil
@scorpion28 Hace más de 5 meses
Gracias, me fue muy útil
@josemal37 Hace más de 4 meses
De nada, me alegra que te haya sido útil c: