Пример #1
0
 /// <summary>
 /// 内部方法:移动棋子,并更改FEN记录
 /// </summary>
 /// <param name="piece">被移动的棋子</param>
 /// <param name="srcPos">源棋格</param>
 /// <param name="tgtPos">目标棋格</param>
 private void PieceMoveIn(Piece piece, Enums.ActionCollection actions, Position srcPos, Position tgtPos)
 {
     switch (piece.PieceType)
     {
         #region case 王车易位,过路兵,升变
         case Enums.PieceType.WhiteKing:
         case Enums.PieceType.BlackKing:
             {
                 //TODO:在这里实现王车易位
                 break;
             }
         case Enums.PieceType.WhitePawn:
         case Enums.PieceType.BlackPawn:
             {
                 //移走被吃的过路兵
                 if (_piecePawnByEnPassanted != null)
                 {
                     if (tgtPos.X == _piecePawnByEnPassanted.Position.X)
                     {
                         actions.Add(Enums.Action.EnPassant);
                         PieceMoveOut(_piecePawnByEnPassanted.Position);
                     }
                 }
                 //TODO:在这里实现“升变”
                 break;
             }
         case Enums.PieceType.WhiteQueen:
         case Enums.PieceType.WhiteRook:
         case Enums.PieceType.WhiteBishop:
         case Enums.PieceType.WhiteKnight:
         case Enums.PieceType.BlackQueen:
         case Enums.PieceType.BlackRook:
         case Enums.PieceType.BlackBishop:
         case Enums.PieceType.BlackKnight:
         case Enums.PieceType.AllKings:
         case Enums.PieceType.AllQueens:
         case Enums.PieceType.AllRooks:
         case Enums.PieceType.AllBishops:
         case Enums.PieceType.AllKnights:
         case Enums.PieceType.AllPawns:
         case Enums.PieceType.All:
         case Enums.PieceType.None:
         default:
             break;
         #endregion
     }
     piece.Position = tgtPos;
     this.SetByPosition(srcPos.Dot, '1');
     this.SetByPosition(tgtPos.Dot, Enums.FromPieceType(piece.PieceType)[0]);
     this.GameSide = Enums.GetOtherGameSide(this.GameSide);
     if (this.GameSide == Enums.GameSide.White)
     {
         this.FullMoveNumber++;
     }
     this.HalfMoveClock++;
 }