Skip to content

Tags

Tags give the ability to mark specific points in history as being important
  • SudokuGUI
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class SudokuGUI extends JFrame {
        private Sudoku juego;
        private JButton[][] botonesTablero;
        private JPanel panelTablero;
        private JButton botonDeshacer, botonReiniciar, botonNuevoJuego, botonSeleccionarNivel, botonSalir;
        private String nivelActual = "facil"; // Nivel por defecto
    
        public SudokuGUI() {
            // Inicializa el juego
            juego = new Sudoku();
            juego.iniciarJuego(nivelActual);
    
            // Configura la ventana
            setTitle("Sudoku");
            setSize(400, 600);  // Ajusta el tamaño para los nuevos botones
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLayout(new BorderLayout());
    
            // Panel del tablero
            panelTablero = new JPanel(new GridLayout(9, 9));
            botonesTablero = new JButton[9][9];
            inicializarTablero();
    
            // Panel de botones
            JPanel panelBotones = new JPanel();
            panelBotones.setLayout(new GridLayout(2, 3, 10, 10)); // Botones distribuidos en 2 filas
    
            // Botón "Deshacer"
            botonDeshacer = new JButton("Deshacer");
            botonDeshacer.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    juego.deshacerUltimaJugada();
                    actualizarTablero();
                }
            });
            panelBotones.add(botonDeshacer);
    
            // Botón "Reiniciar"
            botonReiniciar = new JButton("Reiniciar");
            botonReiniciar.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    juego = new Sudoku(); // Reinicia el objeto Sudoku
                    juego.iniciarJuego(nivelActual);
                    actualizarTablero();
                }
            });
            panelBotones.add(botonReiniciar);
    
            // Botón "Nuevo Juego"
            botonNuevoJuego = new JButton("Nuevo Juego");
            botonNuevoJuego.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    juego = new Sudoku(); // Inicia un nuevo juego
                    juego.iniciarJuego(nivelActual);
                    actualizarTablero();
                }
            });
            panelBotones.add(botonNuevoJuego);
    
            // Botón "Seleccionar Nivel"
            botonSeleccionarNivel = new JButton("Seleccionar Nivel");
            botonSeleccionarNivel.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    seleccionarNivel();
                    juego = new Sudoku();
                    juego.iniciarJuego(nivelActual); // Inicia el juego con el nuevo nivel
                    actualizarTablero();
                }
            });
            panelBotones.add(botonSeleccionarNivel);
    
            // Botón "Salir"
            botonSalir = new JButton("Salir");
            botonSalir.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0); // Cierra el programa
                }
            });
            panelBotones.add(botonSalir);
    
            // Agrega los paneles a la ventana
            add(panelTablero, BorderLayout.CENTER);
            add(panelBotones, BorderLayout.SOUTH);
        }
    
        private void inicializarTablero() {
            for (int fila = 0; fila < 9; fila++) {
                for (int columna = 0; columna < 9; columna++) {
                    JButton boton = new JButton();
                    int valor = juego.getTablero().getValor(fila, columna);
                    if (valor != 0) {
                        boton.setText(String.valueOf(valor));
                        boton.setEnabled(false); // Los valores iniciales no se pueden cambiar
                    } else {
                        boton.setText("");
                        final int f = fila;
                        final int c = columna;
                        boton.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                colocarNumero(f, c);
                            }
                        });
                    }
                    botonesTablero[fila][columna] = boton;
                    panelTablero.add(boton);
                }
            }
        }
    
        private void colocarNumero(int fila, int columna) {
            String input = JOptionPane.showInputDialog(this, "Ingrese un número (1-9):");
            try {
                int numero = Integer.parseInt(input);
                if (numero >= 1 && numero <= 9) {
                    if (juego.colocarNumero(fila, columna, numero)) {
                        botonesTablero[fila][columna].setText(String.valueOf(numero));
                    } else {
                        JOptionPane.showMessageDialog(this, "Movimiento inválido.");
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "Número fuera de rango.");
                }
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(this, "Entrada inválida.");
            }
    
            juego.mostrarMensajeEstado();
            if (juego.verificarJuego()) {
                JOptionPane.showMessageDialog(this, "¡Felicidades! Has completado el Sudoku.");
            }
        }
    
        private void actualizarTablero() {
            for (int fila = 0; fila < 9; fila++) {
                for (int columna = 0; columna < 9; columna++) {
                    int valor = juego.getTablero().getValor(fila, columna);
                    if (valor != 0) {
                        botonesTablero[fila][columna].setText(String.valueOf(valor));
                    } else {
                        botonesTablero[fila][columna].setText("");
                    }
                }
            }
        }
    
        private void seleccionarNivel() {
            String[] opciones = {"facil", "intermedio", "dificil"};
            nivelActual = (String) JOptionPane.showInputDialog(this, 
                    "Selecciona el nivel de dificultad:", 
                    "Seleccionar Nivel", 
                    JOptionPane.QUESTION_MESSAGE, 
                    null, 
                    opciones, 
                    opciones[0]);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new SudokuGUI().setVisible(true);
                }
            });
        }
    }