// // // 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 } } }