haz un código en java que replique el juego del buscaminas
Aquí te dejo un ejemplo de cómo podrías implementar el juego del Buscaminas en Java: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class Buscaminas extends JPanel { private int filas, columnas, minas; private int[][] tablero; private boolean[][] descubierto; private boolean[][] marcado; private int puntaje; public Buscaminas(int filas, int columnas, int minas) { this.filas = filas; this.columnas = columnas; this.minas = minas; this.tablero = new int[filas][columnas]; this.descubierto = new boolean[filas][columnas]; this.marcado = new boolean[filas][columnas]; this.puntaje = 0; // Inicializar el tablero con minas Random random = new Random(); for (int i = 0; i < minas; i++) { int fila = random.nextInt(filas); int columna = random.nextInt(columnas); tablero[fila][columna] = -1; } // Inicializar el tablero con valores for (int i = 0; i < filas; i++) { for (int j = 0; j < columnas; j++) { if (tablero[i][j] == -1) { continue; } int minasAdyacentes = 0; for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { int filaActual = i + x; int columnaActual = j + y; if (filaActual >= 0 && filaActual < filas && columnaActual >= 0 && columnaActual < columnas && tablero[filaActual][columnaActual] == -1) { minasAdyacentes++; } } } tablero[i][j] = minasAdyacentes; } } // Establecer el tamaño del panel setPreferredSize(new Dimension(columnas * 30, filas * 30)); setBackground(Color.WHITE); // Agregar evento de clic addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int fila = e.getY() / 30; int columna = e.getX() / 30; if (e.getButton() == MouseEvent.BUTTON1) { // Clic izquierdo descubierto[fila][columna] = true; pintar(); if (tablero[fila][columna] == -1) { JOptionPane.showMessageDialog(Buscaminas.this, "¡Has perdido!"); System.exit(0); } else if (tablero[fila][columna] == 0) { descubierto[fila][columna] = true; for (int x = -1; x <= 1; x++) { for (int y = -1; y <= 1; y++) { int filaActual = fila + x; int columnaActual = columna + y; if (filaActual >= 0 && filaActual < filas && columnaActual >= 0 && columnaActual < columnas && !descubierto[filaActual][columnaActual]) { descubierto[filaActual][columnaActual] = true; pintar(); } } } } } else if (e.getButton() == MouseEvent.BUTTON3) { // Clic derecho marcado[fila][columna] = !marcado[fila][columna]; pintar(); } } }); } private void pintar() { repaint(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < filas; i++) { for (int j = 0; j < columnas; j++) { if (descubierto[i][j]) { if (tablero[i][j] == -1) { g.setColor(Color.RED); g.fillRect(j * 30, i * 30, 30, 30); } else if (tablero[i][j] == 0) { g.setColor(Color.LIGHT_GRAY); g.fillRect(j * 30, i * 30, 30, 30); } else { g.setColor(Color.BLACK); g.drawString(String.valueOf(tablero[i][j]), j * 30 + 10, i * 30 + 20); } } else if (marcado[i][j]) { g.setColor(Color.YELLOW); g.fillRect(j * 30, i * 30, 30, 30); } } } } public static void main(String[] args) { JFrame frame = new JFrame("Buscaminas"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new Buscaminas(10, 10, 10)); frame.pack(); frame.setVisible(true); } } ``` Este código crea un panel que representa el tablero del juego del Buscaminas. El jugador puede clicar en las celdas para descubrirlas o marcarlas con un clic derecho. Si el jugador encuentra una mina, el juego termina y se muestra un mensaje de diálogo. Si el jugador descubre todas las celdas sin encontrar minas, el juego termina y se muestra un mensaje de diálogo.