Пример #1
0
 public void extract_pv_from_tt(cPosicion pos)
 {
     cPosInfo[] estate = new cPosInfo[cSearch.MAX_PLY_PLUS_6];
       for (int i = 0; i < cSearch.MAX_PLY_PLUS_6; i++)
     estate[i] = new cPosInfo();
       cTablaHashStruct tte;
       int st = 0;
       int ply = 1;
       mov m = m_PV[0];
       val expectedScore = m_nVal;
       m_PV.Clear();
       do
       {
     m_PV.Add(m);
     pos.DoMov(m_PV[ply++ - 1], estate[st++]);
     tte = cMotor.m_TablaHash.Buscar(pos.ClaveHash());
     expectedScore = -expectedScore;
       } while (tte != null
       && expectedScore == cSearch.value_from_tt(tte.GetValue(), ply)
       && pos.IsPseudoLegalMov(m = tte.GetMove())
       && pos.IsLegalMov(m, pos.pinned_pieces(pos.ColorMueve()))
       && ply < cSearch.MAX_PLY
       && (!pos.IsTablas() || ply <= 2));
       m_PV.Add(cMovType.MOV_NAN);
       while (--ply != 0)
     pos.DesMov(m_PV[ply - 1]);
 }