コード例 #1
0
        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];
                }
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }