예제 #1
0
        private void ModifCase(int xPos, int yPos)
        {
            Map.TypeCase type = Map.TypeCase.ERREUR;
            if (radioSalle.Checked)
            {
                type = Map.TypeCase.CASE_PLEINE;
            }
            else
            if (radioStart.Checked)
            {
                type = Map.TypeCase.CASE_DEPART;
            }
            else
            if (radioEnd.Checked)
            {
                type = Map.TypeCase.CASE_ARRIVEE;
            }
            else
            if (radioGomme.Checked)
            {
                type = Map.TypeCase.CASE_VIDE;
            }

            DataMap.Cnx autoCnx = DataMap.Cnx.NULL;
            if (cnxHaut.Checked)
            {
                autoCnx |= DataMap.Cnx.HAUT;
            }
            if (cnxBas.Checked)
            {
                autoCnx |= DataMap.Cnx.BAS;
            }
            if (cnxNord.Checked)
            {
                autoCnx |= DataMap.Cnx.NORD;
            }
            if (cnxSud.Checked)
            {
                autoCnx |= DataMap.Cnx.SUD;
            }
            if (cnxEst.Checked)
            {
                autoCnx |= DataMap.Cnx.EST;
            }
            if (cnxOuest.Checked)
            {
                autoCnx |= DataMap.Cnx.OUEST;
            }

            dataMap.ModifCase(xPos, yPos, niveau, type, autoCnx);
            UpdateImage();
        }
예제 #2
0
        public void ModifCase(int xPos, int yPos, int zPos, Map.TypeCase type, Cnx autoCnx)
        {
            Map map = FindMap(xPos, yPos, zPos);

            switch (type)
            {
            case Map.TypeCase.CASE_PLEINE:
                // Ajoute une salle
                if (!(xPos == xStart && yPos == yStart && zPos == nStart) && !(xPos == xGoal && yPos == yGoal && zPos == nGoal))
                {
                    SetCase(xPos, yPos, zPos, Map.TypeCase.CASE_PLEINE, autoCnx);
                }
                break;

            case Map.TypeCase.CASE_DEPART:
                // Positionne la salle de départ
                if (map == null)
                {
                    // on efface l'ancienne position et on affecte la nouvelle
                    SetCase(xStart, yStart, nStart, Map.TypeCase.CASE_VIDE, autoCnx);
                    SetCase(xPos, yPos, zPos, Map.TypeCase.CASE_DEPART, autoCnx);
                    SetStart(xPos, yPos, zPos);
                }
                break;

            case Map.TypeCase.CASE_ARRIVEE:
                // Positonne la salle d'arrivée
                if (map == null)
                {
                    // on efface l'ancienne position et on affecte la nouvelle
                    SetCase(xGoal, yGoal, nGoal, Map.TypeCase.CASE_VIDE, autoCnx);
                    SetCase(xPos, yPos, zPos, Map.TypeCase.CASE_ARRIVEE, autoCnx);
                    SetGoal(xPos, yPos, zPos);
                }
                break;

            case Map.TypeCase.CASE_VIDE:
                // Supprime une salle
                if (xPos == xStart & yPos == yStart && zPos == nStart)
                {
                    SetStart(-1, -1, -1);
                }

                if (xPos == xGoal && yPos == yGoal && zPos == nGoal)
                {
                    SetGoal(-1, -1, -1);
                }

                SetCase(xPos, yPos, zPos, Map.TypeCase.CASE_VIDE, autoCnx);
                break;
            }
        }
예제 #3
0
 private void SetCase(int x, int y, int n, Map.TypeCase valeur, Cnx autoCnx)
 {
     if (x >= 0 && x < TAILLE_X && y >= 0 && y < TAILLE_X && n >= 0 && n < TAILLE_Z)
     {
         Map map = FindMap(x, y, n);
         if (map == null && valeur != Map.TypeCase.CASE_VIDE)
         {
             map = new Map(x, y, n);
             listMap.Add(map);
         }
         if (map != null && map.TypeMap != valeur)
         {
             if (valeur != Map.TypeCase.CASE_VIDE)
             {
                 Connect(map, autoCnx, valeur);
             }
             else
             {
                 Deconnect(map);
             }
         }
     }
 }
예제 #4
0
        private void Connect(Map map, Cnx autoCnx, Map.TypeCase valeur)
        {
            byte c = GetCaseLibre();

            if (c != 255)
            {
                map.NumCase = c;
                map.TypeMap = valeur;

                // Connecte la salle en Bas
                if ((autoCnx & Cnx.BAS) == Cnx.BAS)
                {
                    Map mb = FindMap(map.X, map.Y, map.Z - 1);
                    if (mb != null)
                    {
                        mb.Haut = c;
                        map.Bas = mb.NumCase;
                    }
                }

                // Connecte la salle en Haut
                if ((autoCnx & Cnx.HAUT) == Cnx.HAUT)
                {
                    Map mh = FindMap(map.X, map.Y, map.Z + 1);
                    if (mh != null)
                    {
                        mh.Bas   = c;
                        map.Haut = mh.NumCase;
                    }
                }

                // Connecte la salle au Nord
                if ((autoCnx & Cnx.NORD) == Cnx.NORD)
                {
                    Map mn = FindMap(map.X, map.Y - 1, map.Z);
                    if (mn != null)
                    {
                        mn.Sud   = c;
                        map.Nord = mn.NumCase;
                    }
                }

                // Connecte la salle au Sud
                if ((autoCnx & Cnx.SUD) == Cnx.SUD)
                {
                    Map ms = FindMap(map.X, map.Y + 1, map.Z);
                    if (ms != null)
                    {
                        ms.Nord = c;
                        map.Sud = ms.NumCase;
                    }
                }

                // Connecte la salle à l'Est
                if ((autoCnx & Cnx.EST) == Cnx.EST)
                {
                    Map me = FindMap(map.X + 1, map.Y, map.Z);
                    if (me != null)
                    {
                        me.Ouest = c;
                        map.Est  = me.NumCase;
                    }
                }

                // Connecte la salle à l'Ouest
                if ((autoCnx & Cnx.OUEST) == Cnx.OUEST)
                {
                    Map mo = FindMap(map.X - 1, map.Y, map.Z);
                    if (mo != null)
                    {
                        mo.Est    = c;
                        map.Ouest = mo.NumCase;
                    }
                }
            }
        }