/// <summary> /// Модификация от 27 мая 2015 года /// Заложен 27 мая 2015 года /// </summary> private void startoinito() { for (int i = 47; i >= 16; i--) { pBoard[i] = Pieco.None; } for (int i = 55; i >= 48; i--) { pBoard[i] = Pieco.Pawn | Pieco.Black; } for (int i = 15; i >= 8; i--) { pBoard[i] = Pieco.Pawn | Pieco.White; } pBoard[63] = pBoard[56] = Pieco.Rook | Pieco.Black; pBoard[62] = pBoard[57] = Pieco.Knight | Pieco.Black; pBoard[61] = pBoard[58] = Pieco.Bishop | Pieco.Black; pBoard[60] = Pieco.Queen | Pieco.Black; pBoard[59] = Pieco.King | Pieco.Black; pBoard[7] = pBoard[0] = Pieco.Rook | Pieco.White; pBoard[6] = pBoard[1] = Pieco.Knight | Pieco.White; pBoard[5] = pBoard[2] = Pieco.Bishop | Pieco.White; pBoard[4] = Pieco.Queen | Pieco.White; pBoard[3] = Pieco.King | Pieco.White; whitomv = true; rokko = Caslo.KingWhite | Caslo.QueenWhite | Caslo.KingBlack | Caslo.QueenBlack; enpasso = false; enfield = 0; pustomv = 0; numbero = 1; }
/// <summary> /// Модификация от 29 июля 2015 года /// Заложен 29 июля 2015 года /// </summary> /// <param name="ppb"></param> /// <param name="coloro"></param> /// <param name="prok"></param> /// <param name="penp"></param> /// <param name="penf"></param> /// <param name="ppmv"></param> /// <param name="pnum"></param> public pozo(Pieco[] ppb, bool coloro, Caslo prok, bool penp, int penf, int ppmv, int pnum) { pBoard = new Pieco[64]; for (int i = 0; i < 64; i++) { pBoard[i] = ppb[i]; } whitomv = coloro; rokko = prok; enpasso = penp; enfield = penf; pustomv = ppmv; numbero = pnum; qava = -1; pzu = null; controllomova = null; }
/// <summary> /// Модификация от 30 июля 2015 года /// Заложен 29 июля 2015 года /// </summary> /// <returns></returns> public pozo GetPozoAfterControlMove() { pozo reto = null; PozoUtils tmp = new PozoUtils(pBoard, !whitomv, controllomova.FromField, controllomova.ToField, controllomova.Figura, controllomova.MvType, false); Caslo cafmv = tmp.RokkoChangeAfterMove(rokko, controllomova); int zenpass = tmp.CanEnpasso(controllomova); bool benpass = (zenpass >= 0); if (benpass) //Превращение из нормального целого поля в специальное короткое для позиции { zenpass -= (zenpass < 24) ? 16 : 40; } int ppustomv = pustomv + 1; if ((controllomova.Figura & Pieco.PieceMask) == Pieco.Pawn || (controllomova.MvType & MovoTypo.PieceEaten) > 0) { ppustomv = 0; } reto = new pozo(tmp.Boardo, tmp.Coloro, cafmv, benpass, zenpass, ppustomv, numbero + (tmp.Coloro ? 1 : 0)); return(reto); }
/// <summary> /// Модификация от 3 августа 2015 года /// Заложен 29 июля 2015 года /// </summary> /// <param name="old"></param> /// <param name="pmv"></param> /// <returns></returns> public Caslo RokkoChangeAfterMove(Caslo old, Mova pmv) { Caslo reto = old; if (pmv.MvType == MovoTypo.Castle || (pmv.Figura & Pieco.PieceMask) == Pieco.King) { if (whitomv) { //Это уже инверсия. Сейчас ход противника, а в pmv ещё предыдущий ход if ((reto & Caslo.KingBlack) > 0) { reto ^= Caslo.KingBlack; } if ((reto & Caslo.QueenBlack ) > 0) { reto ^= Caslo.QueenBlack; } } else { if ((reto & Caslo.KingWhite) > 0) { reto ^= Caslo.KingWhite; } if ((reto & Caslo.QueenWhite) > 0) { reto ^= Caslo.QueenWhite; } } } else if ((pmv.Figura & Pieco.PieceMask) == Pieco.Rook) { if (whitomv) { if (pmv.FromField == 56) { if ((reto & Caslo.KingBlack) > 0) { reto ^= Caslo.KingBlack; } } if (pmv.FromField == 63) { if ((reto & Caslo.QueenBlack) > 0) { reto ^= Caslo.QueenBlack; } } } else { if (pmv.FromField == 0) { if ((reto & Caslo.KingWhite) > 0) { reto ^= Caslo.KingWhite; } } if (pmv.FromField == 7) { if ((reto & Caslo.QueenWhite) > 0) { reto ^= Caslo.QueenWhite; } } } } return reto; }
public PozoUtils(Pieco[] pp, bool pcolor, Caslo pr, bool v, int penp) { pBoard = pp; whitomv = pcolor; rokko = pr; enpasso = v; enfield = penp; }
/// <summary> /// Модификация от 27 мая 2015 года /// Заложен 27 мая 2015 года /// </summary> private void startoinito() { for(int i = 47; i >= 16; i--) { pBoard[i] = Pieco.None; } for (int i = 55; i >= 48; i--) { pBoard[i] = Pieco.Pawn | Pieco.Black; } for (int i = 15; i >= 8; i--) { pBoard[i] = Pieco.Pawn | Pieco.White; } pBoard[63] = pBoard[56] = Pieco.Rook | Pieco.Black; pBoard[62] = pBoard[57] = Pieco.Knight | Pieco.Black; pBoard[61] = pBoard[58] = Pieco.Bishop | Pieco.Black; pBoard[60] = Pieco.Queen | Pieco.Black; pBoard[59] = Pieco.King | Pieco.Black; pBoard[7] = pBoard[0] = Pieco.Rook | Pieco.White; pBoard[6] = pBoard[1] = Pieco.Knight | Pieco.White; pBoard[5] = pBoard[2] = Pieco.Bishop | Pieco.White; pBoard[4] = Pieco.Queen | Pieco.White; pBoard[3] = Pieco.King | Pieco.White; whitomv = true; rokko = Caslo.KingWhite | Caslo.QueenWhite | Caslo.KingBlack | Caslo.QueenBlack; enpasso = false; enfield = 0; pustomv = 0; numbero = 1; }