Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        /**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;
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        /**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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        /**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);
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        /** 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();
            }
        }
Esempio n. 11
0
        /**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);
                }
            }
        }
Esempio n. 12
0
 /** 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)
 {
 }
Esempio n. 13
0
        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;
        }
Esempio n. 14
0
 /**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));
 }
Esempio n. 15
0
 /**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));
 }
Esempio n. 16
0
        /** 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();
            }
        }
Esempio n. 17
0
 /**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;
 }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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;
        }
Esempio n. 20
0
 /** 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)
 {
 }
Esempio n. 21
0
 /**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)
 {
 }
Esempio n. 22
0
        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;
        }
Esempio n. 23
0
        public virtual PosCarte DestinationFinale()
        {
            PosCarte poscarte = new PosCarte();

            return(poscarte);
        }
Esempio n. 24
0
        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)
        {
        }
Esempio n. 25
0
 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);
 }
Esempio n. 26
0
 /**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
 {
 }
Esempio n. 27
0
        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)
        {
        }
Esempio n. 28
0
        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;
        }
Esempio n. 29
0
        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";
        }
Esempio n. 30
0
        /**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;
                }
            }
        }