Пример #1
0
        /// <summary>
        /// Writes a castling flags.
        /// </summary>
        /// <param name="writer">The file writer.</param>
        /// <param name="castling">The castling data.</param>
        private void WriteCastling(StreamWriter writer, FriendlyCastling castling)
        {
            writer.WriteLine(PersistenceConstants.CastlingSection);

            writer.WriteLine(castling.WhiteShortCastlingPossibility.ToString());
            writer.WriteLine(castling.WhiteLongCastlingPossibility.ToString());
            writer.WriteLine(castling.BlackShortCastlingPossibility.ToString());
            writer.WriteLine(castling.BlackLongCastlingPossibility.ToString());

            writer.WriteLine(castling.WhiteCastlingDone.ToString());
            writer.WriteLine(castling.BlackCastlingDone.ToString());
        }
Пример #2
0
        /// <summary>
        /// Loads <see cref="FriendlyBoard"/> object from the specified file.
        /// </summary>
        /// <param name="path">The path to file.</param>
        /// <exception cref="InvalidSectionValueException">Thrown when loaded section name has invalid value.</exception>
        /// <returns><see cref="FriendlyBoard"/> object loaded from the file.</returns>
        public FriendlyBoard Read(string path)
        {
            FriendlyPiecesList pieces    = null;
            FriendlyCastling   castling  = null;
            FriendlyEnPassant  enPassant = null;

            using (var reader = new StreamReader(path))
            {
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (line == null)
                    {
                        throw new InvalidSectionValueException();
                    }

                    var lineAfterTrim = line.Trim();
                    if (lineAfterTrim.Length == 0)
                    {
                        continue;
                    }

                    switch (lineAfterTrim)
                    {
                    case PersistenceConstants.BoardSection:
                    {
                        pieces = ReadBoard(reader);
                        break;
                    }

                    case PersistenceConstants.CastlingSection:
                    {
                        castling = ReadCastling(reader);
                        break;
                    }

                    case PersistenceConstants.EnPassantSection:
                    {
                        enPassant = ReadEnPassant(reader);
                        break;
                    }

                    default:
                    {
                        throw new InvalidSectionValueException();
                    }
                    }
                }
            }

            return(new FriendlyBoard(pieces, castling, enPassant));
        }