Bonjour,

Je programme un jeu de puzzle d'image et j'ai rencontré un problème d'affichage que je n'arrive pas à régler depuis 2 semaines

Tout le code du jeux se repose sur le nom qu'on attribue a chaque partie d'image (préalablement coupé de l'image initiale). J'ai alors définit une case blanche aléatoire qui sera la case que l'on va déplacer en cliquant sur une autre case (intervertir les deux cases).
la case qui est censé être blanche l'est dans les fichiers.
Voici mon code pour interchanger les deux cases :

rename ("images_redim/redim_$x_deplacement;$y_deplacement$nom_image_src", "images_redim/redim_$sup_x;$sup_y$nom_image_src") ; // On renome le nom du fichier de la case blanche en le nom de la case déplacée
      $largeur = $l2a/$difficulte ;
      $hauteur = $h2a/$difficulte ;
      $supimage = imagecreatetruecolor ($largeur ,$hauteur); // Création d'une nouvelle cellule
      $couleur = imagecolorallocate($supimage, 255, 255, 255); // Création de la couleur blanche
      imagefill($supimage, 0, 0, $couleur); // On rempli l'image de la couleur blanche
      imagejpeg($supimage,"images_redim/redim_" . $x_deplacement . ";" . $y_deplacement . $nom_image_src); // Sauvegarde de l'image

      // Après le traitement image, on interverti les valeurs de $x_deplacement et $sup_x ainsi que $y_deplacement et $sup_y car on en a besoin quand on appel les pages de défintions des cases cliquables. On intervertit les valeurs par un calcul 
      $x_deplacement = $x_deplacement + $sup_x ; // Intervertir les valeurs de $x_deplacement et $sup_x
      $sup_x = $x_deplacement - $sup_x ;
      $x_deplacement = $x_deplacement - $sup_x ;

      $y_deplacement = $y_deplacement + $sup_y ; // Intervertir les valeurs de $y_deplacement et $sup_y
      $sup_y = $y_deplacement - $sup_y ;
      $y_deplacement = $y_deplacement - $sup_y ;

Et voici le code d'affichage de mes images :

echo "<p>";
echo "<table>";
for ($y = 1 ; $y <= $difficulte ; $y++) // Affichage à partir de la ligne 1 jusqu'à $difficulte
{
echo "<tr>"; // On fait un saut de ligne après avoir fini d'afficher tous les x

    for ($x = 1 ; $x <= $difficulte ; $x++) // Affichage de toute la ligne x
    {
      // On vérifie si l'image qu'on va affiché est une case cliquable
      foreach ($cases_cliquables as list($a, $b)) // On attribue les variables du tableau en occurance x_cliquable et y_cliquable à $a et $b afin de tester la condition
      {
          // $a contient le premier élément du tableau soit x de l'image noir
          // et $b contient le second élément soit y de l'image noir
          if ($a == $x AND $b == $y)
          {
            // On ne peut pas afficher l'image ici car elle va se répéter pour toutes les valeurs du tableau donc on sort de la boucle foreach pour afficher l'image cliquable
            goto case_cliquable ;
          }
      }
      echo "<td><img src=images_redim/redim_$x;$y$nom_image_src width=$affichage_dimension_image vspace=0 /></td>";  // pas de lien hypertexte sur une image non adjacente :
      goto end;
      case_cliquable :
      echo "<form method=post action=09_affichage_image-apres_deplacement.php?x_deplacement=$x&y_deplacement=$y&diff=$difficulte&x_imagenoire=$sup_x&y_imagenoire=$sup_y&nom_image=$nom_image_src&hauteur=$h2a&largeur=$l2a&dimension=$affichage_dimension_image>
      <td><input type=image src=images_redim/redim_$x;$y$nom_image_src name=foo width=$affichage_dimension_image vspace=0 /></td>
      </form>"; // création du lien hypertexte permettant de deplacer l'image (image cliquable) :
      end :
    }
echo "</tr>"; // Fin de la ligne
}
echo "</table>"; // Fin du tableau
echo "</p>";

J'aimerais bien que quelqu'un puisse m'aider a trouver le bug d'affichage dans mon code et débugger le code

Description du bug

J'ai réussi a programmer cette partie mais elle bug un peu près 1 fois sur 7, c'est à dire que parfois, la case blanche ne s'affiche pas et la case cliqquée est dupliqué (ce qui est normal étant donné ma méthode pour interchanger les images). La case cliquée est affiché deux fois tandis que lorsquqe je vérifie en parallèle dans mes fichiers, les images sont pourtant bien changé et bien nommé. J'ai alors penser que le code défillait trop vite et j'ai poser un delay dans le code mais cela n'a pas fonctionné. Si quelqu'un aurait la gentilesse de m'aider et pourrait m'ajouter sur Discord s'il est intéréssé Kemar#8245 merci beaucoup !!!

Aucune réponse