protected int m_PosYDest; //Position en Y de la destination /**Constructeur * p_rnd: seed random * p_ListePosAeroport: La liste des positions des aéroport */ public ClientTransport(Random p_rnd, List <PosCarte> p_ListePosAeroport) : base() { //Taille de l'image 900 par 528 int[] Taille = new int[2]; Taille[0] = 900; Taille[1] = 528; //Nombre random entre 20 et la taille de l'image - 20 m_PosX = p_rnd.Next(20, Taille[0] - 20); m_PosY = p_rnd.Next(20, Taille[1] - 20); //La position sur la carte m_PositionDepart = new PosCarte(m_PosX, m_PosY, Taille); this.TrouverDestination(p_ListePosAeroport, p_rnd); this.TrouverDepart(p_ListePosAeroport, p_rnd); //Random pour nombre de clients m_nbClients = p_rnd.Next(20, 70); //Position actuelle m_pos = m_PositionDepart; }
/**Constructeur lors de la séparation de deux clients * p_PosDepart: la position de départ * p_PosDestination: la position de destination * p_nbClients: le nombre de client * p_PosX: la position X du client * p_PosY: la position Y du client * p_PosXDest: la position X de la destination * p_PosYDest: la position Y de la destination * p_posDest: la position de la destination */ public ClientTransport(PosCarte p_PosDepart, PosCarte p_PosDestination, int p_nbClients, int p_PosX, int p_PosY, int p_PosXDest, int p_PosYDest, PosCarte p_posDest) : base() { //Nombre de clients m_nbClients = p_nbClients; //Position de départ m_PositionDepart = p_PosDepart; //Position de destination m_posDest = p_PosDestination; //Position actuelle m_pos = m_PositionDepart; //Coordonnées en x et y du client m_PosX = p_PosX; m_PosY = p_PosY; //Coordonnées en x et y de la destination du client m_PosXDest = p_PosXDest; m_PosYDest = p_PosYDest; //Postion de la destination m_posDest = p_posDest; }
private Scenario m_scenario; //Référence au scénario public Aeroport(string p_nom, int p_minPass, int p_maxPass, int p_minMarch, int p_maxMarch, PosCarte p_pos) //Constructeur { m_nom = p_nom; m_minPassagers = p_minPass; m_maxPassagers = p_maxPass; m_minMarchandises = p_minMarch; m_maxMarchandises = p_maxMarch; m_vehicules = new List <Vehicule>(); m_pos = p_pos; }
/**Constructeur * p_rnd: seed Random */ public Observateur(Random p_rnd) : base() { //Taille de l'image 900 par 528 int[] Taille = new int[2]; Taille[0] = 900; Taille[1] = 528; //Nombre random entre 20 et la taille de l'image - 20 m_PosX = p_rnd.Next(20, Taille[0] - 20); m_PosY = p_rnd.Next(20, Taille[1] - 20); //La position sur la carte m_PositionDepart = new PosCarte(m_PosX, m_PosY, Taille); }
public string[] obtenirPosAeroports() //Obtenir l'emplacement des aéroports { string[] aeroports = new string[m_aeroports.Count]; //Les infos de tous les aéroports string aeroport; //Les infos de l'aéroport for (int i = 0; i < m_aeroports.Count; i++) { PosCarte posCarte = m_aeroports[i].Pos; aeroport = m_aeroports[i].Nom + "," + posCarte.X + "," + posCarte.Y; aeroports[i] = aeroport; } return(aeroports); }
/**Calculer la Distance entre deux positions cartographique * p_depart: la position de départ * p_destination: la position de destination */ public static int Distance(PosCarte p_depart, PosCarte p_destination) { int distance; int distancex; int distancey; distancex = p_depart.X - p_destination.X; distancey = p_depart.Y - p_destination.Y; //Pythagore distance = Math.Abs((int)Math.Sqrt((distancex * distancex) + (distancey * distancey))); return(distance); }
protected Aeroport m_aeroport; //Référence à l'aeroport /**Constructeur de véhicule * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement du véhicule * p_tempsMaintenance: le temps de maintenance du véhicule * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: position de l'aeroport qui le contient * p_scenario: référence sur le scenario * p_aeroport: référence sur l'aeroport dans lequel il est */ public Vehicule(string p_nom, int p_KMH, int p_tempsMain, Color p_couleur, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) { m_nom = p_nom; m_KMH = p_KMH; m_tempsMaintenance = p_tempsMain; m_couleur = p_couleur; Usine usine = Usine.obtenirUsine(); m_etat = usine.creerHangar(this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); m_posDepart = p_posAeroport; m_scenario = p_scenario; m_aeroport = p_aeroport; }
private Aeroport aeroportCorrespondant(PosCarte p_pos) //Trouver l'aéroport correspondant aux coordonnées { Aeroport aeroport = null; //Aéroport for (int i = 0; i < m_aeroports.Count; i++) { PosCarte posAero = m_aeroports[i].Pos; //Emplacement aéroport if ((posAero.X == p_pos.X) && (posAero.Y == p_pos.Y)) //Si c'est le même emplacement { aeroport = m_aeroports[i]; } } return(aeroport); }
private int m_intensite; //Intensité du feu (nombre d'aller retour) /**Constructeur * p_rnd: seed Random */ public Feu(Random p_rnd) : base() //Constructeur { //Taille de l'image 900 par 528 int[] Taille = new int[2]; Taille[0] = 900; Taille[1] = 528; //Nombre random entre 20 et la taille de l'image - 20 m_PosX = p_rnd.Next(20, Taille[0] - 20); m_PosY = p_rnd.Next(20, Taille[1] - 20); //La position sur la carte m_PositionDepart = new PosCarte(m_PosX, m_PosY, Taille); //Intensité du feu m_intensite = p_rnd.Next(1, 6); }
/** Changer l'État du véhicule (Delegate) * Passer au prochain État lorsque l'État actuel annonce qu'il est prêt à changer */ public override void ChangerEtat(object source) { string EtatAvant = m_etat.ToString(); int surplus = m_etat.Surplus; Usine usine = Usine.obtenirUsine(); //Si l'etat de l'avion est dans le hangar et qu'un client est assigné if (m_etat.ToString() == "Hangar" && m_client != null) { PosCarte posDestination = m_client.PositionDepart; PosCarte posActuelle = usine.creerPosition(m_posDepart.X, m_posDepart.Y); int tempsVol = PosCarte.Distance(m_posDepart, posDestination) * 4; //Calcul du temps de vol //Créer l'Etat et s'abonner (Observer) m_etat = usine.creerObserver(m_posDepart, posActuelle, posDestination, tempsVol, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Observation") { //Créer l'Etat et s'abonner (Maintenance) m_etat = usine.creerMaintenance(m_tempsMaintenance, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Maintenance") { //Créer l'Etat et s'abonner (Hangar) m_etat = usine.creerHangar(this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); ResetClient(); } }
/**Trouver un aeroport de départ * p_ListePosAeroport: Liste des position des aéroport * p_rnd: Seed Random */ public void TrouverDepart(List <PosCarte> p_ListePosAeroport, Random p_rnd) { //Taille de l'image 900 par 528 int[] Taille = new int[2]; Taille[0] = 900; Taille[1] = 528; //Random rnd = new Random(); Random rnd = p_rnd; //Position destination //Nombre random entre 0 et le nombre d'éléments dans les liste X et Y int Aeroport1ind = rnd.Next(0, p_ListePosAeroport.Count); /* * Si les coordonnées en X et en Y de la destination sont pour la même aéroport * crée la position sur la carte qui relie à l'aéroport */ int PosX = 0; int PosY = 0; while ((PosX == 0) && (PosY == 0)) { if ((p_ListePosAeroport[Aeroport1ind].X != m_posDest.X) || (p_ListePosAeroport[Aeroport1ind].Y != m_posDest.Y)) { PosX = p_ListePosAeroport[Aeroport1ind].X; PosY = p_ListePosAeroport[Aeroport1ind].Y; m_pos = new PosCarte(PosX, PosY, Taille); m_PositionDepart = m_pos; m_PosX = PosX; m_PosY = PosY; } else { Aeroport1ind = rnd.Next(0, p_ListePosAeroport.Count); } } }
/** Constructeur d'un avion de marchandises * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_aeroport: l'aeroport qui le contient (pour extraire ses coordonnées) * p_tempsEmb: le temps d'embarquement de l'avion * p_tempsDeb: le temps de debarquement de l'avion * p_scenario: référence au scenario * p_aeroport: référence à l'aeroport dans lequel il est */ public AvionPassagers(string p_nom, int p_KMH, int p_tempsMain, int p_tempsEmb, int p_tempsDeb, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) //Constructeur : base(p_nom, p_KMH, p_tempsMain, p_tempsEmb, p_tempsDeb, Color.Green, p_posAeroport, p_scenario, p_aeroport) { }
protected int m_nbClients; //Le nombre de clients (passagers ou marchandises) dans l'avion /**Constructeur * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps avant le prochain etat * p_vehicule: le véhicule qui contient l'etat */ public Aller(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_nbClients, int p_temps, Vehicule p_vehicule) : base(p_posDepart, p_posActuelle, p_posDestination, p_temps, p_vehicule) //Constructeur { m_nbClients = p_nbClients; }
/**Créer un Etat d'AllerRetour sans intensité * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps avant le prochain etat * p_surplus: le temps de surplus * p_vehicule: le véhicule qui contient l'etat */ public AllerRetour creerAllerRetour(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_temps, int p_surplus, Vehicule p_vehicule) { return(new AllerRetour(p_posDepart, p_posActuelle, p_posDestination, p_temps - p_surplus, 1, p_vehicule)); }
/**Créer un Etat d'observation * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps avant le prochain etat * p_surplus: le temps de surplus * p_vehicule: le véhicule qui contient l'etat */ public Observer creerObserver(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_temps, int p_surplus, Vehicule p_vehicule) { return(new Observer(p_posDepart, p_posActuelle, p_posDestination, p_temps - p_surplus, p_vehicule)); }
/** Changer l'État du véhicule (Delegate) * Passer au prochain État lorsque l'État actuel annonce qu'il est prêt à changer */ public override void ChangerEtat(object source) { int surplus = m_etat.Surplus; Usine usine = Usine.obtenirUsine(); //Si l'etat de l'avion est dans le hangar et que le minimum de clients est atteint if (m_etat.ToString() == "Hangar" && (m_client != null) && (m_client.NbClients >= (nbMax * pourcentage))) { //Créer l'Etat et s'abonner (Embarquement) m_etat = usine.creerEmbarquement(m_tempsEmbarquement, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Embarquement") { PosCarte posDestination = m_client.Destination; PosCarte posActuelle = usine.creerPosition(m_posDepart.X, m_posDepart.Y); int nbClients = m_client.NbClients; int tempsVol = PosCarte.Distance(m_posDepart, posDestination) * 4; //Calcul du temps de vol //Créer l'Etat et s'abonner (Aller) m_etat = usine.creerAller(m_posDepart, posActuelle, posDestination, nbClients, tempsVol, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Aller") { int nbClients = m_client.NbClients; m_aeroport.transfererVehicule(this, m_etat.DestinationFinale()); //Créer l'Etat et s'abonner (Debarquement) m_etat = usine.creerDebarquement(nbClients, m_tempsDebarquement, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Debarquement") { m_client.NbClients = 0; //Créer l'Etat et s'abonner (Maintenance) m_etat = usine.creerMaintenance(m_tempsMaintenance, surplus, this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); if (surplus > 0) { m_etat.Avance(surplus); } } else if (m_etat.ToString() == "Maintenance") { //Créer l'Etat et s'abonner (Hangar) m_etat = usine.creerHangar(this); m_etat.eventEtatFini += new DelegateEtatFini(ChangerEtat); ResetClient(); } }
/**Constructeur * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps avant le prochain etat * p_vehicule: le véhicule qui contient l'etat */ public AllerRetour(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_temps, Vehicule p_vehicule) : base(p_posDepart, p_posActuelle, p_posDestination, p_temps, p_vehicule) //Constructeur { m_posDestination = p_posDestination; m_compteur = 1; }
public void transfererVehicule(Vehicule p_vehicule, PosCarte p_posAero) //Transférer le véhicule entre aéroports { Aeroport aeroport = aeroportCorrespondant(p_posAero); aeroport.ajouterVehicule(p_vehicule); }
protected ClientTransport m_client; //Le client du véhicule /** Constructeur d'un avion de transport * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: l'aeroport qui le contient * p_tempsEmb: le temps d'embarquement de l'avion * p_tempsDeb: le temps de debarquement de l'avion * p_scenario: référence au scenario * p_aeroport: référence à l'aeroport dans lequel il est */ public AvionTransport(string p_nom, int p_KMH, int p_tempsMain, int p_tempsEmb, int p_tempsDeb, Color p_couleur, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) //Constructeur : base(p_nom, p_KMH, p_tempsMain, p_couleur, p_posAeroport, p_scenario, p_aeroport) { m_tempsEmbarquement = p_tempsEmb; m_tempsDebarquement = p_tempsDeb; }
/** Constructeur d'un avion de marchandises * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_aeroport: l'aeroport qui le contient (pour extraire ses coordonnées) * p_tempsEmb: le temps d'embarquement de l'avion * p_tempsDeb: le temps de debarquement de l'avion * p_scenario: référence au scenario * p_aeroport: référence à l'aeroport dans lequel il est */ public AvionMarchandises(string p_nom, int p_KMH, int p_tempsMain, int p_tempsEmb, int p_tempsDeb, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) //Constructeur : base(p_nom, p_KMH, p_tempsMain, p_tempsEmb, p_tempsDeb, Color.Blue, p_posAeroport, p_scenario, p_aeroport) { }
/**Constructeur lors de la séparation de deux clients * p_PosDepart: la position de départ * p_PosDestination: la position de destination * p_nbClients: le nombre de client * p_PosX: la position X du client * p_PosY: la position Y du client * p_PosXDest: la position X de la destination * p_PosYDest: la position Y de la destination * p_posDest: la position de la destination */ public Marchandise(PosCarte p_PosDepart, PosCarte p_PosDestination, int p_nbClients, int p_PosX, int p_PosY, int p_PosXDest, int p_PosYDest, PosCarte p_posDest) : base(p_PosDepart, p_PosDestination, p_nbClients, p_PosX, p_PosY, p_PosXDest, p_PosYDest, p_posDest) { }
protected PosCarte m_posDestination; //La coordonnée de destination /**Constructeur d'un Etat de vol * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps restant au vol * p_vehicule: référence au véhicule */ public Vol(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_temps, Vehicule p_vehicule) : base(p_temps, p_vehicule) { m_posDepart = p_posDepart; m_posActuelle = p_posActuelle; m_posDestination = p_posDestination; }
public virtual PosCarte DestinationFinale() { PosCarte poscarte = new PosCarte(); return(poscarte); }
protected Secours m_client; //Le client Secours /** Constructeur d'un hélicoptère de secours * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: l'aeroport qui le contient (pour extraire ses coordonnées) * p_scenario: référence sur le scenario * p_aeroport: référence sur l'aeroport dans lequel il est */ public HelicoSecours(string p_nom, int p_KMH, int p_tempsMain, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) //Constructeur : base(p_nom, p_KMH, p_tempsMain, Color.Red, p_posAeroport, p_scenario, p_aeroport) { }
public void transfererVehicule(Vehicule p_vehicule, PosCarte p_posAero) //Transférer le véhicule entre aéroports { m_scenario.transfererVehicule(p_vehicule, p_posAero); m_vehicules.Remove(p_vehicule); }
/**Constructeur lors de la séparation de deux clients * p_PosDepart: la position de départ * p_PosDestination: la position de destination * p_nbClients: le nombre de client * p_PosX: la position X du client * p_PosY: la position Y du client * p_PosXDest: la position X de la destination * p_PosYDest: la position Y de la destination * p_posDest: la position de la destination */ public Passager(PosCarte p_PosDepart, PosCarte p_PosDestination, int p_nbClients, int p_PosX, int p_PosY, int p_PosXDest, int p_PosYDest, PosCarte p_posDest) : base(p_PosDepart, p_PosDestination, p_nbClients, p_PosX, p_PosY, p_PosXDest, p_PosYDest, p_posDest) //Constructeur séparer { }
protected Observateur m_client; //Le client observateur /** Constructeur d'un avion observateur * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: l'aeroport qui le contient (pour extraire ses coordonnées) * p_tempsEmb: le temps d'embarquement de l'avion * p_tempsDeb: le temps de debarquement de l'avion * p_scenario: référence sur le scenario * p_aeroport: référence sur l'aeroport dans lequel il est */ public AvionObservateur(string p_nom, int p_KMH, int p_tempsMain, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) //Constructeur : base(p_nom, p_KMH, p_tempsMain, Color.Gray, p_posAeroport, p_scenario, p_aeroport) { }
protected Feu m_client; //Le client Feu /** Constructeur d'un avion citerne * p_nom: le nom du véhicule * p_KMH: la vitesse de déplacement de l'avion * p_tempsMain: le temps de maintenance * p_couleur: la couleur de la ligne à l'affichage * p_posAeroport: position de l'aeroport qui le contient (pour extraire ses coordonnées) * p_tempsCharg: le temps d'embarquement de l'avion * p_tempsLarg: le temps de debarquement de l'avion * p_scenario: référence sur le scenario * p_aeroport: référence sur l'aeroport dans lequel il est */ public AvionCiterne(string p_nom, int p_KMH, int p_tempsMain, int p_tempsCharg, int p_tempsLarg, PosCarte p_posAeroport, Scenario p_scenario, Aeroport p_aeroport) : base(p_nom, p_KMH, p_tempsMain, Color.Yellow, p_posAeroport, p_scenario, p_aeroport) { m_tempsChargement = p_tempsCharg; m_tempsLargage = p_tempsLarg; }
protected string statut; //Variable contrôle d'aller retour /**Constructeur * p_posDepart: la position de départ * p_posActuelle: la position actuelle * p_posDestination: la position de destination * p_temps: le temps avant le prochain etat * p_vehicule: le véhicule qui contient l'etat */ public Observer(PosCarte p_posDepart, PosCarte p_posActuelle, PosCarte p_posDestination, int p_temps, Vehicule p_vehicule) : base(p_posDepart, p_posActuelle, p_posDestination, p_temps, p_vehicule) { statut = "aller"; }
/**Changer la position selon la vitesse et le temps * p_depart: la position de départ * p_destination: la position de destination * p_vitesse: la vitesse du véhicule * p_temps: le temps écoulé */ public void changerPosition(PosCarte p_depart, PosCarte p_destination, int p_vitesse, int p_temps) { int distance = p_vitesse * (p_temps / 10); //Le % de complété int distancex = p_destination.X - p_depart.X; //La distance en x entre le depart et la destination int distancey = p_destination.Y - p_depart.Y; //La distance en y entre le depart et la destination char directionx = (p_depart.X > p_destination.X) ? 'g' : 'd'; //Direction Gauche Droite char directiony = (p_depart.Y > p_destination.Y) ? 'h' : 'b'; //Direction Haut Bas //Calcul de la droite pour ajuster Y selon X double a = (double)distancey / (double)distancex; double b = (p_depart.Y - (a * p_depart.X)); //Direction droite if (directionx == 'd') { double value = (distance * distancex) / 100; if (value >= 1 || value <= -1) { this.m_x += (distance * distancex) / 100; } else { this.m_x++; } if (this.m_x >= p_destination.X) { this.m_x = p_destination.X; } } //Direction gauche else { this.m_x += (distance * distancex) / 100; double value = (distance * distancex) / 100; if (value >= 1 || value <= -1) { this.m_x += (distance * distancex) / 100; } else { this.m_x--; } if (this.m_x <= p_destination.X) { this.m_x = p_destination.X; } } //Direction haut if (directiony == 'h') { this.m_y = (int)Math.Floor((double)(a * m_x + b));//this.m_y += (distance * distancey) / 100; if (this.m_y <= p_destination.Y) { this.m_y = p_destination.Y; } } //Direction bas else { this.m_y = (int)Math.Ceiling((double)(a * m_x + b));//this.m_y += (distance * distancey) / 100; if (this.m_y >= p_destination.Y) { this.m_y = p_destination.Y; } } }