Пример #1
0
        //----------------------------------------------------------------------------------------
        public static int Jaques(cPosicion pos, cMov[] mlist, int mPos)
        {
            color us = pos.ColorMueve();
              cInfoJaque ci = new cInfoJaque(pos);
              bitbrd dc = ci.m_Candidatas;

              while(dc!=0)
              {
            sq from = cBitBoard.GetLSB(ref dc);
            type pt = cTypes.TipoPieza(pos.GetPieza(from));

            if(pt==cPieza.PEON)
              continue;

            bitbrd b = pos.AtaquesDePieza((pieza)pt, from)&~pos.Piezas();

            if(pt==cPieza.REY)
              b&=~cBitBoard.m_PseudoAtaques[cPieza.DAMA][ci.m_SqRey];

            while(b!=0)
              mlist[mPos++].m=cTypes.CreaMov(from, cBitBoard.GetLSB(ref b));
              }

              return us==cColor.BLANCO ? ToDO(pos, mlist, mPos, ~pos.Piezas(), cColor.BLANCO, cMovType.QUIET_CHECKS, ci) :
                                  ToDO(pos, mlist, mPos, ~pos.Piezas(), cColor.NEGRO, cMovType.QUIET_CHECKS, ci);
        }