コード例 #1
0
ファイル: GamePgnParser.cs プロジェクト: jbautistam/BauChess
        /// <summary>
        ///		Lee los datos del juego
        /// </summary>
        private SentenceBaseModel ReadGame(IEnumerator <SentenceBaseModel> sentenceEnumerator, LibraryPgnModel library)
        {
            SentenceBaseModel lastSentence = null;

            // Lee el juego
            do
            {
                GamePgnModel game = new GamePgnModel();

                // Guarda la etiqueta leída como última sentencia de la partida anterior
                if (lastSentence != null && lastSentence is SentenceTagModel sentenceTag)
                {
                    game.Headers.Add(new HeaderPgnModel(sentenceTag.Tag, sentenceTag.Content));
                }
                // Lee las cabeceras
                lastSentence = ReadHeaders(sentenceEnumerator, game);
                // Añade los moviemientos
                if (lastSentence is SentenceTurnNumberModel)
                {
                    // Lee los movimientos
                    lastSentence = ReadMovements(sentenceEnumerator, lastSentence, game.Movements);
                    // Añade el juego
                    library.Games.Add(game);
                }
                else
                {
                    lastSentence = new SentenceErrorModel("Can't find game movements");
                }
            }while (!(lastSentence is SentenceEndModel) && !(lastSentence is SentenceErrorModel));
            // Devuelve el juego creado
            return(lastSentence);
        }
コード例 #2
0
        /// <summary>
        ///		Convierte los datos de una partida
        /// </summary>
        private GameModel ConvertGame(GamePgnModel gamePgn)
        {
            GameModel game = new GameModel();

            // Convierte las etiquetas
            ConvertTags(game, gamePgn.Headers);
            // Añade los comentarios
            foreach (string comment in gamePgn.Comments)
            {
                game.Comments.Add(comment);
            }
            //// Depuración
            //#if DEBUG
            //	System.Diagnostics.Debug.WriteLine("");
            //	System.Diagnostics.Debug.WriteLine(new string('=', 80));
            //	System.Diagnostics.Debug.WriteLine("Game");
            //	foreach (HeaderPgnModel header in gamePgn.Headers)
            //		System.Diagnostics.Debug.WriteLine($"[{header.Tag}: {header.Content}]");
            //	System.Diagnostics.Debug.WriteLine("");
            //#endif
            // Convierte los movimientos
            try
            {
                game.Variation.Movements.AddRange(ConvertMovements(game.Board, gamePgn.Movements));
            }
            catch (Exception exception)
            {
                game.ParseError = $"Error when convert movements: {exception.Message}";
                //#if DEBUG
                //	System.Diagnostics.Debug.WriteLine(new string('#', 80));
                //	System.Diagnostics.Debug.WriteLine($"Error when convert movements: {exception.Message}");
                //	System.Diagnostics.Debug.WriteLine(new string('#', 80));
                //#endif
            }
            // Devuelve la partida
            return(game);
        }
コード例 #3
0
ファイル: GamePgnParser.cs プロジェクト: jbautistam/BauChess
        /// <summary>
        ///		Lee las cabeceras
        /// </summary>
        private SentenceBaseModel ReadHeaders(IEnumerator <SentenceBaseModel> sentenceEnumerator, GamePgnModel game)
        {
            SentenceBaseModel sentence = GetNextSentence(sentenceEnumerator);

            // Obtiene las cabeceras
            do
            {
                // Trata la sentencia
                switch (sentence)
                {
                case SentenceTagModel sentenceTag:
                    game.Headers.Add(new HeaderPgnModel(sentenceTag.Tag, sentenceTag.Content));
                    break;

                case SentenceCommentModel sentenceComment:
                    game.Comments.Add(sentenceComment.Content);
                    break;
                }
                // Pasa a la siguiente sentencia
                sentence = GetNextSentence(sentenceEnumerator);
            }while (!(sentence is SentenceEndModel) && !(sentence is SentenceErrorModel) && !(sentence is SentenceTurnNumberModel));
            // Devuelve la última sentencia leída
            return(sentence);
        }