コード例 #1
0
ファイル: Finales.cs プロジェクト: Alfilchess/Engine
        //-----------------------------------------------------------------------------------------------
        public val KXK(cPosicion pos)
        {
            if (pos.ColorMueve() == m_cDebil && 0 == (new cReglas(pos, cMovType.LEGAL)).Size())
            return cValoresJuego.TABLAS;

              sq posReyGanador = pos.GetRey(m_cFuerte);
              sq posReyPerdedor = pos.GetRey(m_cDebil);

              val result = pos.MaterialPieza(m_cFuerte)
                   + pos.GetNum(m_cFuerte, cPieza.PEON) * cValoresJuego.PEON_FINAL
                   + m_lstValorBorde[posReyPerdedor]
                   + m_lstValorCerrado[cBitBoard.Distancia(posReyGanador, posReyPerdedor)];

              if (pos.GetNum(m_cFuerte, cPieza.DAMA) != 0
              || pos.GetNum(m_cFuerte, cPieza.TORRE) != 0
              || (pos.GetNum(m_cFuerte, cPieza.ALFIL) != 0 && pos.GetNum(m_cFuerte, cPieza.CABALLO) != 0)
              || pos.IsAlfilPar(m_cFuerte))
              {
            result += cValoresJuego.GANA;
              }

              return m_cFuerte == pos.ColorMueve() ? result : -result;
        }