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(); }
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; } }
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); } } } }
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; } } } }