public class ForbiddenDetectorBase { /// /// 흑색 돌 /// private protected Enums.PlayerType Black = Enums.PlayerType.PlayerA; /// /// 빈칸 /// private protected Enums.PlayerType Space = Enums.PlayerType.None; /// /// 흰색 돌, 렌주룰 내에선 벽으로도 활용 /// private protected Enums.PlayerType White = Enums.PlayerType.PlayerB; /// /// 8방향을 나타내는 델타 배열 (가로, 세로, 대각선 방향) /// private protected readonly int[,] Directions = new int[8, 2] { { 1, 0 }, // 오른쪽 { 1, 1 }, // 오른쪽 아래 { 0, 1 }, // 아래 { -1, 1 }, // 왼쪽 아래 { -1, 0 }, // 왼쪽 { -1, -1 }, // 왼쪽 위 { 0, -1 }, // 위 { 1, -1 } // 오른쪽 위 }; /// /// 방향 쌍을 정의 (반대 방향끼리 쌍을 이룸) /// 0-4: 가로 방향 쌍 (동-서) /// 1-5: 대각선 방향 쌍 (남동-북서) /// 2-6: 세로 방향 쌍 (남-북) /// 3-7: 대각선 방향 쌍 (남서-북동) /// private protected readonly int[,] DirectionPairs = { { 0, 4 }, { 1, 5 }, { 2, 6 }, { 3, 7 } }; // 15*15 보드 사이즈 private protected int BoardSize = Constants.BoardSize; /// /// 좌표가 보드 범위 내에 있는지 확인 /// private protected bool IsInBounds(int row, int col) { var inBoardSizeRow = row >= 0 && row < BoardSize; var inBoardSizeCol = col >= 0 && col < BoardSize; return inBoardSizeRow && inBoardSizeCol; } /// /// 해당 위치가 비어있는지 확인 /// private protected bool IsEmptyPosition(Enums.PlayerType[,] board, int row, int col) { if (!IsInBounds(row, col)) return false; return board[row, col] == Space; } }