public pozo() { pBoard = new Pieco[64]; qava = -1; pzu = null; controllomova = null; }
/// <summary> /// Модификация от 29 июля 2015 года /// Заложен 26 июля 2015 года /// </summary> /// <returns></returns> public Mova GetFactMoveFilled() { Mova reto = null; if (null != controllomova) { controllomova.FormShortoString(pzu); reto = controllomova; } return(reto); }
/// <summary> /// Модификация от 24 июля 2015 года /// Заложен 24 июля 2015 года /// </summary> /// <param name="aa"></param> /// <returns></returns> public bool ContraMov(string aa) { //AvailableFill(); if (null == pzu) { pzu = new PozoUtils(pBoard, whitomv, rokko, enpasso, enfield); } controllomova = pzu.MovaProverka(aa); bool reto = false; if (null != controllomova) { reto = true; } return(reto); }
/// <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> /// Модификация от 21 июля 2015 года /// Заложен 2015 год /// </summary> /// <param name="pif"></param> /// <param name="pit"></param> /// <param name="addo"></param> /// <returns></returns> private List<Mova> AddPawnPromotion(int pif, int pit, MovoTypo addo) { List<Mova> reto = new List<Mova>(); MovoTypo movtyp = MovoTypo.PawnPromotionToQueen | addo; Pieco fipa = whitomv ? Pieco.Queen : (Pieco.Queen | Pieco.Black); if (IsAvailableMove(pif, pit, fipa, movtyp)) { Mova aa = new Mova(whitomv, pBoard[pif], pif, pit, movtyp); reto.Add(aa); } movtyp = MovoTypo.PawnPromotionToRook | addo; fipa = whitomv ? Pieco.Rook : (Pieco.Rook | Pieco.Black); if (IsAvailableMove(pif, pit, fipa, movtyp)) { Mova aa = new Mova(whitomv, pBoard[pif], pif, pit, movtyp); reto.Add(aa); } movtyp = MovoTypo.PawnPromotionToBishop | addo; fipa = whitomv ? Pieco.Bishop : (Pieco.Bishop | Pieco.Black); if (IsAvailableMove(pif, pit, fipa, movtyp)) { Mova aa = new Mova(whitomv, pBoard[pif], pif, pit, movtyp); reto.Add(aa); } movtyp = MovoTypo.PawnPromotionToKnight | addo; fipa = whitomv ? Pieco.Knight : (Pieco.Knight | Pieco.Black); if (IsAvailableMove(pif, pit, fipa, movtyp)) { Mova aa = new Mova(whitomv, pBoard[pif], pif, pit, movtyp); reto.Add(aa); } return reto; }
private Mova AddMoveIsNotCheck(int pif, int pit, MovoTypo pmt) { Mova reto = null; if (IsAvailableMove(pif, pit, pBoard[pif], pmt)) { reto = new Mova(whitomv, pBoard[pif], pif, pit, pmt); } 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; }
/// <summary> /// Модификация от 30 июля 2015 года /// Заложен 29 июля 2015 года /// </summary> /// <param name="pmv"></param> /// <returns></returns> public int CanEnpasso(Mova pmv) { int reto = -1; if (pmv.Figura == (Pieco.Pawn | Pieco.White) && ((pmv.ToField - pmv.FromField) == 16)) { if ((pmv.ToField % 8 > 0 && pBoard[pmv.ToField - 1] == (Pieco.Pawn | Pieco.Black)) || (pmv.ToField % 8 < 7 && pBoard[pmv.ToField + 1] == (Pieco.Pawn | Pieco.Black))) { reto = pmv.ToField - 8; } } else if (pmv.Figura == (Pieco.Pawn | Pieco.Black) && (pmv.FromField - pmv.ToField == 16)) { if ((pmv.ToField % 8 > 0 && pBoard[pmv.ToField - 1] == (Pieco.Pawn | Pieco.White)) || (pmv.ToField % 8 < 7 && pBoard[pmv.ToField + 1] == (Pieco.Pawn | Pieco.White))) { reto = pmv.ToField + 8; } } return reto; }
/// <summary> /// Constructor /// </summary> /// <param name="move"> Move position</param> public MoveSelectedEventArgs(Mova move) { Move = move; }
/// <summary> /// Модификация от 24 июля 2015 года /// Заложен 24 июля 2015 года /// </summary> /// <param name="aa"></param> /// <returns></returns> public bool ContraMov(string aa) { //AvailableFill(); if (null == pzu) { pzu = new PozoUtils(pBoard, whitomv, rokko, enpasso, enfield); } controllomova = pzu.MovaProverka(aa); bool reto = false; if( null != controllomova ) { reto = true; } return reto; }