示例#1
0
        public void calculeTemps()
        {
            temps = 0;
            Point direction = new Point(0, 0);

            if (noeuds.Count == 0)
            {
                SetTemps(0);
            }

            for (int i = 1; i < noeuds.Count; i++)
            {
                NodeDistance noeudEntrepot  = (NodeDistance)noeuds[i];
                NodeDistance noeudPrecedent = (NodeDistance)noeuds[i - 1];
                var          signX          = Math.Sign(noeudEntrepot.posX - noeudPrecedent.posX);
                var          signY          = Math.Sign(noeudEntrepot.posY - noeudPrecedent.posY);

                if (i == 1)
                {
                    temps    += 1;
                    direction = new Point(signX, signY);
                }

                else
                {
                    if (signX != direction.X || signY != direction.Y) // s'il change de direction, 3 secondes sur place + 1 seconde
                    {
                        temps += 4;
                    }
                    else
                    {
                        temps += 1;                      // s'il ne change pas de direction
                    }
                    direction = new Point(signX, signY); //nouveau vecteur direction
                }
            }
            temps += 10;                // Orientation + 10 secondes;
            temps += 2 * objet.hauteur; // Hauteur de l'objet fois 2
            SetTemps(temps);
        }
示例#2
0
        public override bool IsEqual(GenericNode N2)
        {
            NodeDistance NE = (NodeDistance)N2;

            return(NE.posX == posX && NE.posY == posY);
        }
示例#3
0
        protected override void OnPaint(PaintEventArgs e) // fonction dessinant l'ensemble de la grille et des chemins parcourus par le chariot
        {
            base.OnPaint(e);
            if (tabForme != null)
            {
                for (int i = 0; i < tabEntrepot.GetLength(0); i++)//Pour toute les formes dans tabForme
                {
                    for (int j = 0; j < tabEntrepot.GetLength(1); j++)
                    {
                        FormeRectangle.creationFormeColorée(tabForme[i, j], this);//On dessine la forme avec sa taille et sa couleur passée au préalable dans setGrilleView()
                    }
                }
                foreach (Chariot c in tabChariot)//Pour tout les chariots on les dessine sur la grille
                {
                    int            positionX = 25 * c.posX;
                    int            positionY = 25 * c.posY;
                    FormeRectangle chariot   = new FormeRectangle("black", positionX, positionY);//Un chariot est un carré noir sur la grille.
                    FormeRectangle.creationFormeColorée(chariot, this);
                }
                foreach (Objet o in tabObjet)//Pour tout les objets on les dessine sur la grille
                {
                    int            positionX = 25 * o.posX;
                    int            positionY = 25 * o.posY;
                    FormeRectangle objet     = new FormeRectangle("orange", positionX, positionY);// Un objet est un carré orange sur la grille
                    FormeRectangle.creationFormeColorée(objet, this);
                }
                // Colorie le chemin du noeud initial jusqu'à l'objet

                if (Lres != null)
                {
                    foreach (GenericNode n in Lres)
                    {
                        int positionX = 0;
                        int positionY = 0;
                        if (nodeTemps)    // Si on gère des nodeTemps ou des NodeDistance
                        {
                            NodeTemps node = (NodeTemps)n;
                            positionX = 25 + 25 * node.posX;
                            positionY = 25 + 25 * node.posY;
                        }
                        else
                        {
                            NodeDistance node = (NodeDistance)n;
                            positionX = 25 + 25 * node.posX;
                            positionY = 25 + 25 * node.posY;
                        }


                        FormeRectangle objet = new FormeRectangle("red", positionX, positionY);    //colorie la case de la grille correspondnat à chaque noeud en rouge; le chemin suivi par le chariot apparait tout en rouge
                        FormeRectangle.creationFormeColorée(objet, this);
                        //}
                    }

                    //Colore le chemin retour : de l'objet à une des cases 1 la plus proche de la grille
                    if (bestTrajectoire != null)
                    {
                        foreach (GenericNode n in bestTrajectoire)
                        {
                            int positionX = 0;
                            int positionY = 0;
                            if (nodeTemps)
                            {
                                NodeTemps node = (NodeTemps)n;
                                positionX = 25 + 25 * node.posX;
                                positionY = 25 + 25 * node.posY;
                            }
                            else
                            {
                                NodeDistance node = (NodeDistance)n;
                                positionX = 25 + 25 * node.posX;
                                positionY = 25 + 25 * node.posY;
                            }
                            FormeRectangle objet = new FormeRectangle("purple", positionX, positionY);
                            FormeRectangle.creationFormeColorée(objet, this);
                        }
                    }
                }
            }
        }