示例#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>
 /// Модификация от 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;
 }
示例#3
0
文件: PozoUtils.cs 项目: vyz/myViz
        private bool IsAvailableMove(int pif, int pit, Pieco fipa, MovoTypo pmt)
        {
            bool reto = false;

            PozoUtils nnp = new PozoUtils(pBoard, whitomv, pif, pit, fipa, pmt, true);
            reto = nnp.IsNoCheck();
            return reto;
        }
示例#4
0
文件: pozo.cs 项目: vyz/myViz
 /// <summary>
 /// Модификация от 22 июля 2015 года
 /// Заложен май 2015 года
 /// </summary>
 private void AvailableFill()
 {
     pzu = new PozoUtils(pBoard, whitomv, rokko, enpasso, enfield);
     limov = pzu.MovaFill();
 }
示例#5
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;
 }
示例#6
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;
 }
示例#7
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();
 }