Console
Clique sur « Exécuter » pour lancer le programme.
Aucune exécutionCtrl+Entrée : exécuter · Échap : arrêter
Code CoddyRun
@ Initialisation
// Déclaration de la grille de Sudoku 9x9
grille_sudoku est un tableau
pour lig de 0 à 8
ligne_g est un tableau
pour col de 0 à 8
ligne_g ajoute 0
fin pour
grille_sudoku ajoute ligne_g
fin pour
@ Fonctions de résolution (Backtracking)
// Vérifie si placer 'val' aux coordonnées (l, c) est autorisé par les règles
fonction estValide(g, l, c, val)
// 1. Vérification de la ligne
pour i de 0 à 8
si g[l][i] = val alors
retourne faux
fin si
fin pour
// 2. Vérification de la colonne
pour i de 0 à 8
si g[i][c] = val alors
retourne faux
fin si
fin pour
// 3. Vérification du bloc 3x3
debutL est un nombre
debutL vaut arrondi_inferieur(l / 3) * 3
debutC est un nombre
debutC vaut arrondi_inferieur(c / 3) * 3
pour i de 0 à 2
pour j de 0 à 2
si g[debutL + i][debutC + j] = val alors
retourne faux
fin si
fin pour
fin pour
retourne vrai
fin fonction
// Algorithme de Backtracking pour remplir la grille
fonction generer(g)
l est un nombre
c est un nombre
trouve est un booléen
trouve vaut faux
// Trouver la prochaine case vide (valeur 0)
pour i de 0 à 8
pour j de 0 à 8
si g[i][j] = 0 alors
l vaut i
c vaut j
trouve vaut vrai
arrête
fin si
fin pour
si trouve = vrai alors
arrête
fin si
fin pour
// Condition d'arrêt : plus aucune case vide, le Sudoku est terminé
si trouve = faux alors
retourne vrai
fin si
// Préparer les chiffres de 1 à 9 et les mélanger pour la génération aléatoire
possibles est un tableau
pour n de 1 à 9
possibles ajoute n
fin pour
possibles vaut melanger(possibles)
num est un nombre
valide est un booléen
suite est un booléen
pour k de 0 à 8
num vaut possibles[k]
valide vaut estValide(g, l, c, num)
si valide = vrai alors
// Essayer ce chiffre
g[l][c] vaut num
// Continuer avec la grille modifiée
suite vaut generer(g)
si suite = vrai alors
retourne vrai
fin si
// Échec (impasse) : annuler (Backtrack) et essayer le suivant
g[l][c] vaut 0
fin si
fin pour
// Aucun chiffre n'a fonctionné, on doit reculer
retourne faux
fin fonction
@ Création du puzzle
// Retire un nombre défini de chiffres pour le joueur
procédure faireTrous(g, nb)
trous_faits est un nombre
trous_faits vaut 0
l est un nombre
c est un nombre
tant que trous_faits < nb
l vaut hasard(0, 8)
c vaut hasard(0, 8)
si g[l][c] <> 0 alors
g[l][c] vaut 0
trous_faits ajoute 1
fin si
fin tant que
fin procédure
@ Affichage sur la toile
// Rendu visuel de la grille de Sudoku
procédure dessinerSudoku(t, g)
remplir(t, #FFFFFF)
x est un nombre
y est un nombre
val est un nombre
txt est un texte
// 1. Dessiner les cases et les chiffres
pour l de 0 à 8
pour c de 0 à 8
x vaut c * 50
y vaut l * 50
val vaut g[l][c]
si val <> 0 alors
txt vaut convertir_texte(val)
label(t, x + 16, y + 35, txt, #1E2430, 24)
fin si
fin pour
fin pour
// 2. Dessiner les lignes de la grille
epaisseur est un nombre
pour i de 0 à 9
// Les lignes séparant les blocs 3x3 sont plus épaisses
si i mod 3 = 0 alors
epaisseur vaut 3
sinon
epaisseur vaut 1
fin si
// Lignes verticales
ligne(t, i * 50, 0, i * 50, 450, #000000, epaisseur)
// Lignes horizontales
ligne(t, 0, i * 50, 450, i * 50, #000000, epaisseur)
fin pour
fin procédure
@ Exécution principale
// 1. Remplir complètement la grille avec une solution valide
succes est un booléen
succes vaut generer(grille_sudoku)
// 2. Retirer 45 numéros pour créer le défi
appelle faireTrous(grille_sudoku, 45)
// 3. Préparer et afficher la toile (canevas)
ma_toile est une toile
dimension(ma_toile, 450, 450)
appelle dessinerSudoku(ma_toile, grille_sudoku)
affiche ma_toile