Beispiel #1
0
 /*
   * Про конструктор можно узнать в файле 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;
 }
Beispiel #2
0
 /*
  * Для каждого состояния свой цвет.
  * А для текущей ячейки - особенный.
  */
 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");
   }
 }
Beispiel #3
0
 /*
  * Никакой хитрости, генерирует сначала х и о.
  */
 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));
     }
   }
 }
Beispiel #4
0
 /*
  * Такую функцию, ты вчера успешно написала сама!
  */
 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();
 }
Beispiel #5
0
 /*
  * Банальная проверка, лежит ли клетка с краю.
  */
 private bool IsCellExit(Cell cell)
   => cell.Position.X == _size - 1 || cell.Position.Y == _size - 1 || cell.Position.X == 0 || cell.Position.Y == 0;