public Field(Tile[,] initialTiles, int marginFromLeft, int marginFromRight) { _tiles = initialTiles; leftBorder = _tiles.GetLowerBound(0) + marginFromLeft; rightBorder = _tiles.GetUpperBound(0) - marginFromRight; bottomBorder = _tiles.GetUpperBound(1) - 1; }
/// <summary> /// Return the list of T's neighbors /// </summary> /// <param name="T"></param> /// <returns></returns> private static List <Tile> Neighbors(Tile T) { var res = new List <Tile>(); if (T.X + 1 <= _map.GetUpperBound(0) && _map[T.X + 1, T.Y].IsFloor()) { res.Add(_map[T.X + 1, T.Y]); } if (T.X - 1 >= _map.GetLowerBound(0) && _map[T.X - 1, T.Y].IsFloor()) { res.Add(_map[T.X - 1, T.Y]); } if (T.Y + 1 <= _map.GetUpperBound(1) && _map[T.X, T.Y + 1].IsFloor()) { res.Add(_map[T.X, T.Y + 1]); } if (T.Y - 1 >= _map.GetLowerBound(1) && _map[T.X, T.Y - 1].IsFloor()) { res.Add(_map[T.X, T.Y - 1]); } // diagonal if (T.X + 1 <= _map.GetUpperBound(0) && T.Y + 1 <= _map.GetUpperBound(1) && res.Contains(_map[T.X + 1, T.Y]) && res.Contains(_map[T.X, T.Y + 1]) && _map[T.X + 1, T.Y + 1].IsFloor()) { res.Add(_map[T.X + 1, T.Y + 1]); } if (T.X + 1 <= _map.GetUpperBound(0) && T.Y - 1 >= _map.GetLowerBound(1) && res.Contains(_map[T.X + 1, T.Y]) && res.Contains(_map[T.X, T.Y - 1]) && _map[T.X + 1, T.Y - 1].IsFloor()) { res.Add(_map[T.X + 1, T.Y - 1]); } if (T.X - 1 >= _map.GetLowerBound(0) && T.Y - 1 >= _map.GetLowerBound(1) && res.Contains(_map[T.X - 1, T.Y]) && res.Contains(_map[T.X, T.Y - 1]) && _map[T.X - 1, T.Y - 1].IsFloor()) { res.Add(_map[T.X - 1, T.Y - 1]); } if (T.X - 1 >= _map.GetLowerBound(0) && T.Y + 1 <= _map.GetUpperBound(1) && res.Contains(_map[T.X - 1, T.Y]) && res.Contains(_map[T.X, T.Y + 1]) && _map[T.X - 1, T.Y + 1].IsFloor()) { res.Add(_map[T.X - 1, T.Y + 1]); } return(res); }