public Position ReadPositionFromFile(string fileName)
        {
            List <Piece> whitePieces = new List <Piece>();
            List <Piece> blackPieces = new List <Piece>();
            StreamReader reader;

            try
            {
                reader = File.OpenText(fileName);
            }
            catch (Exception exc) { return(null); }

            string inputLine = null;

            inputLine = reader.ReadLine();
            Position.Players colTurn;
            if (inputLine.StartsWith("White"))
            {
                colTurn = Position.Players.White;
            }
            else if (inputLine.StartsWith("Black"))
            {
                colTurn = Position.Players.Black;
            }
            else
            {
                return(null);
            }
            while ((inputLine = reader.ReadLine()) != null)
            {
                if (inputLine.StartsWith("{"))
                {
                    continue;
                }
                string[]         s           = inputLine.Split(' ');
                string           pieceKind   = s[0];
                string           stringColor = s[1];
                Position.Players color;
                if (stringColor.Equals("White"))
                {
                    color = Position.Players.White;
                }
                else
                {
                    color = Position.Players.Black;
                }
                char   file   = Char.Parse(s[2]);
                int    rank   = Int32.Parse(s[3]);
                Piece  piece  = null;
                Square square = new Square(file, rank);
                switch (pieceKind)
                {
                case "King": piece = new King(square, color); break;

                case "Queen": piece = new Queen(square, color); break;

                case "Rook": piece = new Rook(square, color); break;

                case "Bishop": piece = new Bishop(square, color); break;

                case "Knight": piece = new Knight(square, color); break;

                case "Pawn": piece = new Pawn(square, color, null); break;
                }
                if (color.Equals(Position.Players.White))
                {
                    whitePieces.Add(piece);
                }
                else
                {
                    blackPieces.Add(piece);
                }
            }
            reader.Close();
            Position position = new Position(whitePieces, blackPieces, null, colTurn, 0, null);

            return(position);
        }
        public Piece parseFenPiecePlacement(char piecePlacement, out int blankSquares)
        {
            Piece retPiece = null;

            blankSquares = 1;
            switch (piecePlacement)
            {
            case 'p':
                retPiece = new Pawn(null, Position.Players.Black, null);
                break;

            case 'n':
                retPiece = new Knight(null, Position.Players.Black, null);
                break;

            case 'b':
                retPiece = new Bishop(null, Position.Players.Black, null);
                break;

            case 'r':
                retPiece = new Rook(null, Position.Players.Black, null);
                break;

            case 'q':
                retPiece = new Queen(null, Position.Players.Black, null);
                break;

            case 'k':
                retPiece = new King(null, Position.Players.Black, null);
                break;

            case 'P':
                retPiece = new Pawn(null, Position.Players.White, null);
                break;

            case 'N':
                retPiece = new Knight(null, Position.Players.White, null);
                break;

            case 'B':
                retPiece = new Bishop(null, Position.Players.White, null);
                break;

            case 'R':
                retPiece = new Rook(null, Position.Players.White, null);
                break;

            case 'Q':
                retPiece = new Queen(null, Position.Players.White, null);
                break;

            case 'K':
                retPiece = new King(null, Position.Players.White, null);
                break;

            case '/':
                blankSquares = 9;
                break;

            case '1':
                blankSquares = 1;
                break;

            case '2':
                blankSquares = 2;
                break;

            case '3':
                blankSquares = 3;
                break;

            case '4':
                blankSquares = 4;
                break;

            case '5':
                blankSquares = 5;
                break;

            case '6':
                blankSquares = 6;
                break;

            case '7':
                blankSquares = 7;
                break;

            case '8':
                blankSquares = 8;
                break;
            }
            return(retPiece);
        }