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)); }