Esempio n. 1
0
 public override int GetHashCode()
 {
     return
         (Source.GetHashCode()
          ^ Destination.GetHashCode()
          ^ CapturedPiece.GetHashCode()
          ^ SpecialMoveType.GetHashCode());
 }
Esempio n. 2
0
 public override void UnMakeMove(Board board)
 {
     PromotedPiece.RemoveMe(board);
     if (CapturedPiece != null)
     {
         CapturedPiece.PutMe(board);
     }
     Piece.PutMe(board);
 }
Esempio n. 3
0
 public override void MakeMove(Board board)
 {
     if (Piece.Color == Color.White)
     {
         CapturedPiece = To.To(Coordinate.Directions.South).GetPiece(board);
     }
     else
     {
         CapturedPiece = To.To(Coordinate.Directions.North).GetPiece(board);
     }
     CapturedPiece.RemoveMe(board);
     Piece.MoveTo(board, To);
 }
Esempio n. 4
0
        public override bool Equals(object obj)
        {
            var move = obj as Move;

            if (move == null)
            {
                return(false);
            }

            return
                (Source.Equals(move.Source) &&
                 Destination.Equals(move.Destination) &&
                 CapturedPiece.Equals(move.CapturedPiece) &&
                 SpecialMoveType.Equals(move.SpecialMoveType));
        }
Esempio n. 5
0
        public override string ToString()
        {
            var piece          = CapturedPiece.GetNotation();
            var endingFile     = MoveUtilities.GetFileFromInt(EndingSquare.Coordinate.File);
            var rank           = EndingSquare.Coordinate.Rank;
            var isCapture      = GetCaptureNotation(IsCapture);
            var check          = GetCheckNotation();
            var disambiguating = GetDisambiguating();
            var promotion      = GetPromotionNotation();

            return(string.Format("{0}{1}{2}{3}{4}{5}{6}", piece,
                                 disambiguating,
                                 isCapture,
                                 endingFile,
                                 rank,
                                 promotion,
                                 check));
        }
Esempio n. 6
0
 /// <summary>
 /// 生成文字描述。
 /// </summary>
 public void GenerateFriendlyText()
 {
     var sb = new System.Text.StringBuilder();
     sb.Append(Piece.GetFriendlyName());
     sb.Append("从");
     sb.Append(OriginalPosition.ToString());
     sb.Append("到");
     sb.Append(NewPosition.ToString());
     if (IsCapture && CapturedPiece != null)
     {
         sb.Append(", 吃");
         sb.Append(CapturedPiece.GetFriendlyName());
     }
     if (Promotion.HasValue)
     {
         sb.Append(", 晋升为");
         sb.Append(ChessGame.OriginalMapPgnCharToPiece(Promotion.Value, Player).GetFriendlyName());
     }
     if (Castling.Equals(CastlingType.KingSide))
     {
         sb.Append(", 王翼易位");
     }
     if (Castling.Equals(CastlingType.QueenSide))
     {
         sb.Append(", 后翼易位");
     }
     if(IsEnpassant)
     {
         sb.Append(", 吃过路兵");
     }
     if (IsCheckmate.HasValue && IsCheckmate.Value)
     {
         sb.Append(", 将死");
     } else if (IsChecking.HasValue && IsChecking.Value)
     {
         sb.Append(", 将军");
     }
     this._storedFriendlyText = sb.ToString();
 }
Esempio n. 7
0
        public override string ToString()
        {
            if (IsKingSideCastle)
            {
                return($"{Player} castles king-side");
            }

            if (IsQueenSideCastle)
            {
                return($"{Player} castles queen-side");
            }

            return($"{Player} {PieceType} {From}->{To}" + (IsCapturing ? $" captures {CapturedPiece.GetPieceType()}" : "") + (IsWithCheck ? " with check" : ""));
        }
Esempio n. 8
0
 protected virtual void OnMovePlayed()
 {
     MovedPiece.OnPieceMoved(EndingSquare);
     CapturedPiece?.OnPieceCaptured();
 }