예제 #1
0
파일: Gamo.cs 프로젝트: vyz/myViz
        /// <summary>
        /// Модификация от 22 октября 2015 года
        /// Заложен июнь 2015 года
        /// </summary>
        /// <returns></returns>
        public bool MovaControlling()
        {
            bool reto = false;
            pozo tp = null;
            List<string> variantosy;
            string commento;

            string aa = GetAttro(gmAttro.Fen);
            if (aa == string.Empty)
            {
                tp = pozo.Starto();
                flagFromStart = true;
            }
            else
            {
            }
            FillMainMoves();
            lFactMoves = new List<Mova>();
            lPozos = new List<pozo>();

            lPozos.Add(tp);
            foreach( string minimov in onlymainmoves ) {
                if (minimov.StartsWith("{")) { //Это комментарий из текста, добавляем его непосредственно к позиции
                                               //И в лист комментов с указанием ссылки на позу для обратного восстановления из сохраненного гамо
                    flagComments = true;
                    string doba = minimov.Substring(1);
                } else if (minimov.StartsWith("$")) { //Это строка тайминга. Добавляем ее в лист таймингов с указанием позиции.
                                                      //Так как возможен неполный, а только выборочный тайминг.
                    flagTiming = true;
                    if (lTimos == null) {
                        lTimos = new List<gTimo>();
                        }
                    string timo = minimov.Substring(1);
                    int curmove = tp.NumberMove;
                    bool curcolor = tp.IsQueryMoveWhite;
                    gTimo curTimo = new gTimo(curmove.ToString(), curcolor ? "w" : "b", timo);
                    lTimos.Add(curTimo);
                } else if (tp.ContraMov(minimov)) {
                    lFactMoves.Add(tp.GetFactMoveFilled());
                    tp = tp.GetPozoAfterControlMove();
                    lPozos.Add(tp);
                } else { //раз дошли досюдова, то ход был, но он невозможный - фиксирукм это в гаму
                    flagImpossibleMove = true;
                    strimpossiblemove = string.Format("Невозможный ход {0} после {1} хода {2}", minimov, tp.NumberMove, !tp.IsQueryMoveWhite ? "белых" : "чёрных");
                    }
                }
            if (lFactMoves.Count > 0) {
                reto = true;
                if (Qavo == string.Empty) {
                    SetAttro(gmAttro.PlyCount, lFactMoves.Count.ToString());
                    }
                }
            return reto;
        }
예제 #2
0
        /// <summary>
        /// Модификация от 22 октября 2015 года
        /// Заложен июнь 2015 года
        /// </summary>
        /// <returns></returns>
        public bool MovaControlling()
        {
            bool          reto = false;
            pozo          tp   = null;
            List <string> variantosy;
            string        commento;

            string aa = GetAttro(gmAttro.Fen);

            if (aa == string.Empty)
            {
                tp            = pozo.Starto();
                flagFromStart = true;
            }
            else
            {
            }
            FillMainMoves();
            lFactMoves = new List <Mova>();
            lPozos     = new List <pozo>();

            lPozos.Add(tp);
            foreach (string minimov in onlymainmoves)
            {
                if (minimov.StartsWith("{"))   //Это комментарий из текста, добавляем его непосредственно к позиции
                                               //И в лист комментов с указанием ссылки на позу для обратного восстановления из сохраненного гамо
                {
                    flagComments = true;
                    string doba = minimov.Substring(1);
                }
                else if (minimov.StartsWith("$"))     //Это строка тайминга. Добавляем ее в лист таймингов с указанием позиции.
                                                      //Так как возможен неполный, а только выборочный тайминг.
                {
                    flagTiming = true;
                    if (lTimos == null)
                    {
                        lTimos = new List <gTimo>();
                    }
                    string timo     = minimov.Substring(1);
                    int    curmove  = tp.NumberMove;
                    bool   curcolor = tp.IsQueryMoveWhite;
                    gTimo  curTimo  = new gTimo(curmove.ToString(), curcolor ? "w" : "b", timo);
                    lTimos.Add(curTimo);
                }
                else if (tp.ContraMov(minimov))
                {
                    lFactMoves.Add(tp.GetFactMoveFilled());
                    tp = tp.GetPozoAfterControlMove();
                    lPozos.Add(tp);
                }
                else     //раз дошли досюдова, то ход был, но он невозможный - фиксирукм это в гаму
                {
                    flagImpossibleMove = true;
                    strimpossiblemove  = string.Format("Невозможный ход {0} после {1} хода {2}", minimov, tp.NumberMove, !tp.IsQueryMoveWhite ? "белых" : "чёрных");
                }
            }
            if (lFactMoves.Count > 0)
            {
                reto = true;
                if (Qavo == string.Empty)
                {
                    SetAttro(gmAttro.PlyCount, lFactMoves.Count.ToString());
                }
            }
            return(reto);
        }