/* * Про конструктор можно узнать в файле Cell.cs */ public Maze(int size, Position playerPosition) { _size = size; _cells = new Cell[_size, _size]; GenerateMaze(); _cells[playerPosition.X, playerPosition.Y] = new Cell(CellState.Player, playerPosition); _playerCell = _cells[playerPosition.X, playerPosition.Y]; _playerCell.DistanceToPlayer = 1; }
/* * Для каждого состояния свой цвет. * А для текущей ячейки - особенный. */ private void PrintMatrix(Cell current) { Console.WriteLine("Лабиринт"); for (int i = 0; i < _size; i++) { for (int j = 0; j < _size; j++) { if (i == current.Position.X && j == current.Position.Y) { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(_cells[i, j]); } else { /* * switch используется вместо кучи if и else. Когда вариантов выбора больше, чем 2, принято использовать именно его. * https://msdn.microsoft.com/en-us/library/06tc147t.aspx */ switch (_cells[i, j].State) { case CellState.Free: Console.ForegroundColor = ConsoleColor.Green; break; case CellState.Occupied: Console.ForegroundColor = ConsoleColor.Red; break; case CellState.Player: Console.ForegroundColor = ConsoleColor.Blue; break; } Console.Write(_cells[i, j]); } Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(" "); } Console.Write("\n"); } }
/* * Никакой хитрости, генерирует сначала х и о. */ private void GenerateMaze() { for (var i = 0; i < _size; i++) { for (var j = 0; j < _size; j++) { // сначала только пусто/непусто var state = (CellState) _random.Next(_amountStates - 1); _cells[i, j] = new Cell(state, new Position(i,j)); } } }
/* * Такую функцию, ты вчера успешно написала сама! */ private IEnumerable<Cell> GetNeighbors(Cell cell) { var neighbors = new List<Cell>(); // выше if (cell.Position.X > 0) { neighbors.Add(_cells[cell.Position.X - 1, cell.Position.Y]); } // ниже if (cell.Position.X < _size - 1) { neighbors.Add(_cells[cell.Position.X + 1, cell.Position.Y]); } // левее if (cell.Position.Y > 0) { neighbors.Add(_cells[cell.Position.X, cell.Position.Y - 1]); } // правее if (cell.Position.Y < _size - 1) { neighbors.Add(_cells[cell.Position.X, cell.Position.Y + 1]); } return neighbors.ToList(); }
/* * Банальная проверка, лежит ли клетка с краю. */ private bool IsCellExit(Cell cell) => cell.Position.X == _size - 1 || cell.Position.Y == _size - 1 || cell.Position.X == 0 || cell.Position.Y == 0;