//                                  //

        // gestion ouverture portes         //
        public void ouvrirPorte(Cellule celluleCourante, SoundEffect bruitPorte, String code)
        {
            //on cherche le mur correspondant à la porte, et on l'ouvre... Puis on fait pareil pour le mur opposé dans la cellule voisine
            foreach (var mur in celluleCourante.murs)
            {
                //on regarde si le mur est une porte et si le code entré par le joueur est le bon
                if (mur.Value.state.Equals(Etat.PORTE) && mur.Value.convertir(code))
                {
                    mur.Value.ouvrir();
                    foreach (var vois in celluleCourante.voisins)
                    {
                        if (vois.Item2.Equals(mur.Key))
                        {
                            bruitPorte.Play();
                            vois.Item1.murs[this.laby.opposes[mur.Key]].ouvrir();
                            //Et on complète les listes d'adjacence
                            celluleCourante.addAdjacent(vois);
                            vois.Item1.addAdjacent(new Tuple <Cellule, Direction>(celluleCourante, this.laby.opposes[mur.Key]));
                            break;
                        }
                    }
                    break;
                }
            }

            dessin_ConstrBuffersMursPortes(); //on actualise le buffer pour ne plus afficher la porte
        }
 /// <summary>
 /// ouvre le mur de la cellule donnée puis de sa cellule voisine / peut être utilisé pour ouvrir une porte
 /// </summary>
 /// <param name="c"></param>
 /// <param name="d"></param>
 private void ouvrirMur(Cellule c, Direction d)
 {
     c.murs[d].ouvrir();          //on ouvre le mur de la cellule c
     foreach (var t in c.voisins) //on cherche la cellule voisine à c correspondant à d
     {
         if (t.Item2.Equals(d))
         {
             t.Item1.murs[opposes[d]].ouvrir(); //on ouvre le mur à l'opposé de d dans la cellule voisine t.Item1
             c.addAdjacent(t);                  //on l'ajoute aux adjacents pour dire qu'on peut y aller physiquement depuis c
             Tuple <Cellule, Direction> cd = new Tuple <Cellule, Direction>(c, opposes[d]);
             t.Item1.addAdjacent(cd);           //et on ajoute c aux adjacents de t.Item1
             break;                             //il ne peut y en avoir qu'un
         }
     }
 }