예제 #1
0
 public Feu(int cell_size, Feu feu) : base(feu.CoordonneeX, feu.CoordonneeY, cell_size)
 {
     // Copy constructor to create the proper derived object from Cellule.
     Position = feu.Position;
     Duree    = feu.Duree;
     if (Position == "E")
     {
         CouleurFeu = Couleur.Vert;
     }
     else
     {
         CouleurFeu = Couleur.Rouge;
     }
 }
예제 #2
0
파일: Feu.cs 프로젝트: jmprovencher/SPTR
 public Feu(int cell_size, Feu feu):base(feu.CoordonneeX, feu.CoordonneeY, cell_size)
 {
     // Copy constructor to create the proper derived object from Cellule.
     Position = feu.Position;
     Duree = feu.Duree;
     if (Position == "E"){
         CouleurFeu = Couleur.Vert;
     }
     else
     {
         CouleurFeu = Couleur.Rouge;
     }
     
     
 }
예제 #3
0
        private void deplaceVoiture(Voiture voiture, double vitesse)
        {
            //regarde si feu rouge
            Cellule celluleDroiteDeLaVoiture = GrilleSimulation.getCelluleDroite((int)voiture.CoordonneeX, (int)voiture.CoordonneeY, voiture.getCarDirectionString());
            bool    changedCell = false;

            if (celluleDroiteDeLaVoiture.GetType() == typeof(Feu))
            {
                Feu feu = (Feu)celluleDroiteDeLaVoiture;

                if (enFaceFeuRouge(feu, voiture))
                {
                    //Si rouge, bouge pas !
                    voiture.MovingFlag = false;
                    return;
                }
            }
            else if (!voiture.MovingFlag)
            {
                voiture.MovingFlag = true;
            }

            voiture.run(vitesse / (double)ParametresSimulation.Echelle);
        }
예제 #4
0
        public void RemplirGrille()
        {
            //Ajout des routes
            foreach (Route r in ListeRoutes)
            {
                int startX = 0, startY = 0, stopX = 0, stopY = 0;

                if (r.XDebut == r.XFin)
                {
                    startX = r.XDebut;
                    stopX = startX;
                    if (r.YDebut < r.YFin)
                    {
                        startY = r.YDebut;
                        stopY = r.YFin;
                    }
                    else
                    {
                        startY = r.YFin;
                        stopY = r.YDebut;
                    }
                }
                else if (r.YDebut == r.YFin)
                {
                    startY = r.YDebut;
                    stopY = startY;
                    if (r.XDebut < r.XFin)
                    {
                        startX = r.XDebut;
                        stopX = r.XFin;
                    }
                    else
                    {
                        startX = r.XFin;
                        stopX = r.XDebut;
                    }
                }
                
                for (int i = startX; i <= stopX; i++)
                {
                    for (int j = startY; j <= stopY; j++)
                    {
                        if (GrilleSimulation.getCellule(i, j).GetType() != typeof(Asphalte))
                        {
                            Asphalte asphalte = new Asphalte(i, j, GrilleSimulation.TailleCellules);
                            GrilleSimulation.setCellule(i,j,asphalte);
                            if (i > 0 && GrilleSimulation.getCellule(i - 1, j).GetType() == typeof(Asphalte))
                            {
                                asphalte.addLeftRightLine();
                            }

                            if (j > 0 && GrilleSimulation.getCellule(i , j - 1).GetType() == typeof(Asphalte))
                            {
                                asphalte.addUpDownLine();
                            }
                        }
                        ((Asphalte)GrilleSimulation.getCellule(i, j)).ListeRoute.Add(r);

                    }
                }
                
            }
            // Ajout des feux
            for (int i = 0; i<ListeFeux.Count;i++)
            {
                Feu f = ListeFeux[i];
                int offsetX = 0, offsetY = 0;
                switch (f.Position)
                {
                    case "N":
                        offsetY = -1;
                        offsetX = -1;
                        break;
                    case "S":
                        offsetY = 1;
                        offsetX = 1;
                        break;
                    case "E":
                        offsetX = 1;
                        offsetY = -1;
                        break;
                    case "O":
                        offsetX = -1;
                        offsetY = 1;
                        break;
                }
                f.CoordonneeX += offsetX;
                f.CoordonneeY += offsetY;
                Feu nouveauFeu = new Feu(GrilleSimulation.TailleCellules, f);
                GrilleSimulation.setCellule(f.CoordonneeX,f.CoordonneeY,  nouveauFeu);
                ListeFeux[i] = nouveauFeu;
            }

            //Ajout de la voiture
            int initialVoitureX = ParametresSimulation.XDepart;
            int initialVoitureY = ParametresSimulation.YDepart;
            int endVoitureX = ParametresSimulation.XArrivee;
            int endVoitureY = ParametresSimulation.YArrivee;

            if (GrilleSimulation.getCellule(initialVoitureX, initialVoitureY).GetType() == typeof(Asphalte))
            {
                Asphalte start = (Asphalte)GrilleSimulation.getCellule(initialVoitureX, initialVoitureY);
                MaVoiture  = new VoitureIntelligente(start.CoordonneeX, start.CoordonneeY, start.TailleCellule, "O", endVoitureX, endVoitureY);
            }
            
        }
예제 #5
0
 private bool enFaceFeuRouge(Feu feu, Voiture voiture)
 {
     return (feu.CouleurFeu == Couleur.Rouge || feu.CouleurFeu == Couleur.Rouge) && feu.Position == getDirectionOpposee(voiture.getCarDirectionString());
 }
예제 #6
0
        public void RemplirGrille()
        {
            //Ajout des routes
            foreach (Route r in ListeRoutes)
            {
                int startX = 0, startY = 0, stopX = 0, stopY = 0;

                if (r.XDebut == r.XFin)
                {
                    startX = r.XDebut;
                    stopX  = startX;
                    if (r.YDebut < r.YFin)
                    {
                        startY = r.YDebut;
                        stopY  = r.YFin;
                    }
                    else
                    {
                        startY = r.YFin;
                        stopY  = r.YDebut;
                    }
                }
                else if (r.YDebut == r.YFin)
                {
                    startY = r.YDebut;
                    stopY  = startY;
                    if (r.XDebut < r.XFin)
                    {
                        startX = r.XDebut;
                        stopX  = r.XFin;
                    }
                    else
                    {
                        startX = r.XFin;
                        stopX  = r.XDebut;
                    }
                }

                for (int i = startX; i <= stopX; i++)
                {
                    for (int j = startY; j <= stopY; j++)
                    {
                        if (GrilleSimulation.getCellule(i, j).GetType() != typeof(Asphalte))
                        {
                            Asphalte asphalte = new Asphalte(i, j, GrilleSimulation.TailleCellules);
                            GrilleSimulation.setCellule(i, j, asphalte);
                            if (i > 0 && GrilleSimulation.getCellule(i - 1, j).GetType() == typeof(Asphalte))
                            {
                                asphalte.addLeftRightLine();
                            }

                            if (j > 0 && GrilleSimulation.getCellule(i, j - 1).GetType() == typeof(Asphalte))
                            {
                                asphalte.addUpDownLine();
                            }
                        }
                        ((Asphalte)GrilleSimulation.getCellule(i, j)).ListeRoute.Add(r);
                    }
                }
            }
            // Ajout des feux
            for (int i = 0; i < ListeFeux.Count; i++)
            {
                Feu f = ListeFeux[i];
                int offsetX = 0, offsetY = 0;
                switch (f.Position)
                {
                case "N":
                    offsetY = -1;
                    offsetX = -1;
                    break;

                case "S":
                    offsetY = 1;
                    offsetX = 1;
                    break;

                case "E":
                    offsetX = 1;
                    offsetY = -1;
                    break;

                case "O":
                    offsetX = -1;
                    offsetY = 1;
                    break;
                }
                f.CoordonneeX += offsetX;
                f.CoordonneeY += offsetY;
                Feu nouveauFeu = new Feu(GrilleSimulation.TailleCellules, f);
                GrilleSimulation.setCellule(f.CoordonneeX, f.CoordonneeY, nouveauFeu);
                ListeFeux[i] = nouveauFeu;
            }

            //Ajout de la voiture
            int initialVoitureX = ParametresSimulation.XDepart;
            int initialVoitureY = ParametresSimulation.YDepart;
            int endVoitureX     = ParametresSimulation.XArrivee;
            int endVoitureY     = ParametresSimulation.YArrivee;

            if (GrilleSimulation.getCellule(initialVoitureX, initialVoitureY).GetType() == typeof(Asphalte))
            {
                Asphalte start = (Asphalte)GrilleSimulation.getCellule(initialVoitureX, initialVoitureY);
                MaVoiture = new VoitureIntelligente(start.CoordonneeX, start.CoordonneeY, start.TailleCellule, "O", endVoitureX, endVoitureY);
            }
        }
예제 #7
0
 private bool enFaceFeuRouge(Feu feu, Voiture voiture)
 {
     return((feu.CouleurFeu == Couleur.Rouge || feu.CouleurFeu == Couleur.Rouge) && feu.Position == getDirectionOpposee(voiture.getCarDirectionString()));
 }