private void CreatePieceValues() { PieceSquareValue = new float[256][]; PieceSquareValue[(byte)(EnumBoardSquare.Empty)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Pawn)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Knight)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Bishop)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Rook)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Queen)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.King)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Pawn)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Knight)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Bishop)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Rook)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Queen)] = new float[_board.Size]; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.King)] = new float[_board.Size]; for (int i = 0; i < _board.Rows; i++) { for (int j = 0; j < _board.Cols; j++) { int pos = _board.GetBoardIndex(i, j); PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Pawn)][pos] = WhitePieceSquareValueConstants.Pawn[i, j] + PieceValueCOnstants.Pawn; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Knight)][pos] = WhitePieceSquareValueConstants.Knight[i, j] + PieceValueCOnstants.Knight; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Bishop)][pos] = WhitePieceSquareValueConstants.Bishop[i, j] + PieceValueCOnstants.Bishop; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Rook)][pos] = WhitePieceSquareValueConstants.Rook[i, j] + PieceValueCOnstants.Rook; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.Queen)][pos] = WhitePieceSquareValueConstants.Queen[i, j] + PieceValueCOnstants.Queen; PieceSquareValue[(byte)(EnumBoardSquare.White | EnumBoardSquare.King)][pos] = WhitePieceSquareValueConstants.King[i, j] + PieceValueCOnstants.King; pos = _board.GetBoardIndex(_board.Rows - i - 1, j); PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Pawn)][pos] = -WhitePieceSquareValueConstants.Pawn[i, j] - PieceValueCOnstants.Pawn; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Knight)][pos] = -WhitePieceSquareValueConstants.Knight[i, j] - PieceValueCOnstants.Knight; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Bishop)][pos] = -WhitePieceSquareValueConstants.Bishop[i, j] - PieceValueCOnstants.Bishop; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Rook)][pos] = -WhitePieceSquareValueConstants.Rook[i, j] - PieceValueCOnstants.Rook; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.Queen)][pos] = -WhitePieceSquareValueConstants.Queen[i, j] - PieceValueCOnstants.Queen; PieceSquareValue[(byte)(EnumBoardSquare.Black | EnumBoardSquare.King)][pos] = -WhitePieceSquareValueConstants.King[i, j] - PieceValueCOnstants.King; } } for (int i = 0; i < PieceSquareValue.Length; i++) { if (PieceSquareValue[i] != null) { var notMovedEnum = ((EnumBoardSquare)i) | EnumBoardSquare.NotMoved; PieceSquareValue[(byte)notMovedEnum] = PieceSquareValue[i]; } } }
private void CreateStraightPaths() { int size = _board.Size; North = new byte[size][]; South = new byte[size][]; East = new byte[size][]; West = new byte[size][]; NorthEast = new byte[size][]; NorthWest = new byte[size][]; SouthEast = new byte[size][]; SouthWest = new byte[size][]; for (int i = 0; i < _board.Rows; i++) { for (int j = 0; j < _board.Cols; j++) { int pos = _board.GetBoardIndex(i, j); North[pos] = new byte[_board.Rows - i - 1]; for (int k = 0; k < North[pos].Length; k++) { North[pos][k] = _board.GetBoardIndex(i + k + 1, j); } South[pos] = new byte[i]; for (int k = 0; k < South[pos].Length; k++) { South[pos][k] = _board.GetBoardIndex(i - k - 1, j); } East[pos] = new byte[_board.Cols - j - 1]; for (int k = 0; k < East[pos].Length; k++) { East[pos][k] = _board.GetBoardIndex(i, j + k + 1); } West[pos] = new byte[j]; for (int k = 0; k < West[pos].Length; k++) { West[pos][k] = _board.GetBoardIndex(i, j - k - 1); } NorthEast[pos] = new byte[Math.Min(_board.Rows - i - 1, _board.Cols - j - 1)]; for (int k = 0; k < NorthEast[pos].Length; k++) { NorthEast[pos][k] = _board.GetBoardIndex(i + k + 1, j + k + 1); } NorthWest[pos] = new byte[Math.Min(_board.Rows - i - 1, j)]; for (int k = 0; k < NorthWest[pos].Length; k++) { NorthWest[pos][k] = _board.GetBoardIndex(i + k + 1, j - k - 1); } SouthEast[pos] = new byte[Math.Min(i, _board.Cols - j - 1)]; for (int k = 0; k < SouthEast[pos].Length; k++) { SouthEast[pos][k] = _board.GetBoardIndex(i - k - 1, j + k + 1); } SouthWest[pos] = new byte[Math.Min(i, j)]; for (int k = 0; k < SouthWest[pos].Length; k++) { SouthWest[pos][k] = _board.GetBoardIndex(i - k - 1, j - k - 1); } } } }