//----------------------------------------------------------------------------------------------- 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; }