public Plateau() { if (!Config.DesignMode) { EtapeDune = 0; Elements = new Elements(); ObstaclesPieds = new IForme[0]; RayonAdversaireInitial = 200; RayonAdversaire = RayonAdversaireInitial; ReflecteursNosRobots = true; ObstaclesBalise = new List<IForme>(); ChargerObstacles(); CreerSommets(110); SauverGraph(); //ChargerGraph(); Balise.PositionEnnemisActualisee += Balise_PositionEnnemisActualisee; //SuiviBalise.PositionEnnemisActualisee += new Balises.SuiviBalise.PositionEnnemisDelegate(interpreteBalise_PositionEnnemisActualisee); InitElementsJeu(); Random random = new Random(); SemaphoreCollisions = new Semaphore(0, int.MaxValue); thCollisions = new Thread(ThreadTestCollisions); thCollisions.Start(); } }
/// <summary> /// Teste si deux formes sont trop proches pour envisager le passage du robot /// </summary> /// <param name="forme1">Forme 1</param> /// <param name="forme2">Forme 2</param> /// <returns>Vrai si les deux formes sont trop proches</returns> public bool TropProche(IForme forme1, IForme forme2, int marge = 0) { Type typeForme1 = forme1.GetType(); Type typeForme2 = forme2.GetType(); if (typeForme1.IsAssignableFrom(typeof(Segment))) if (typeForme2.IsAssignableFrom(typeof(Segment))) return ((Segment)forme1).Distance((Segment)forme2) < Rayon; else return ((Segment)forme1).Distance(forme2) < Rayon; else return forme1.Distance(forme2) < Rayon + marge; }
/// <summary> /// Ajoute un obstacle et teste les endroits du graph qui ne sont plus franchissables /// </summary> /// <param name="obstacle">Forme de l'obstacle</param> /// <param name="fixe">Si l'obstacle est fixe, on supprime complètement les noeuds et arcs non franchissables. Sinon on les rends non franchissables temporairement.</param> public static void AjouterObstacle(IForme obstacle, bool fixe = false, bool majGraph = false) { if (majGraph) ObstaclesBalise.Clear(); if (fixe) ObstaclesPlateau.Add(obstacle); else ObstaclesBalise.Add(obstacle); }
public static void DessinerForme(Graphics graphics, Color color, int epaisseur, IForme inconnue, bool plein = false) { Type typeForme = inconnue.GetType(); if (typeForme.IsAssignableFrom(typeof(Droite))) DessinerForme(graphics, color, epaisseur, (Droite)inconnue); else if (typeForme.IsAssignableFrom(typeof(Segment))) DessinerForme(graphics, color, epaisseur, (Segment)inconnue); else if (typeForme.IsAssignableFrom(typeof(Cercle))) DessinerForme(graphics, color, epaisseur, (Cercle)inconnue, plein); else if (typeForme.IsAssignableFrom(typeof(Polygone)) || typeForme.IsSubclassOf(typeof(Polygone))) DessinerForme(graphics, color, epaisseur, (Polygone)inconnue); else throw new NotImplementedException("Je ne sais pas dessiner cette forme : " + inconnue.GetType().ToString()); }