Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Següent revisió | Revisió prèvia | ||
sudoku_php [2021/10/07 15:49] enrique_mieza_sanchez creat |
sudoku_php [2022/10/17 18:41] (actual) enrique_mieza_sanchez [Iteració 4: solver] |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Sudoku en PHP ====== | ====== Sudoku en PHP ====== | ||
- | {{tag> #Daw #DawMp07 #DawMp07Uf1 # | + | Guia pràctica per construir un joc de sudoku |
+ | {{tag> #FpInfor #Daw #DawMp07 #DawMp07Uf1 # | ||
+ | |||
+ | ===== Iteració 1 : formulari buit jugable ===== | ||
<WRAP todo> | <WRAP todo> | ||
- | ===== Part 1 ===== | ||
Fer un formulari de Sudoku que ens digui si els números introduïts compleixen les regles del Sudoku. | Fer un formulari de Sudoku que ens digui si els números introduïts compleixen les regles del Sudoku. | ||
Línia 12: | Línia 14: | ||
- Afegir menús desplegables per cada casella. | - Afegir menús desplegables per cada casella. | ||
- Aconseguir que el formulari s' | - Aconseguir que el formulari s' | ||
- | - Elaborar funcions de comprovació: | + | - Elaborar funcions de comprovació. Es recomana posar-les en un arxiu apart i fer-hi un //include//: |
* '' | * '' | ||
* '' | * '' | ||
* '' | * '' | ||
- Comprovar que el que envia l' | - Comprovar que el que envia l' | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Iteració 2: crear partida ===== | ||
+ | <WRAP todo> | ||
+ | Farem unes passes per generar una partida amb cel·les predefinides. Guia: | ||
+ | |||
+ | - Crear un nombre N de números aleatoris (de l'1 al 9) i distribuir-los per la quadrícula. Inicialment provem amb N=15. | ||
+ | - Guardar els nombres generats a la variable $_SESSION. Assegura' | ||
+ | - A les caselles on hi ha un número fix, no s'ha de posar el SELECT (o //dropdown menu//) i pintarem el número assignat (només lectura). | ||
+ | - Assegurar-se que els nombres generats compleixen les normes del Sudoku que hem implementat amb les funcions de la iteració 1. | ||
</ | </ | ||
+ | \\ | ||
+ | |||
+ | ===== Iteració 3: jugar partida ===== | ||
+ | <WRAP todo> | ||
+ | Abans que res caldrà que modifiquis les funcions '' | ||
+ | |||
+ | Amb el què tenim el jugador pot avançar en jugar una partida, però cal un pas important: **determinar el final de partida**. | ||
+ | |||
+ | Quan detectis que el taulell del Sudoku està resolt correctament, | ||
+ | |||
+ | NOTA: la partida finalitza quan es passa positivament els tests de totes les files, columnes i quadrants, i a més s'han omplert totes les cel·les. | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Iteració 4: solver amb backtrack ===== | ||
+ | |||
+ | <WRAP important> | ||
+ | Secció només per a les més agosarades! | ||
+ | </ | ||
+ | |||
+ | {{ https:// | ||
+ | |||
+ | Si has resolt fins aquí i ets dels més agosarats, voldràs provar de trobar solució a la partida que has generat de forma automàtica. Això es pot fer amb un clàssic algorisme de // | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | {{ https:// | ||
+ | |||
+ | <WRAP info> | ||
+ | Hi ha moltes tècniques de resolució de sudokus com joc (X-wing, Y-wing, etc). Aquestes són " | ||
+ | |||
+ | En canvi, el // | ||
+ | |||
+ | Una optimització senzilla del // | ||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Implementar el // | ||
+ | |||
+ | Fes-ho en una pàgina específica, | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Iteració 5: check partida resoluble ===== | ||
+ | <WRAP todo> | ||
+ | Quan inicialitzem una partida aleatòriament, | ||
+ | |||
+ | Per assegurar-nos, | ||
+ | |||
+ | A més, les regles del Sudoku inclouen un altre requisit: que la partida no tingui vàries solucions, sinó només una de sola. Per tant, haurem de modificar el nostre solver perquè també ens determini si té més d'una solució. Si ens dona una 2a solució, tornarem a descartar la partida. | ||
+ | |||
+ | </ | ||
+ | \\ | ||