示例#1
0
文件: pozo.cs 项目: vyz/myViz
 public pozo()
 {
     pBoard        = new Pieco[64];
     qava          = -1;
     pzu           = null;
     controllomova = null;
 }
示例#2
0
文件: pozo.cs 项目: vyz/myViz
        /// <summary>
        /// Модификация от 24 июля 2015 года
        /// Заложен 24 июля 2015 года
        /// </summary>
        /// <param name="aa"></param>
        /// <returns></returns>
        public bool ContraMov(string aa)
        {
            //AvailableFill();
            if (null == pzu)
            {
                pzu = new PozoUtils(pBoard, whitomv, rokko, enpasso, enfield);
            }
            controllomova = pzu.MovaProverka(aa);
            bool reto = false;

            if (null != controllomova)
            {
                reto = true;
            }
            return(reto);
        }
示例#3
0
文件: pozo.cs 项目: vyz/myViz
 /// <summary>
 /// Модификация от 29 июля 2015 года
 /// Заложен 29 июля 2015 года
 /// </summary>
 /// <param name="ppb"></param>
 /// <param name="coloro"></param>
 /// <param name="prok"></param>
 /// <param name="penp"></param>
 /// <param name="penf"></param>
 /// <param name="ppmv"></param>
 /// <param name="pnum"></param>
 public pozo(Pieco[] ppb, bool coloro, Caslo prok, bool penp, int penf, int ppmv, int pnum)
 {
     pBoard = new Pieco[64];
     for (int i = 0; i < 64; i++)
     {
         pBoard[i] = ppb[i];
     }
     whitomv       = coloro;
     rokko         = prok;
     enpasso       = penp;
     enfield       = penf;
     pustomv       = ppmv;
     numbero       = pnum;
     qava          = -1;
     pzu           = null;
     controllomova = null;
 }
示例#4
0
文件: pozo.cs 项目: vyz/myViz
        /// <summary>
        /// Модификация от 30 июля 2015 года
        /// Заложен 29 июля 2015 года
        /// </summary>
        /// <returns></returns>
        public pozo GetPozoAfterControlMove()
        {
            pozo      reto    = null;
            PozoUtils tmp     = new PozoUtils(pBoard, !whitomv, controllomova.FromField, controllomova.ToField, controllomova.Figura, controllomova.MvType, false);
            Caslo     cafmv   = tmp.RokkoChangeAfterMove(rokko, controllomova);
            int       zenpass = tmp.CanEnpasso(controllomova);
            bool      benpass = (zenpass >= 0);

            if (benpass)   //Превращение из нормального целого поля в специальное короткое для позиции
            {
                zenpass -= (zenpass < 24) ? 16 : 40;
            }
            int ppustomv = pustomv + 1;

            if ((controllomova.Figura & Pieco.PieceMask) == Pieco.Pawn || (controllomova.MvType & MovoTypo.PieceEaten) > 0)
            {
                ppustomv = 0;
            }
            reto = new pozo(tmp.Boardo, tmp.Coloro, cafmv, benpass, zenpass, ppustomv, numbero + (tmp.Coloro ? 1 : 0));
            return(reto);
        }
示例#5
0
文件: pozo.cs 项目: vyz/myViz
 /// <summary>
 /// Модификация от 22 июля 2015 года
 /// Заложен май 2015 года
 /// </summary>
 private void AvailableFill()
 {
     pzu   = new PozoUtils(pBoard, whitomv, rokko, enpasso, enfield);
     limov = pzu.MovaFill();
 }
示例#6
0
文件: Mova.cs 项目: vyz/myViz
        /// <summary>
        /// Модификация от 26 августа 2015 года
        /// Заложен 27 июля 2015 года
        /// </summary>
        /// <param name="pp"></param>
        public void FormShortoString(PozoUtils pp)
        {
            StringBuilder fremo = new StringBuilder(4);

            if (typo == MovoTypo.Castle)
            {
                if (tomo == 1 || tomo == 57)
                {
                    fremo.Append("O-O");
                }
                else if (tomo == 5 || tomo == 61)
                {
                    fremo.Append("O-O-O");
                }
                else
                {
                    fremo.Append("?????");
                    throw new VisualisatorException("Mova, рокировка неизвестного типа");
                }
            }
            else
            {
                switch (figo & Pieco.PieceMask)
                {
                case Pieco.Pawn:
                    if ((typo & MovoTypo.PieceEaten) > 0)
                    {
                        fremo.Append(Convert.ToChar((int)'h' - (fromo % 8)));
                    }
                    break;

                case Pieco.Knight:
                    fremo.Append('N');
                    break;

                case Pieco.Bishop:
                    fremo.Append('B');
                    break;

                case Pieco.Rook:
                    fremo.Append('R');
                    break;

                case Pieco.Queen:
                    fremo.Append('Q');
                    break;

                case Pieco.King:
                    fremo.Append('K');
                    break;

                default:
                    fremo.Append('?');
                    break;
                }
                List <int> lifi = pp.ListFieldsFromAttackedThisField(figo, tomo, typo);
                if (lifi.Count > 1 && lifi.Count < 3)
                {
                    if (lifi[0] % 8 == lifi[1] % 8)    //Совпадение колонок
                    {
                        fremo.Append(Convert.ToChar((int)'1' + (fromo / 8)));
                    }
                    else   //На совпадение строк не проверяем, главное что не совпадают колонки
                    {
                        if (!((figo & Pieco.PieceMask) == Pieco.Pawn && (typo & MovoTypo.PieceEaten) > 0))
                        {
                            fremo.Append(Convert.ToChar((int)'h' - (fromo % 8)));
                        }
                    }
                }
                else if (lifi.Count >= 3 || lifi.Count < 1)
                {
                    throw new VisualisatorException(string.Format("Mova, Количество стартовых полей превышает разумные пределы --{0}--", lifi.Count));
                }
                if ((typo & MovoTypo.PieceEaten) > 0)
                {
                    fremo.Append('x');
                }
                fremo.Append(Convert.ToChar((int)'h' - (tomo % 8)));
                fremo.Append(Convert.ToChar((int)'1' + (tomo / 8)));
            }
            if ((typo & MovoTypo.MoveTypeMask) == MovoTypo.PawnPromotionToQueen)
            {
                fremo.Append("=Q");
            }
            else if ((typo & MovoTypo.MoveTypeMask) == MovoTypo.PawnPromotionToRook)
            {
                fremo.Append("=R");
            }
            else if ((typo & MovoTypo.MoveTypeMask) == MovoTypo.PawnPromotionToKnight)
            {
                fremo.Append("=N");
            }
            else if ((typo & MovoTypo.MoveTypeMask) == MovoTypo.PawnPromotionToBishop)
            {
                fremo.Append("=B");
            }
            //мат и шах в хвост
            PozoUtils testo = new PozoUtils(pp.Boardo, !pp.Coloro, fromo, tomo, figo, typo, false);

            if (testo.IsCheckmated())
            {
                fremo.Append('#');
            }
            else if (!testo.IsNoCheck())
            {
                fremo.Append('+');
            }
            shorto = fremo.ToString();
        }