public void HandleCollision(Int32 invaderId, Int32 capturedId, Boolean isCollisionStopsMoving)
        {
            if (!_pieces.ContainsKey(invaderId))
            {
                throw new InvalidOperationException($"Invader piece {invaderId} already captured");
            }
            if (!_pieces.ContainsKey(capturedId))
            {
                throw new InvalidOperationException($"Captured piece {capturedId} already captured");
            }
            CPiece invaderPiece  = _pieces[invaderId];
            CPiece capturedPiece = _pieces[capturedId];

            _attachedBoard.BoardCanvas.Children.Remove(capturedPiece);
            if (isCollisionStopsMoving)
            {
                invaderPiece.StopAnimation();
                invaderPiece.AnimatePiece(capturedPiece.Margin);
            }
            else if (capturedPiece.CurrentAnimation != null)
            {
                capturedPiece.StopAnimation();
                if (capturedPiece.AttachedTile != null)
                {
                    _attachedTiles.Remove(capturedPiece.AttachedTile);
                }
            }
            if (capturedPiece.AttachedTimeoutIndicator != null)
            {
                _attachedBoard.BoardCanvas.Children.Remove(capturedPiece.AttachedTimeoutIndicator);
            }
            _pieces.Remove(capturedId);
        }
        public void MovePiece(Int32 pieceId, CPoint newPosition)
        {
            CPiece piece = _pieces[pieceId];

            _boardStates.ResetToDefault(new CTile(piece.Margin));
            piece.IsActive = false;
            piece.AnimatePiece(new Thickness(newPosition.X, newPosition.Y, 0, 0));
        }