diff --git a/index.php b/index.php
index 03e29cd..9b7ea74 100644
--- a/index.php
+++ b/index.php
@@ -1,4 +1,8 @@
  $definition) {
-    $nb_lettres = strlen($mot);
-    if(!isset($mots[$nb_lettres])) {
-        $mots[$nb_lettres] = [];
+    $n = strlen($mot);
+    if (!isset($mots_de_n_lettres[$n])) {
+        $mots_de_n_lettres[$n] = [];
     }
-    $mots[$nb_lettres][] = $mot;
+    $mots_de_n_lettres[$n][] = $mot;
 }
-foreach ($mots as $nb_lettres => $liste_mots) {
-    shuffle($mots[$nb_lettres]);
+foreach ($mots_de_n_lettres as $n => $liste_mots) {
+    shuffle($mots_de_n_lettres[$n]);
 }
 
-$dimensions = [$hauteur, $largeur];
 $mots_par_position = [];
-foreach($dimensions as $nb_lettres) {
-    $mots_par_position[$nb_lettres] = [];
-    foreach($mots[$nb_lettres] as $mot) {
-        foreach(str_split($mot) as $i => $lettre) {
-            if (!isset($mots_par_position[$nb_lettres][$i])) {
-                $mots_par_position[$nb_lettres][$i] = [];
+foreach ([$hauteur, $largeur] as $n) {
+    $mots_par_position[$n] = [];
+    foreach ($mots_de_n_lettres[$n] as $mot) {
+        foreach (str_split($mot) as $i => $lettre) {
+            if (!isset($mots_par_position[$n][$i])) {
+                $mots_par_position[$n][$i] = [];
             }
-            if (!isset($mots_par_position[$nb_lettres][$i][$lettre])) {
-                $mots_par_position[$nb_lettres][$i][$lettre] = [];
+            if (!isset($mots_par_position[$n][$i][$lettre])) {
+                $mots_par_position[$n][$i][$lettre] = [];
             }
-            $mots_par_position[$nb_lettres][$i][$lettre][] = $mot;
+            $mots_par_position[$n][$i][$lettre][] = $mot;
         }
     }
 }
 
-$grille = [];
-for($l = 0; $l < $hauteur; $l++) {
-    $grille[$l] = array_fill(0, $largeur, '.');
-}
-
-function get_ligne($l) {
-    global $grille;
-    return implode("", $grille[$l]);
-}
-
-function set_ligne($l, $mot) {
-    global $grille;
-    for($i = 0; $i < strlen($mot); $i++) {
-        $grille[$l][$i] = $mot[$i];
-    }
-}
-
-function get_colonne($c) {
-    global $grille;
-    $colonne = "";
-    for($i = 0; $i < count($grille); $i++) {
-        $colonne .= $grille[$i][$c];
-    }
-    return $colonne;
-}
-
-function set_colonne($c, $mot) {
-    global $grille;
-    for($i = 0; $i < strlen($mot); $i++) {
-        $grille[$i][$c] = $mot[$i];
-    }
-}
-
-$lignes_restantes = range(0, $hauteur-1);
-$colonnes_restantes = range(0, $largeur-1);
-
-function genere() {
-    global $mots;
-    global $grille;
-    global $lignes_restantes;
-    global $largeur;
-
-    $l = $largeur / 2;
-    array_splice($lignes_restantes, $l, 1);
-    foreach($mots[$largeur] as $mot_lig) {
-        set_ligne($l, $mot_lig);
-        yield from trouve_une_colonne($l, $mot_lig);
-    }
-    $lignes_restantes[] = $l;
-    $grille[$l] = array_fill(0, $largeur, '.');
-}
-
-function pire_contrainte($tests, $nb_lettres, $i, $mot) {
+function pire_contrainte($tests, $nb_lettres, $i, $mot)
+{
     global $mots_par_position;
     $nb_mots_min = PHP_INT_MAX;
     $pire_contrainte = 0;
-    foreach($tests as $test) {
-        if(
+    foreach ($tests as $test) {
+        if (
             !array_key_exists($i, $mots_par_position[$nb_lettres]) ||
             !array_key_exists($mot[$test], $mots_par_position[$nb_lettres][$i])
         ) {
             return -1;
         } else {
             $nb_mots = count($mots_par_position[$nb_lettres][$i][$mot[$test]]);
-            if($nb_mots < $nb_mots_min) {
+            if ($nb_mots < $nb_mots_min) {
                 $pire_contrainte = $test;
                 $nb_mots_min = $nb_mots;
             }
@@ -132,69 +84,141 @@ function pire_contrainte($tests, $nb_lettres, $i, $mot) {
     return $pire_contrainte;
 }
 
-function trouve_une_colonne($l, $mot_lig) {
-    global $grille;
-    global $colonnes_restantes;
-    global $lignes_restantes;
-    global $hauteur;
-    global $mots_par_position;
-    
-    $c = pire_contrainte($colonnes_restantes, $hauteur, $l, $mot_lig);
-    if ($c == -1) {
-        return;
-    }   
-    $colonne = get_colonne($c);
-    array_splice($colonnes_restantes, $c, 1);
-    foreach ($mots_par_position[$hauteur][$l][$mot_lig[$c]] as $mot_col) {
-        if ($mot_col == $colonne || preg_match("/^$colonne$/", $mot_col)) {
-            set_colonne($c, $mot_col);
-            if (count($lignes_restantes)) {
-                yield from trouve_une_ligne($c, $mot_col);
-            } else if (count($colonnes_restantes)) {
-                yield from trouve_une_colonne($l, $mot_lig);
-            } else {
-                yield;
-            }
+
+class Grille
+{
+    public $hauteur;
+    public $largeur;
+    public $grille;
+    public $lignes_restantes;
+    public $colonnes_restantes;
+
+    public function __construct($hauteur, $largeur)
+    {
+        $this->hauteur = $hauteur;
+        $this->largeur = $largeur;
+        $this->grille = array_fill(0, $hauteur, array_fill(0, $largeur, '.'));
+        $this->lignes_restantes = range(0, $hauteur - 1);
+        $this->colonnes_restantes = range(0, $largeur - 1);
+    }
+
+    public function get_ligne($l)
+    {
+        return implode("", $this->grille[$l]);
+    }
+
+    public function set_ligne($l, $mot)
+    {
+        for ($i = 0; $i < strlen($mot); $i++) {
+            $this->grille[$l][$i] = $mot[$i];
         }
     }
-    $colonnes_restantes[] = $c;
-    set_colonne($c, $colonne);
-}
-
-function trouve_une_ligne($c, $mot_col) {
-    global $grille;
-    global $colonnes_restantes;
-    global $lignes_restantes;
-    global $largeur;
-    global $mots_par_position;
-
-    $l = pire_contrainte($lignes_restantes, $largeur, $c, $mot_col);
-    if ($l == -1) {
-        return;
+    public function get_colonne($c)
+    {
+        $colonne = "";
+        for ($i = 0; $i < $this->hauteur; $i++) {
+            $colonne .= $this->grille[$i][$c];
+        }
+        return $colonne;
     }
-    $ligne = get_ligne($l);
-    array_splice($lignes_restantes, $l, 1);
-    foreach ($mots_par_position[$largeur][$c][$mot_col[$l]] as $mot_lig) {
-        if ($mot_lig == $ligne || preg_match("/^$ligne$/", $mot_lig)) {
-            set_ligne($l, $mot_lig);
-            if (count($colonnes_restantes)) {
-                yield from trouve_une_colonne($l, $mot_lig);
-            } else if (count($lignes_restantes)) {
-                yield from trouve_une_ligne($c, $mot_col);
-            } else {
-                yield;
-            }
+    public function set_colonne($c, $mot)
+    {
+        for ($i = 0; $i < strlen($mot); $i++) {
+            $this->grille[$i][$c] = $mot[$i];
         }
     }
-    $lignes_restantes[] = $l;
-    set_ligne($l, $ligne);
+    public function genere()
+    {
+        global $mots_de_n_lettres;
+
+        $l = $this->largeur / 2;
+        array_splice($this->lignes_restantes, $l, 1);
+        foreach ($mots_de_n_lettres[$this->largeur] as $mot_lig) {
+            $this->set_ligne($l, $mot_lig);
+            yield from $this->trouve_une_colonne($l, $mot_lig);
+        }
+        $this->lignes_restantes[] = $l;
+        $this->grille[$l] = array_fill(0, $this->largeur, '.');
+    }
+
+    public function trouve_une_colonne($l, $mot_lig)
+    {
+        global $mots_par_position;
+
+        $c = pire_contrainte($this->colonnes_restantes, $this->hauteur, $l, $mot_lig);
+        if ($c == -1) {
+            return;
+        }
+        $colonne = $this->get_colonne($c);
+        array_splice($this->colonnes_restantes, $c, 1);
+        foreach ($mots_par_position[$this->hauteur][$l][$mot_lig[$c]] as $mot_col) {
+            if ($mot_col == $colonne || preg_match("/^$colonne$/", $mot_col)) {
+                $this->set_colonne($c, $mot_col);
+                if (count($this->lignes_restantes)) {
+                    yield from $this->trouve_une_ligne($c, $mot_col);
+                } else if (count($this->colonnes_restantes)) {
+                    yield from $this->trouve_une_colonne($l, $mot_lig);
+                } else {
+                    yield;
+                }
+            }
+        }
+        $this->colonnes_restantes[] = $c;
+        $this->set_colonne($c, $colonne);
+    }
+
+    public function trouve_une_ligne($c, $mot_col)
+    {
+        global $mots_par_position;
+
+        $l = pire_contrainte($this->lignes_restantes, $this->largeur, $c, $mot_col);
+        if ($l == -1) {
+            return;
+        }
+        $ligne = $this->get_ligne($l);
+        array_splice($this->lignes_restantes, $l, 1);
+        foreach ($mots_par_position[$this->largeur][$c][$mot_col[$l]] as $mot_lig) {
+            if ($mot_lig == $ligne || preg_match("/^$ligne$/", $mot_lig)) {
+                $this->set_ligne($l, $mot_lig);
+                if (count($this->colonnes_restantes)) {
+                    yield from $this->trouve_une_colonne($l, $mot_lig);
+                } else if (count($this->lignes_restantes)) {
+                    yield from $this->trouve_une_ligne($c, $mot_col);
+                } else {
+                    yield;
+                }
+            }
+        }
+        $this->lignes_restantes[] = $l;
+        $this->set_ligne($l, $ligne);
+    }
+
+    public function affiche()
+    {
+        echo "
";
+        echo " | ";
+        for ($c = 0; $c < $this->largeur; $c++) {
+            echo "" . chr($c + 65) . " | ";
+        }
+        echo "
";
+        for ($l = 0; $l < $this->hauteur; $l++) {
+            echo "| " . $l . " | ";
+            for ($c = 0; $c < $this->largeur; $c++) {
+                echo "" . $this->grille[$l][$c] . " | ";
+            }
+            echo "
";
+        }
+        echo "
";
+    }
 }
 
-genere()->current();
+$grille = new Grille($hauteur, $largeur);
+$grille->genere()->current();
 
 ?>
 
 
+
 
     
     Mots croisés
@@ -202,6 +226,7 @@ genere()->current();
         table {
             border-collapse: collapse;
         }
+
         td {
             width: 30px;
             height: 30px;
@@ -210,21 +235,23 @@ genere()->current();
         }
     
 
+
 
     
         
              | 
-            
-                =chr($c+65)?> | 
+            
+                = chr($c + 65) ?> | 
             
         
-        
+        
             
-                | =$l?> | 
-                
-                    =$grille[$l][$c]?> | 
+                = $l ?> | 
+                
+                    = $grille->grille[$l][$c] ?> | 
                 
             
         
     
+
 
\ No newline at end of file