Пример #1
0
        /// <summary>
        /// Checks if last play was a castling and move the respective tower
        /// </summary>
        /// <param name="king">King</param>
        private void ExecuteCastling(Piece king)
        {
            Piece    tower  = null;
            Position origin = null;
            Position target = null;

            if (king.Position.Column == 6)
            {
                tower = Board.Piece(king.Position.Row, king.Position.Column + 1);
                if (tower.NumberOfMovements == 0)
                {
                    origin = tower.Position;
                    target = new Position(king.Position.Row, king.Position.Column - 1);
                    Board.RemovePiece(origin);
                    Board.PutPiece(tower, target);

                    StringBuilder text = new StringBuilder();
                    text.AppendLine("Execute castling piece");
                    text.AppendLine(string.Concat("Piece: ", tower.GetType()));
                    text.AppendLine(string.Concat("Color: ", tower.Color.ToString()));
                    text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row));
                    text.AppendLine(string.Concat("Target ChessPosition: ", target.ToChessPosition().ToString(), " Target CanvasPosition(Column, Row): ", target.Column, ", ", target.Row));
                    text.AppendLine(string.Concat("Turn: ", TotalMoves));
                    text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString()));

                    WriteLog.ChecksLogs(text);

                    tower.IncrementMovements();
                }
            }
            else if (king.Position.Column == 2)
            {
                tower = Board.Piece(king.Position.Row, king.Position.Column - 2);
                if (tower.NumberOfMovements == 0)
                {
                    origin = tower.Position;
                    target = new Position(king.Position.Row, king.Position.Column + 1);
                    Board.RemovePiece(origin);
                    Board.PutPiece(tower, target);

                    StringBuilder text = new StringBuilder();
                    text.AppendLine("Execute castling piece");
                    text.AppendLine(string.Concat("Piece: ", tower.GetType()));
                    text.AppendLine(string.Concat("Color: ", tower.Color.ToString()));
                    text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row));
                    text.AppendLine(string.Concat("Target ChessPosition: ", target.ToChessPosition().ToString(), " Target CanvasPosition(Column, Row): ", target.Column, ", ", target.Row));
                    text.AppendLine(string.Concat("Turn: ", TotalMoves));
                    text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString()));

                    WriteLog.ChecksLogs(text);

                    tower.IncrementMovements();
                }
            }

            if (KingIsCheck(king.Color) && origin != null)
            {
                UndoMovement(origin, target, null);
            }
        }
Пример #2
0
        /// <summary>
        /// Execute move of chess piece
        /// </summary>
        /// <param name="origin">Origin of piece</param>
        /// <param name="target">Target position</param>
        public Piece ExecuteMove(Position origin, Position target)
        {
            Piece piece         = Board.RemovePiece(origin);
            Piece capturedPiece = Board.RemovePiece(target);

            Board.PutPiece(piece, target);

            // Log
            StringBuilder text = new StringBuilder();

            text.AppendLine("Move piece");
            text.AppendLine(string.Concat("Piece: ", piece.GetType()));
            text.AppendLine(string.Concat("Color: ", piece.Color.ToString()));
            text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row));
            text.AppendLine(string.Concat("Target ChessPosition: ", target.ToChessPosition().ToString(), " Target CanvasPosition(Column, Row): ", target.Column, ", ", target.Row));
            text.AppendLine(string.Concat("Turn: ", TotalMoves));
            text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString()));


            piece.IncrementMovements();

            if (capturedPiece != null)
            {
                CapturedPieces.Add(capturedPiece);
                text.AppendLine(string.Concat("Captured: ", capturedPiece.GetType()));
            }
            WriteLog.ChecksLogs(text);

            if (Board.Piece(target) is King && ((target.Column + 2 == origin.Column) || (target.Column - 2 == origin.Column)))
            {
                ExecuteCastling(Board.Piece(target));
            }

            if (Board.Piece(target) != null && Board.Piece(target) is Pawn && origin.Column != target.Column && capturedPiece == null)
            {
                capturedPiece = ExecuteEnPassant(Board.Piece(target), origin);
            }

            if (capturedPiece != null)
            {
                CapturedPieces.Add(capturedPiece);
            }

            return(capturedPiece);
        }