02 Nov

Sudoku en Java, interfaz de usuario en modo consola

Sudoku en Java modo consola
¿Yo y mis títulos verdad? en esta ocasión les traigo el código fuente de un Sudoku hecho en Java, este programa no te resuelve Sudokus aclaro, solamente fue un encargo que me hicieron en la Universidad para el manejo de arreglos con Java, y tiene dos niveles de dificultad. Es decir que no es nada del otro mundo, a excepción de la forma en que se imprime el juego en modo consola.

Como pueden ver también se pueden hacer aplicaciones agradables en la fría consola de comandos, aprovechándonos de los caracteres ASCII.

Descarga el Sudoku aquí.

En el código fuente puedes encontrar los métodos para hacer este tipo de vistas, eres libre de modificarlo, venderlo, y entregarlo en la Universidad como si fuera tuyo. xD

Saludos.

27 pensamientos en “Sudoku en Java, interfaz de usuario en modo consola

  1. Heyy m gusta muxo tu dedikcion y l hecho q compartas l codigo !! MUY BUENA NOTA d tu parte !!
    Una pregunta, como le hago para hacer est en IDE NetBeans ??

  2. Pingback: Sudoku en modo consola con Java | Carlos3dx Blog

  3. hola yo tengo un codigo que nuestro profesor nos dio lo que no se ec como imprimir en la patriz valores que ya esten ahi sin poner los para eso nos dio este codigo
    import java.io.*;
    public class Randomm{
    public static void main(String args[]){
    int x,num;
    BufferedReader leer=new BufferedReader(new InputStreamReader(System.in));
    for(x=0;x<10;x++){
    num=(int)(Math.random()*10);
    System.out.println(num);
    }
    }
    }
    pero como puesdo poner este codigo que para que los imprima en la matriz desde el principio aqui esta el otro codigo y un ultimo favor podria explicame por al profe no le entendi
    import java.io.*;
    public class Soduko{
    public static void main(String args[]){
    int x,y,valor=0,res,col=0,ren=0,mat[][]=new int[9][9];
    BufferedReader leer=new BufferedReader(new InputStreamReader(System.in));
    do{
    mostrar(mat);
    try{
    System.out.println("Renglon: ");
    ren=Integer.parseInt(leer.readLine());
    System.out.println("Columna: ");
    col=Integer.parseInt(leer.readLine());
    System.out.println("Valor: ");
    valor=Integer.parseInt(leer.readLine());
    }catch(IOException e){;}
    // *** || es el or
    if(valor 9){
    System.out.println(«Valor no Valido.»);
    }
    else{
    res=valida(mat,valor,ren,col);
    if (res==0){
    System.out.println(«Es valido el valor»);
    mat[ren-1][col-1]=valor;
    }
    if (res==1)
    System.out.println(«El valor ya existe en el renglon»);
    if (res==2)
    System.out.println(«El valor ya existe en la columna»);
    if (res==3){
    System.out.println(«La localidad ya esta ocupada»);
    mat[ren-1][col-1]=valor;
    }
    }
    }while(valor!=0);
    }

    public static void mostrar(int mat[][]){
    int x,y;
    for (x=0;x<9;x++){
    for(y=0;y<9;y++){
    System.out.print(mat[x][y]+" ");
    }
    System.out.println("");
    }
    }

    public static int valida(int mat[][],int valor,int ren,int col){
    int x,y,res=0;
    ren–;
    col–;
    for(x=0;x<9;x++){
    if(mat[ren][x]==valor){
    res=1;
    }
    if(mat[x][col]==valor){
    res=2;
    }
    }
    if(mat[ren][col]!=0){
    res=3;
    }

    return res;
    }
    }
    este es mi correo sweet_maria00@yahoo.com.mx

  4. A casi 3 años de tu post y tu muy buena colaboracion, te digo gracias y te admiro por compartir codigo.
    A estas alturas quiza ya hasta titulado estes!!! No lo se jeje pero muchas gracias.

  5. hola amiGo ioo trabajo con el jcreatOr
    y nadamass no funciona correctament tu CodiGo en est programa!!!
    SaluDoX

  6. Hola yo tambien quiero hacer un sudoku en java pero en lugar de que sea uno ya predeterminado, genere Sudokus usando numeros aleatorios y condicionales, el problema es que genera tantos numeros que se le acaba la memoria a la maquina virtual y me produce error StackOverflow, muchos me han dicho que es por que produce un bucle infinito pero comprobe que si quito 2 de las 3 condicionales el programa funciona o tambien veo que si borro todo lo que tengo en una clase llamada LlenarSudoku y pego esto:

    N++;
    if(N>9){
    N=1;}ValidarSudoku();

    Me corre sin problema debido a que crea el mismo sudoku y no necesita generar muchos numeros pero lo que quiero es saber como generar tantos numeros aleatorios pero al mismo tiempo no estancarse, espero que puedan ayudarme, estaria muy agradecido.
    PD: este es mi programa:

    /**
    * @(#)GenerarSudoku.java
    *
    *
    * @author
    * @version 1.00 2009/4/3
    */

    public class GenerarSudoku {
    int N=0;
    int [][][][] a;
    int J=0;
    int K=0;
    int L=0;
    int M=0;
    public void HacerSudoku(){
    a= new int [3][3][3][3];
    ValidarSudoku();
    }
    public void LlenarSudoku(){
    N=(int)(Math.random()*9+1);
    ValidarSudoku();
    }
    public void ValidarSudoku(){
    for(int l=0;l<3;l++){
    for(int m=0;m<3;){
    if(a[J][K][l][m]==N||a[J][l][L][m]==N||a[l][K][m][M]==N){
    LlenarSudoku();
    }else m++;
    }
    }
    a[J][K][L][M]=N;
    M++;
    if(M==3){
    M=0;
    L++;
    if(L==3){
    K++;
    L=0;
    M=0;
    if(K==3){
    K=0;
    J++;
    if(J==3){
    J=0;
    ImprimirSudoku();
    }else LlenarSudoku();
    }else LlenarSudoku();
    } else LlenarSudoku();
    }else LlenarSudoku();
    }

    public void ImprimirSudoku(){
    for(int j=0;j<a.length;j++){
    for(int k=0;k<a.length;k++){
    System.out.println(«arreglo «+j+k);
    for(int l=0;l<a.length;l++){
    for(int m=0;m<a[l].length;m++){
    if(m==2){
    System.out.println(a[j][k][l][m]+» «);
    }else System.out.print(a[j][k][l][m]+» «);
    }
    }
    }
    }
    System.exit(0);
    }

    public static void main(String[] args) {
    GenerarSudoku GS=new GenerarSudoku();
    GS.HacerSudoku();
    }
    }

  7. Oe la verdad es q tu programa es una porqueria si lo hago correr con el jcreator man yo pedia que emulara una pantalla loca y que sus marcos no sean tan abstractos osea minimo por cada insercion de dato borrate la pamntallita ( clsrsc();) wenio Joder

  8. Muy interesante y prolijo, Francisco. Y además sumamente fácil de leer y entender…
    De cualquier forma, a casi dos años de la publicación de este Sudoku en Java, ya debes ser un programador lo suficientemente avanzado como para reconocer que Marcelo (22/07/2007) tiene razón y Alejandro (02/07/2008) está equivocado.
    Un programa donde se define una única clase con todos los métodos calificados como «static» no es otra cosa que una forma de hacer programación procedural o procedimental en Java.
    Cuando un programa es «orientado a objetos», aparecen en él conceptos tales como el encapsulamiento (es decir, los diferentes objetos poseen atributos preferentemente privados y por lo tanto sólo accesibles mediante métodos públicos), herencia (es decir, debe haber una jerarquía de clases), polimorfismo, etc…
    Una de las consecuencias de aprender primero el paradigma procedural o procedimental, es que cuesta pasar luego al paradigma de la programación orientada a objetos. El hecho de usar un lenguaje orientado a objetos no garantiza que nuestros programas lo sean también. Eso es probablemente lo que Marcelo (22/07/2007) quería decir.
    Saludos!

  9. Muchisimas gracias Francisco, precisamente me toca llevar de tarea un sudoku en java.

    Un saludo desde Colombia y de nuevo gracias por colaborar

  10. hola soy desarrollador java y esto es para el personaje que puso «no me parecio orientado a objetos» con toda la mejor onda del mundo, no se refiere a objetos visuales, cosas que que se ven, hace referencia a la programacion multihilo, a la versatilidad de concatenar todo con un objeto o clase, que es una gran caracteristica de java, gente que no nos gane la ignoransia y a aprender un poco mas, gracias

  11. oye! muchas gracias, por el codigo, ojala hubiera mas gente como tu y como yo!, ¿por que me incluyo y a que me refiero?, a que alla gente que le gusta colaborar con algunos codigos, ( tampoco todo molidito ), pero si a cultivar el sentido de software libre.

    De nuevo muchas gracias a ti.

  12. Java es un lenguaje «orientado a objetos». El código no me pareció orientado a objetos. Igualmente se valora mucho la actitud de compartir las cosas que haces. Te felicito, estoy seguro que mejorarás tu código.

  13. Hola, no estudié ninguno la verdad. Nos explicaron como se jugaba (las reglas y todo eso) y pues a programar. =)

    Lo visual se me ocurrió nada más al ver los caracteres del código ASCII y por querer hacerlo más bonito. =)

    Saludos.

Los comentarios están cerrados.