コード例 #1
0
        // override object.Equals
        public override bool Equals(object obj)
        {
            //
            // See the full list of guidelines at
            //   http://go.microsoft.com/fwlink/?LinkID=85237
            // and also the guidance for operator== at
            //   http://go.microsoft.com/fwlink/?LinkId=85238
            //

            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }

            // TODO: write your implementation of Equals() here
            ZPoint p = obj as ZPoint;

            if (!_x.Equals(p._x))
            {
                return(false);
            }
            if (!_y.Equals(p._y))
            {
                return(false);
            }
            return(true);
        }
コード例 #2
0
        //Méthode voisin: détermine le voisin d'un point
        void Voisin(ZPoint p)
        {
            _listVoisin = new List <ZPoint>();//liste qui va contenir les voisins (4 voisins)

            bool inf_max_x = false, inf_max_y = false;

            if (p._x < _taille._width - _ecart._x)  //on teste si le voisin du point sort de la zone maximale vers la droite
            {
                inf_max_x = true;                   //x pourra avoir un voisin à droite
            }
            if (p._y < _taille._height - _ecart._y) //on teste si le voisin de la case  sort de la zone maximale vers le bas
            {
                inf_max_y = true;                   //y pourra avoir un voisin en bas
            }

            //recherche des voisins dans les 4 directions
            if (p._x > 0 && Contrainte(p._x - _ecart._x, p._y))                       //recherche du voisin de gauche
            {
                AddVoisin(p._x - _ecart._x, p._y);                                    //mise du voisin de gauche dans la liste
            }
            if (inf_max_x == true && p._x >= 0 && Contrainte(p._x + _ecart._x, p._y)) //recherche du voisin de  droite
            {
                AddVoisin(p._x + _ecart._x, p._y);                                    //mise du voisin de droite dans la liste
            }
            if (p._y > 0 && Contrainte(p._x, p._y - _ecart._y))                       //recherche du voisin du haut
            {
                AddVoisin(p._x, p._y - _ecart._y);                                    //mise du voisin du haut dans la liste
            }
            if (inf_max_y == true && p._y >= 0 && Contrainte(p._x, p._y + _ecart._y)) //recherche du voisin du bas
            {
                AddVoisin(p._x, p._y + _ecart._y);                                    //mise du voisin du bas dans la liste
            }
        }
コード例 #3
0
        public double Distance(ZPoint p, ZEcart ecart)
        {
            int x1 = _x / ecart._x;
            int x2 = p._x / ecart._x;

            int y1 = _y / ecart._y;
            int y2 = p._y / ecart._y;

            return(Math.Abs(x1 - x2) + Math.Abs(y1 - y2));
        }
コード例 #4
0
        protected List <ZPoint> _listVoisin; //liste utilisé pour la recherche des voisins d'un point(expliqué plus tard)

        public Zone(ZEcart ecart, ZTaille taille, ZPoint depart)
        {
            _ecart  = ecart;
            _taille = taille;

            Console.WriteLine("ecart:(" + _ecart._x + ";" + _ecart._y + ")");
            Console.WriteLine("taille:(" + _taille._height + ";" + _taille._width + ")");

            _points = new List <ZPoint>();
        }
コード例 #5
0
        //Méthode getGroupe: la fonction sert à définir la zone
        public void GetGroupe(ZPoint p)
        {
            int i, j;//compteurs

            i = p._x;
            j = p._y;

            Voisin(p);                           //fonction qui récupère la liste des voisins de (x,y)

            Add(p);                              //on ajoute le point dans la zone
            foreach (ZPoint curr in _listVoisin) //on parcourt la liste des voisins
            {
                i = (int)curr._x;
                j = (int)curr._y;

                if (_points.Contains(new ZPoint(i, j)) == false) //si le voisin n'est pas encore dans le groupe
                {
                    GetGroupe(new ZPoint(i, j));                 /*on relance la fonction afin de voir les voisins du point courant
                                                                  * vont dans _move*/
                }
            }
        }
コード例 #6
0
 public ZPoint(ZPoint p)
 {
     _x = p._x;
     _y = p._y;
 }
コード例 #7
0
 public virtual void Add(ZPoint point)
 {
     _points.Add(point);
 }
コード例 #8
0
 public virtual void AddVoisin(ZPoint point)
 {
     _listVoisin.Add(point);
 }
コード例 #9
0
        public virtual bool Contrainte(int x, int y)
        {
            ZPoint p = new ZPoint(x, y);

            return(!_listVoisin.Contains(p));
        }
コード例 #10
0
 //Méthodes gérant la contrainte, ici la contrainte est que le point n'est pas déja dans la zone
 public virtual bool Contrainte(ZPoint p)
 {
     return(!_listVoisin.Contains(p));
 }