コード例 #1
0
 public Etat(int pos, ObjetCase etat, List <int> poussieres, List <int> bijoux)
 {
     Position       = pos;
     EtatPiece      = etat;
     ListePoussiere = poussieres;
     ListeBijoux    = bijoux;
 }
コード例 #2
0
        // 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);
        }