コード例 #1
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;
        }
コード例 #2
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();
 }