private static void GenGlobMap() { Enumerable.Range(0, MapPage.Letters.Length) .SelectMany(letterIndex => Enumerable.Range(0, MapPage.Sectors.Length) .SelectMany(sectorIndex => Enumerable.Range(0, MapPage.Squares.Length) .Select(squreIndex => new MapPage(letterIndex, sectorIndex, squreIndex)))) .ToList().ForEach(map => { if (!GlobMap.ContainsKey(map.Letter)) { GlobMap.Add(map.Letter, new Dictionary <int, Dictionary <string, MapPage> >()); } if (!GlobMap[map.Letter].ContainsKey(map.Sector)) { GlobMap[map.Letter].Add(map.Sector, new Dictionary <string, MapPage>()); } if (!GlobMap[map.Letter][map.Sector].ContainsKey(map.Square)) { GlobMap[map.Letter][map.Sector].Add(map.Square, map); } }); GlobMap.ToList().ForEach(kv1 => kv1.Value.ToList().ForEach(kv2 => kv2.Value.ToList().ForEach(kv3 => { MapPage map = kv3.Value; map.Top = GetTop(map); map.Right = GetRight(map); map.Bottom = GetBottom(map); map.Left = GetLeft(map); }))); }
private static MapPage GetBottom(MapPage center) { int squareIndex = (center.SquareIndex + NumSquaresInLine) % Squares.Length; int sectorIndex = center.SectorIndex; int letterIndex = center.SquareIndex + NumSquaresInLine >= Squares.Length ? (center.LetterIndex + 1) % Letters.Length : center.LetterIndex; char letter = Letters[letterIndex]; int sector = Sectors[sectorIndex]; string square = Squares[squareIndex]; return(GetMapPage(letter, sector, square)); }
private static MapPage GetTop(MapPage center) { int squareIndex = (center.SquareIndex - NumSquaresInLine + Squares.Length) % Squares.Length; int sectorIndex = center.SectorIndex; int letterIndex = center.SquareIndex - NumSquaresInLine < 0 ? (center.LetterIndex - 1 + Letters.Length) % Letters.Length : center.LetterIndex; char letter = Letters[letterIndex]; int sector = Sectors[sectorIndex]; string square = Squares[squareIndex]; return(GetMapPage(letter, sector, square)); }
private static MapPage GetLeft(MapPage center) { int squareIndex = center.SquareIndex % NumSquaresInLine == 0 ? center.SquareIndex + NumSquaresInLine - 1 : center.SquareIndex - 1; int sectorIndex = center.SquareIndex % NumSquaresInLine == 0 ? (center.SectorIndex - 1 + Sectors.Length) % Sectors.Length : center.SectorIndex; int letterIndex = center.LetterIndex; char letter = Letters[letterIndex]; int sector = Sectors[sectorIndex]; string square = Squares[squareIndex]; return(GetMapPage(letter, sector, square)); }