public Etat(int pos, ObjetCase etat, List <int> poussieres, List <int> bijoux) { Position = pos; EtatPiece = etat; ListePoussiere = poussieres; ListeBijoux = bijoux; }
// Fonction de succession des états /* En considérant le couple (position x, état de la pièce) : * - <(x, BIJOU), RAMASSER> -> (x, VIDE) * - <(x, POUSSIEREBIJOU), RAMASSER> -> (x, POUSSIERE) * - <(x, POUSSIERE), ASPIRER> -> (x, VIDE) * - <(x, VIDE), HAUT> -> (x-10, ObjetCase[x-10]) * - <(x, VIDE), BAS> -> (x+10, ObjetCase[x+10]) * - <(x, VIDE), GAUCHE> -> (x-1, ObjetCase[x-1]) * - <(x, VIDE), DROITE> -> (x+1, ObjetCase[x+1]) * Les autres possibilités sont illégales. */ public List <Noeud> FonctionSuccession() { List <Noeud> successeurs = new List <Noeud>(); Etat etat; Noeud noeud; switch (EtatNoeud.EtatPiece) { case ObjetCase.BIJOUX: { List <int> listeBijoux = new List <int>(EtatNoeud.ListeBijoux); listeBijoux.Remove(EtatNoeud.Position); etat = new Etat(EtatNoeud.Position, ObjetCase.VIDE, EtatNoeud.ListePoussiere, listeBijoux); noeud = new Noeud(etat, this, Action.RAMASSER); successeurs.Add(noeud); break; } case ObjetCase.POUSSIEREBIJOUX: { List <int> listeBijoux = new List <int>(EtatNoeud.ListeBijoux); listeBijoux.Remove(EtatNoeud.Position); etat = new Etat(EtatNoeud.Position, ObjetCase.POUSSIERE, EtatNoeud.ListePoussiere, listeBijoux); noeud = new Noeud(etat, this, Action.RAMASSER); successeurs.Add(noeud); break; } case ObjetCase.POUSSIERE: { List <int> listePoussiere = new List <int>(EtatNoeud.ListePoussiere); listePoussiere.Remove(EtatNoeud.Position); etat = new Etat(EtatNoeud.Position, ObjetCase.VIDE, listePoussiere, EtatNoeud.ListeBijoux); noeud = new Noeud(etat, this, Action.ASPIRER); successeurs.Add(noeud); break; } case ObjetCase.VIDE: { // Haut if (EtatNoeud.Position >= 10) { int pos = EtatNoeud.Position - 10; ObjetCase piece = ObjetCase.VIDE; if (EtatNoeud.ListePoussiere.Exists(x => x == pos) && EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.POUSSIEREBIJOUX; } else if (EtatNoeud.ListePoussiere.Exists(x => x == pos)) { piece = ObjetCase.POUSSIERE; } else if (EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.BIJOUX; } etat = new Etat(pos, piece, EtatNoeud.ListePoussiere, EtatNoeud.ListeBijoux); noeud = new Noeud(etat, this, Action.HAUT); successeurs.Add(noeud); } // Bas if (EtatNoeud.Position < 90) { int pos = EtatNoeud.Position + 10; ObjetCase piece = ObjetCase.VIDE; if (EtatNoeud.ListePoussiere.Exists(x => x == pos) && EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.POUSSIEREBIJOUX; } else if (EtatNoeud.ListePoussiere.Exists(x => x == pos)) { piece = ObjetCase.POUSSIERE; } else if (EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.BIJOUX; } etat = new Etat(pos, piece, EtatNoeud.ListePoussiere, EtatNoeud.ListeBijoux); noeud = new Noeud(etat, this, Action.BAS); successeurs.Add(noeud); } // Gauche if ((EtatNoeud.Position % 10) != 0) { int pos = EtatNoeud.Position - 1; ObjetCase piece = ObjetCase.VIDE; if (EtatNoeud.ListePoussiere.Exists(x => x == pos) && EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.POUSSIEREBIJOUX; } else if (EtatNoeud.ListePoussiere.Exists(x => x == pos)) { piece = ObjetCase.POUSSIERE; } else if (EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.BIJOUX; } etat = new Etat(pos, piece, EtatNoeud.ListePoussiere, EtatNoeud.ListeBijoux); noeud = new Noeud(etat, this, Action.GAUCHE); successeurs.Add(noeud); } // Droite if (((EtatNoeud.Position + 1) % 10) != 0) { int pos = EtatNoeud.Position + 1; ObjetCase piece = ObjetCase.VIDE; if (EtatNoeud.ListePoussiere.Exists(x => x == pos) && EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.POUSSIEREBIJOUX; } else if (EtatNoeud.ListePoussiere.Exists(x => x == pos)) { piece = ObjetCase.POUSSIERE; } else if (EtatNoeud.ListeBijoux.Exists(x => x == pos)) { piece = ObjetCase.BIJOUX; } etat = new Etat(pos, piece, EtatNoeud.ListePoussiere, EtatNoeud.ListeBijoux); noeud = new Noeud(etat, this, Action.DROITE); successeurs.Add(noeud); } break; } } return(successeurs); }