示例#1
0
        private static GameState CreateGameState(string board, Colour toPlay, StateFlag castlingRights, SquareFlag enPassantSquare, int halfTurnCounter, int fullMoveNumber)
        {
            var ranks = ExpandBoardString(board);

            var squares = GetSquaresStates(ranks);

            var whitePawns   = (SquareFlag)0;
            var whiteRooks   = (SquareFlag)0;
            var whiteKnights = (SquareFlag)0;
            var whiteBishops = (SquareFlag)0;
            var whiteQueens  = (SquareFlag)0;
            var whiteKing    = (SquareFlag)0;
            var blackPawns   = (SquareFlag)0;
            var blackRooks   = (SquareFlag)0;
            var blackKnights = (SquareFlag)0;
            var blackBishops = (SquareFlag)0;
            var blackQueens  = (SquareFlag)0;
            var blackKing    = (SquareFlag)0;

            foreach (var square in squares)
            {
                if (square.Colour == Colour.None)
                {
                    continue;
                }

                if (square.Colour == Colour.White)
                {
                    switch (square.Type)
                    {
                    case PieceType.Pawn: whitePawns |= square.Square;
                        break;

                    case PieceType.Rook: whiteRooks |= square.Square;
                        break;

                    case PieceType.Knight: whiteKnights |= square.Square;
                        break;

                    case PieceType.Bishop: whiteBishops |= square.Square;
                        break;

                    case PieceType.Queen: whiteQueens |= square.Square;
                        break;

                    case PieceType.King: whiteKing |= square.Square;
                        break;
                    }
                }
                else
                {
                    switch (square.Type)
                    {
                    case PieceType.Pawn: blackPawns |= square.Square;
                        break;

                    case PieceType.Rook: blackRooks |= square.Square;
                        break;

                    case PieceType.Knight: blackKnights |= square.Square;
                        break;

                    case PieceType.Bishop: blackBishops |= square.Square;
                        break;

                    case PieceType.Queen: blackQueens |= square.Square;
                        break;

                    case PieceType.King: blackKing |= square.Square;
                        break;
                    }
                }
            }

            return(new GameState(
                       0,
                       toPlay,
                       halfTurnCounter,
                       fullMoveNumber,
                       castlingRights.HasFlag(StateFlag.WhiteCanCastleKingSide),
                       castlingRights.HasFlag(StateFlag.WhiteCanCastleQueenSide),
                       castlingRights.HasFlag(StateFlag.BlackCanCastleKingSide),
                       castlingRights.HasFlag(StateFlag.BlackCanCastleKingSide),
                       whitePawns,
                       whiteRooks,
                       whiteKnights,
                       whiteBishops,
                       whiteQueens,
                       whiteKing,
                       blackPawns,
                       blackRooks,
                       blackKnights,
                       blackBishops,
                       blackQueens,
                       blackKing,
                       enPassantSquare));
        }