diff --git a/Grille.php b/Grille.php index 8177883..846fe71 100644 --- a/Grille.php +++ b/Grille.php @@ -174,22 +174,26 @@ class Grille implements ArrayAccess public function save($id) { - session_id($id); + if (session_status() === PHP_SESSION_ACTIVE) { + session_write_close(); + } + + session_id("$this->largeur,$this->hauteur,$id"); session_start(["use_cookies" => false]); - $_SESSION["$this->largeur,$this->hauteur"] = (string)$this; + $_SESSION["grille"] = (string)$this; } public function load($id) { - session_id($id); + session_id("$this->largeur,$this->hauteur,$id"); session_start(["use_cookies" => false]); - if (!isset($_SESSION["$this->largeur,$this->hauteur"])) { + if (!isset($_SESSION["grille"])) { return false; } - foreach (explode(PHP_EOL, $_SESSION["$this->largeur,$this->hauteur"]) as $y => $ligne) { + foreach (explode(PHP_EOL, $_SESSION["grille"]) as $y => $ligne) { foreach (str_split($ligne) as $x => $lettre) { $this->grille[$y][$x] = $lettre; } diff --git a/Trie.php b/Trie.php index 42ee6f8..aa424d0 100644 --- a/Trie.php +++ b/Trie.php @@ -6,8 +6,8 @@ class Trie implements ArrayAccess, IteratorAggregate, Countable { private $nb_branches = 0; public function arraySet($cles, $valeur) { - $this->nb_branches++; $cle = $cles[0]; + $this->nb_branches++; $cles = array_slice($cles, 1); if ($cles == []) { $this->branches[$cle] = $valeur; diff --git a/index.php b/index.php index 7556a4d..043a69d 100644 --- a/index.php +++ b/index.php @@ -29,7 +29,10 @@ $largeur = filter_input(INPUT_GET, 'colonnes', FILTER_VALIDATE_INT, [ $grille_valide = false; $grille = new Grille($hauteur, $largeur); $basedir = $_SERVER["REQUEST_SCHEME"]."://".$_SERVER["HTTP_HOST"].dirname($_SERVER["DOCUMENT_URI"]); -if (!isset($_GET["grille"]) || $_GET["grille"] == "") { + +if (isset($_GET["grille"]) || $_GET["grille"] == "") { + $id = htmlspecialchars($_GET["grille"]); +} else { do { $id = uniqid(); } while (!$grille->genere($id)); @@ -56,16 +59,14 @@ if (!isset($_GET["grille"]) || $_GET["grille"] == "") { <meta property="og:title" content="🄼🄾🅃🅂▣🄲🅁🄾🄸🅂🄴🅂"/> <meta property="og:type" content="game"/> <meta property="og:url" content="<?=$basedir?>"/> - <meta property="og:image" content="<?=$basedir?>/thumbnail.png"/> - <meta property="og:image:width" content="192"/> - <meta property="og:image:height" content="192"/> + <meta property="og:image" content="<?=$basedir?>/thumbnail.php?grille=<?=$id?>&lignes=<?=$hauteur?>&colonnes=<?=$largeur?>&largeur=1200&hauteur=630"/> + <meta property="og:image:width" content="1200"/> + <meta property="og:image:height" content="630"/> <meta property="og:locale" content="fr_FR"/> <meta property="og:site_name" content="<?=$_SERVER["HTTP_HOST"]?>"/> </head> <?php -$id = htmlspecialchars($_GET["grille"]); - $grille_valide = $grille_valide || $grille->load($id) || $grille->genere($id); mt_srand(crc32($id)); diff --git a/style.css b/style.css index e2c299a..a474a66 100644 --- a/style.css +++ b/style.css @@ -108,6 +108,7 @@ h2 { } .grille input[disabled] { + color: black; background-color: black; } diff --git a/thumbnail.php b/thumbnail.php new file mode 100644 index 0000000..8a4d928 --- /dev/null +++ b/thumbnail.php @@ -0,0 +1,63 @@ +<?php + +// Paramètres de largeur, hauteur, lignes et colonnes +$largeur = isset($_GET['largeur']) ? (int)$_GET['largeur'] : 200; // Valeur par défaut : 200 +$hauteur = isset($_GET['hauteur']) ? (int)$_GET['hauteur'] : 200; // Valeur par défaut : 200 +$lignes = isset($_GET['lignes']) ? (int)$_GET['lignes'] : 8; // Valeur par défaut : 4 +$colonnes = isset($_GET['colonnes']) ? (int)$_GET['colonnes'] : 8; // Valeur par défaut : 4 +$bordure = 6; + +// Créer une image vide +$image = imagecreate($largeur, $hauteur); + +// Couleurs +$blanc = imagecolorallocate($image, 255, 255, 255); +$noir = imagecolorallocate($image, 0, 0, 0); + +// Remplir l'image avec un fond blanc +imagefill($image, 0, 0, $blanc); + +// Calculer la taille et la position des cases +$cote = (int)min(($largeur - 2 * $bordure) / $colonnes, ($hauteur - 2 * $bordure) / $lignes); +$haut = (int)(($hauteur - $lignes * $cote - 2 * $bordure) / 2) + $bordure; +$gauche = (int)(($largeur - $colonnes * $cote - 2 * $bordure) / 2) + $bordure; +$bas = $haut + $lignes * $cote; +$droite = $gauche + $colonnes * $cote; + +// Dessiner les bordures extérieures (3 pixels d'épaisseur) +imagesetthickness($image, $bordure); +imagerectangle($image, $gauche, $haut, $droite, $bas, $noir); + +// Dessiner les lignes et colonnes internes (1 pixel d'épaisseur) +imagesetthickness($image, 2); +for ($x = $gauche; $x <= $droite; $x += $cote) { + imageline($image, $x, $haut, $x, $bas, $noir); // Lignes verticales +} +for ($y = $haut; $y <= $bas; $y += $cote) { + imageline($image, $gauche, $y, $droite, $y, $noir); // Lignes horizontales +} + +// Noicir les cases +if (isset($_GET["grille"])) { + include_once "Grille.php"; + + $grille = new Grille($lignes, $colonnes); + $id = htmlspecialchars($_GET["grille"]); + $grille->load($id) || $grille->genere($id); + + for ($y = 0; $y < $lignes; $y++) { + for ($x = 0; $x < $colonnes; $x++) { + if ($grille[$y][$x] == CASE_NOIRE) { + imagefilledrectangle($image, $gauche + $x * $cote, $haut + $y * $cote, $gauche + ($x + 1) * $cote, $haut + ($y + 1) * $cote, $noir); + } + } + } +} + +// Envoyer l'image au navigateur +header('Content-Type: image/png'); +imagepng($image); + +// Libérer la mémoire +imagedestroy($image); +?> \ No newline at end of file