/// <summary> /// Returns all of the squares immediately surrounding the root square /// </summary> /// <param name="rootPosition"></param> /// <param name="boardData"></param> /// <returns></returns> internal static List <Square> SurroundingSquares(DataBoardPosition rootPosition, BoardData boardData) { // List of squares we will be returning; clockwise starting from upper-left List <Square> squares = new List <Square> { GetSquareForCoordinates(rootPosition.File - 1, rootPosition.Rank + 1, boardData), GetSquareForCoordinates(rootPosition.File, rootPosition.Rank + 1, boardData), GetSquareForCoordinates(rootPosition.File + 1, rootPosition.Rank + 1, boardData), GetSquareForCoordinates(rootPosition.File + 1, rootPosition.Rank, boardData), GetSquareForCoordinates(rootPosition.File + 1, rootPosition.Rank - 1, boardData), GetSquareForCoordinates(rootPosition.File, rootPosition.Rank - 1, boardData), GetSquareForCoordinates(rootPosition.File - 1, rootPosition.Rank - 1, boardData), GetSquareForCoordinates(rootPosition.File - 1, rootPosition.Rank, boardData) }; return(squares); }
/// <summary> /// Returns all squares in the same diagonals as the rootPosition /// </summary> /// <param name="rootPosition"></param> /// <param name="boardData"></param> /// <returns></returns> internal static List <Square> DiagonalSquares(DataBoardPosition rootPosition, BoardData boardData) { // List of squares we will be returning; List <Square> squares = new List <Square>(); // Lower-left diagonal DataBoardPosition runningPosition = rootPosition; bool hasReachedEdge = runningPosition.File <= 0 || runningPosition.Rank <= 0; while (!hasReachedEdge) { runningPosition.File--; runningPosition.Rank--; if (runningPosition.File <= 0 || runningPosition.Rank <= 0) { hasReachedEdge = true; } squares.Add(GetSquareForCoordinates(runningPosition.File, runningPosition.Rank, boardData)); } // Upper-right diagonal runningPosition = rootPosition; hasReachedEdge = runningPosition.File >= boardData.Dimensions.Item1 || runningPosition.Rank >= boardData.Dimensions.Item2; while (!hasReachedEdge) { runningPosition.File++; runningPosition.Rank++; if (runningPosition.File >= boardData.Dimensions.Item1 || runningPosition.Rank >= boardData.Dimensions.Item2) { hasReachedEdge = true; } squares.Add(GetSquareForCoordinates(runningPosition.File, runningPosition.Rank, boardData)); } // Lower-right diagonal runningPosition = rootPosition; hasReachedEdge = runningPosition.File >= boardData.Dimensions.Item1 || runningPosition.Rank <= 0; while (!hasReachedEdge) { runningPosition.File++; runningPosition.Rank--; if (runningPosition.File >= boardData.Dimensions.Item1 || runningPosition.Rank <= 0) { hasReachedEdge = true; } squares.Add(GetSquareForCoordinates(runningPosition.File, runningPosition.Rank, boardData)); } // Upper-left diagonal runningPosition = rootPosition; hasReachedEdge = runningPosition.File <= 0 || runningPosition.Rank >= boardData.Dimensions.Item2; while (!hasReachedEdge) { runningPosition.File--; runningPosition.Rank++; if (runningPosition.File <= 0 || runningPosition.Rank >= boardData.Dimensions.Item2) { hasReachedEdge = true; } squares.Add(GetSquareForCoordinates(runningPosition.File, runningPosition.Rank, boardData)); } return(squares); }