private void MarkFrontierCells(int row, int col) { int i, r, c; //перебираем все 4 направления for (i = 0; i < 4; i++) { r = row + dr[i]; c = col + dc[i]; /* if (InMazeBorders(r, c, MazeHeight, MazeWidth) && * ((map[r][c] & CellOptions.CELL_VISITED) == 0x00) && * ((map[r][c] & CellOptions.CELL_FRONTIER) == 0x00))*/ if (InMazeBorders(r, c, MazeHeight, MazeWidth) && (!EmumMedods.HasFlag(map[r][c], CellOptions.CELL_VISITED)) && (!EmumMedods.HasFlag(map[r][c], CellOptions.CELL_FRONTIER))) { //если ячейка в границах лабиринта и //не является посещенной или граничной //то помечаем ее как граничную map[r][c] |= CellOptions.CELL_FRONTIER; //добавляем ее в список граничных CellList.Add(new CellData(r, c)); /*var tmp:Cell=new Cell(r, c); * CellList.push(tmp);*/ } } }
private void RemoveFrontierCell(int r, int c) //– удаляет из списка обрабатываемых вершин элемент, заданный номером строки и столбца { EmumMedods.RemoveFlag(ref map[r][c], CellOptions.CELL_FRONTIER); for (int i = 0; i < CellList.Count; i++) { if (CellList[i].GetC() == c && CellList[i].GetR() == r) { CellList.RemoveAt(i); } } }
private bool Has_Frontier() { for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (EmumMedods.HasFlag(map[i][j], CellOptions.CELL_FRONTIER)) { return(true); } } } return(false); }
private void RemoveWall(int r, int c, int d) // – удаляет стенку в карте лабиринта в указанной ячейке и указанном направлении, а также в смежной ячейке в противоположном направлени { switch (d) { case 0: EmumMedods.AddFlag(ref map[r][c], CellOptions.EXIT_NORTH); if (InMazeBorders(r - 1, c, h, w)) { EmumMedods.AddFlag(ref map[r - 1][c], CellOptions.EXIT_SOUTH); } break; case 1: EmumMedods.AddFlag(ref map[r][c], CellOptions.EXIT_EAST); if (InMazeBorders(r, c + 1, h, w)) { EmumMedods.AddFlag(ref map[r][c + 1], CellOptions.EXIT_WEST); } break; case 2: EmumMedods.AddFlag(ref map[r][c], CellOptions.EXIT_SOUTH); if (InMazeBorders(r + 1, c, h, w)) { EmumMedods.AddFlag(ref map[r + 1][c], CellOptions.EXIT_NORTH); } break; case 3: EmumMedods.AddFlag(ref map[r][c], CellOptions.EXIT_WEST); if (InMazeBorders(r, c - 1, h, w)) { EmumMedods.AddFlag(ref map[r][c - 1], CellOptions.EXIT_EAST); } break; } }