¿Cómo diseñar una cuadrícula de Sudoku interactiva en Racket?
Actualmente estoy intentando crear un juego de Sudoku en Drracket. Ya he logrado diseñar las funciones que generan aleatoriamente el Sudoku y comprueban si las respuestas de los usuarios son correctas. Pero ahora tengo algunos problemas para diseñar el cuadrícula de Sudoku interactiva.
Quiero crear una cuadrícula de Sudoku que permita al usuario hacer clic en una celda para “activarla” (esto también significa que el usuario no puede colocar números en lugares equivocados) y llenarla con un número (1-9) o eliminar el número. Al mismo tiempo, la situación de cada celda puede ser detectada por la “función de comprobación de respuesta”.
El tipo de datos que uso para representar una lista de SudokuNumber es el siguiente:
; el ElementState de la solución correcta del test *TME significa elemento de prueba
(define TRS (list TME-44 TME-34 TME-24 TME-14 TME04 TME14 TME24 TME34 TME44
TME-43 TME-33 TME-23 TME-13 TME03 TME13 TME23 TME33 TME43
TME-42 TME-32 TME-22 TME-12 TME02 TME12 TME22 TME32 TME42
TME-41 TME-31 TME-21 TME-11 TME01 TME11 TME21 TME31 TME41
TME-40 TME-30 TME-20 TME-10 TME00 TME10 TME20 TME30 TME40
TME-4-1 TME-3-1 TME-2-1 TME-1-1 TME0-1 TME1-1 TME2-1 TME3-1 TME4-1
TME-4-2 TME-3-2 TME-2-2 TME-1-2 TME0-2 TME1-2 TME2-2 TME3-2 TME4-2
TME-4-3 TME-3-3 TME-2-3 TME-1-3 TME0-3 TME1-3 TME2-3 TME3-3 TME4-3
TME-4-4 TME-3-4 TME-2-4 TME-1-4 TME0-4 TME1-4 TME2-4 TME3-4 TME4-4))
donde un SudokuNumber es una estructura que contiene un número y una posición (*Para la posición, he creado un sistema de coordenadas estableciendo que la celda central tiene la posición (0,0), por lo que cada celda tiene una posición única de (-4,-4) a (4,4)).
Mi idea actual es que cuando el usuario cambie la situación de una celda, también cambie la situación del elemento correspondiente de la lista de SudokuNumber. De esta manera, la “función de comprobación de respuesta” puede trabajar verificando la lista.
Así que ahora mi único problema es cómo diseñar la cuadrícula de Sudoku interactiva.
davy.ai
Para diseñar una cuadrícula interactiva de Sudoku, puedes utilizar las capacidades de interface gráfica proporcionadas por DrRacket. Aquí te presentamos los pasos a seguir:
place-image
para dibujar un número en una celda y la funciónrectangle
para dibujar los bordes de la celda.Define una función para manejar los clics del ratón en las celdas. Esta función debería tomar como entrada la posición actual del ratón y la lista de SudokuNumbers, y actualizar el SudokuNumber correspondiente basado en la posición del ratón. Puedes utilizar la función
get-mouse-state
para obtener la posición actual del ratón.Define una función para manejar presiones de tecla. Esta función debería tomar como entrada la tecla presionada actualmente y la lista de SudokuNumbers, y actualizar el SudokuNumber correspondiente basado en la tecla presionada. Puedes utilizar la función
key=?
para chequear si una tecla fue presionada, y la funciónkey->char
para obtener el caracter correspondiente.Utiliza la función
big-bang
para crear la cuadrícula interactiva de Sudoku. Esta función debería tomar como entrada la lista de SudokuNumbers, y definir la función de actualización para manejar clics del ratón y presiones de tecla, y la función de dibujo para dibujar la cuadrícula de Sudoku en la pantalla.Aquí presentamos un ejemplo de código para ayudarte a comenzar:
Nota: Puede que necesites ajustar el código para que se ajuste a tus requerimientos e implementación específicos.