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); }
public override bool IsEqual(GenericNode N2) { NodeDistance NE = (NodeDistance)N2; return(NE.posX == posX && NE.posY == posY); }
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); } } } } }