private void PlayExplodeAnimation(Image bombDropImage)
        {
            var scaleAnimation = new RadScaleAnimation {
                StartScaleX = 1.0,
                EndScaleX = 0.1,
                StartScaleY = 1.0,
                EndScaleY = 0.1,
                Duration = new Duration(TimeSpan.FromSeconds(1))
            };

            _bombBurningSoundEffect.Play();
            RadAnimationManager.Play(bombDropImage, scaleAnimation,
                delegate {
                    var canvas = bombDropImage.Parent as Canvas;
                    if (canvas == null) return;
                    canvas.Children.Remove(bombDropImage);
                    CreateExplodeAnimation(Canvas.GetLeft(bombDropImage) + (bombDropImage.Width / 2), Canvas.GetTop(bombDropImage) + (bombDropImage.Height / 2));
                });
        }
        private RadAnimation CreateSelectedAnimation()
        {
            var result = new RadScaleAnimation {
                StartScaleX = 1.0,
                EndScaleX = 1.3,
                StartScaleY = 1.0,
                EndScaleY = 1.3,
                Duration = new Duration(TimeSpan.FromSeconds(0.2)),
                AutoReverse = true,
                RepeatBehavior = new RepeatBehavior(10),
                FillBehavior = AnimationFillBehavior.Stop,
            };

            return result;
        }
        private void AddScore()
        {
            var currentScore = int.Parse(ScoreTextBlock.Text);
            var addScore = int.Parse(TimeTextBlock.Text);
            _answerFoundTime.Add(addScore);

            var scaleAndRotateAnimation = new RadScaleAnimation {
                StartScaleX = 1.0,
                EndScaleX = 1.5,
                StartScaleY = 1.0,
                EndScaleY = 1.5,
                Duration = TimeSpan.FromSeconds(1),
                AutoReverse = true,
                Easing = new ElasticEase {Oscillations = 3}
            };

            var totalScore = currentScore + addScore;
            ScoreTextBlock.Text = totalScore + string.Empty;

            RadAnimationManager.Play(ScoreTextBlock, scaleAndRotateAnimation);
            var answerId = _answerFoundTime.Count - 1;
            Utils.SendEvent(_stage.Name, "answer" + (answerId + 1), Utils.AnswerTimeRange(_answerFoundTime[answerId]), 0);
        }
        private void StopWatchImageTap(object sender, GestureEventArgs e)
        {
            // if already started stopwatch, ignore
            if (_stopWatchStarted) return;
            _stopWatchStarted = true;

            // if it has no more item, ignore
            int stopWatchItemCount = int.Parse(StopWatchItem.HasObtained);
            if (stopWatchItemCount <= 0) return;
            StopWatchItem.HasObtained = stopWatchItemCount - 1 + "";
            StopWatchCount.Text = StopWatchItem.HasObtained;

            // stop all timer and sound
            _timer.Stop();
            _tickerSoundEffectInstance.Pause();

            // initialize stopwatch value
            int countDownDuration = App.ViewModel.StopWatchTimerDuration;
            StopWatchCountDownTextBlock.Text = countDownDuration + "";

            // start playing heat beat music
            _heatBeatSoundEffectInstance.Play();
            var radScaleAnimation = new RadScaleAnimation {
                StartScaleX = 1,
                EndScaleX = 0.75,
                StartScaleY = 1,
                EndScaleY = 0.75,
                Duration = new Duration(TimeSpan.FromMilliseconds(250)),
                AutoReverse = true,
                FillBehavior = AnimationFillBehavior.Stop,
                Easing = new CubicEase { EasingMode = EasingMode.EaseInOut }
            };

            // Start StopWatch
            _stopWatchDispatcherTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
            _stopWatchDispatcherTimer.Tick += (o, args) =>
            {
                if (countDownDuration-- > 0) {
                    StopWatchCountDownTextBlock.Text = countDownDuration + "";
                    RadAnimationManager.Play((UIElement)sender, radScaleAnimation);
                }
                else {
                    StopWatchCountDownTextBlock.Text = "";
                    if (!GameWinWindow.IsOpen && !GameLoseWindow.IsOpen) {
                        _timer.Start();
                        if (_tickerSoundEffectInstance.IsDisposed == false)
                            _tickerSoundEffectInstance.Play();
                    }
                    _stopWatchStarted = false;
                    _stopWatchDispatcherTimer.Stop();
                    _heatBeatSoundEffectInstance.Stop();
                }
            };
            _stopWatchDispatcherTimer.Start();
            _numStoppersUsed += 1;
        }
        private void StartCountDownTimer()
        {
            var radScaleAnimation = new RadScaleAnimation {
                StartScaleX = 1,
                EndScaleX = 1.5,
                StartScaleY = 1,
                EndScaleY = 1.5,
                Duration = new Duration(TimeSpan.FromMilliseconds(250)),
                AutoReverse = true,
                FillBehavior = AnimationFillBehavior.Stop,
                Easing = new CubicEase {EasingMode = EasingMode.EaseInOut}
            };

            _timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 1) };
            _timer.Tick += (sender, args) => {
                RadAnimationManager.Play(TimeTextBlock, radScaleAnimation);
                var time = int.Parse(TimeTextBlock.Text);

                if (time > 10) {
                    TimeTextBlock.Text = (--time).ToString(CultureInfo.InvariantCulture);
                }
                else if (time > 0) {
                    TimeTextBlock.Text = "0" + --time;
                    TimeTextBlock.Foreground = new SolidColorBrush(Colors.Red);
                }
                else {
                    GameLose();
                    _timer.Stop();
                }
            };
            _timer.Start();
            if (!_tickerSoundEffectInstance.IsDisposed)
                _tickerSoundEffectInstance.Play();
        }
        private void AddScore()
        {
            var currentScore = int.Parse(ScoreTextBlock.Text);
            var addScore = int.Parse(TimeTextBlock.Text);
            _answerFoundTime.Add(addScore);

            var scaleAndRotateAnimation = new RadScaleAnimation();
            scaleAndRotateAnimation.StartScaleX = 1.0;
            scaleAndRotateAnimation.EndScaleX = 1.5;
            scaleAndRotateAnimation.StartScaleY = 1.0;
            scaleAndRotateAnimation.EndScaleY = 1.5;
            scaleAndRotateAnimation.Duration = TimeSpan.FromSeconds(1);
            scaleAndRotateAnimation.AutoReverse = true;
            scaleAndRotateAnimation.Easing = new ElasticEase { Oscillations = 3 };

            ScoreTextBlock.Text = currentScore + addScore + string.Empty;

            RadAnimationManager.Play(ScoreTextBlock, scaleAndRotateAnimation);
        }