es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo programar la lógica del juego de Sudoku en Unity3D.

Estoy intentando hacer un juego de Sudoku en Unity3D, pero actualmente estoy atascado en la lógica del juego (comprobando si todos los números en el mismo subgrid, fila y columna son diferentes).

He logrado obtener un script que genera la cuadrícula completa, tanto para un nivel de 2×2, 2×3 y 3×3. La parte en la que estoy atascado es crear un Array 2D para almacenar los valores seleccionados para todos los subgrids. También puedo proporcionar el script completo de GenerarCuadrícula si es necesario, pero cualquier ayuda aparte de eso sería de gran ayuda.

(Nota: he intentado investigar lo mejor que puedo sobre esto, pero ninguna de las cosas que encontré en línea se refería a una versión de Unity3D del juego, solo a versiones 2D)

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Definitivamente puedo ayudarte a crear un juego de Sudoku en Unity3D. La lógica del juego es crucial y comprobar si cada número en el mismo subgrid, fila y columna es diferente es una parte clave de ello.

    Para crear una matriz 2D que contenga los valores seleccionados para todos los subgrids, puedes probar el siguiente enfoque:

    1. Crea una matriz 2D con las mismas dimensiones que tu cuadrícula de Sudoku.
    2. Cada vez que un jugador selecciona un valor en una celda en particular, actualiza el valor correspondiente en la matriz 2D.
    3. Antes de actualizar un valor en la matriz 2D, verifica si el valor ya existe en el mismo subgrid, fila o columna.

    Aquí tienes un código de ejemplo para darte una idea:

    public int[,] valoresSeleccionados; // Matriz 2D para almacenar los valores seleccionados
    public int tamañoDeCuadrícula; // Dimensión de la cuadrícula de Sudoku (2x2, 2x3, 3x3)
    
    void Start() {
        valoresSeleccionados = new int[tamañoDeCuadrícula,tamañoDeCuadrícula];
    }
    
    void UpdateCellValue(int fila, int columna, int valor) {
        // Verifica si el valor ya existe en la misma fila o columna
        for (int i = 0; i < tamañoDeCuadrícula; i++) {
            if (valoresSeleccionados[fila,i] == valor || valoresSeleccionados[i,columna] == valor) {
                // El valor ya existe, no se actualiza
                return;
            }
        }
    
        // Verifica si el valor ya existe en el mismo subgrid
        int tamañoDeSubgrid = Mathf.RoundToInt(Mathf.Sqrt(tamañoDeCuadrícula));
        int inicioFilaSubgrid = (fila / tamañoDeSubgrid) * tamañoDeSubgrid;
        int inicioColumnaSubgrid = (columna / tamañoDeSubgrid) * tamañoDeSubgrid;
        for (int i = inicioFilaSubgrid; i < inicioFilaSubgrid + tamañoDeSubgrid; i++) {
            for (int j = inicioColumnaSubgrid; j < inicioColumnaSubgrid + tamañoDeSubgrid; j++) {
                if (valoresSeleccionados[i,j] == valor) {
                    // El valor ya existe, no se actualiza
                    return;
                }
            }
        }
    
        // Se puede actualizar el valor de manera segura
        valoresSeleccionados[fila,columna] = valor;
    }
    

    Este código asume que tienes una función llamada UpdateCellValue que se llama cada vez que un jugador selecciona un valor en una celda en particular. La función verifica si el valor actualizado ya existe en la misma fila, columna o subgrid, y solo actualiza la matriz valoresSeleccionados si es seguro hacerlo.

    ¡Espero que esto te ayude y no dudes en hacer cualquier pregunta adicional!

Comments are closed.