/// <summary> /// Подтверждение при закрытия окна. /// Если есть какие-либо результаты, то выводит запрос отправки /// результата с возможностью отмены закрытия окна. Иначе закрывает /// окно без подтверждения. /// </summary> /// <returns>true - разрешено завершить приложение</returns> public bool OnCloseView() { if (ScoreManager.Current.ScoreValue <= 0) { return(true); } var result = ThreeButtonsMessageBox.Show("Отправить результат и выйти?", "Выйти из игры", "Отправить", "Выйти", "Отмена"); if (result == MessageBoxResult.Cancel) { // Пользователь отменил выход из приложения. return(false); } if (result == MessageBoxResult.No) { // Выход из приложения. _timer.Stop(); return(true); } // Отправляем результат, после чего выходим. EnterNameComponent.Show((s, e) => { ScoreManager.EndGame(false); _timer.Stop(); // Чтобы вновь не появился запрос на выход, сбрасываем текущий результат. ScoreManager.Current.ScoreValue = 0; Window.GetWindow(this).Close(); }); // Выход будет производится по окончанию ввода имени. return(false); }
private void RestartGame_Executed(object sender, ExecutedRoutedEventArgs eventArgs) { if (ScoreManager.Current.ScoreValue > 0) { var result = ThreeButtonsMessageBox.Show("Отправить результат и перезапустить игру?", "Перезапуск", "Отправить", "Заново", "Отмена"); if (result == MessageBoxResult.Cancel) { return; } if (result == MessageBoxResult.Yes) { // Отправка результата. EnterNameComponent.Show((s, ee) => { ScoreManager.EndGame(false); ScoreManager.Load(); int place = ScoreManager.GetPlace(); string text = (place > 0) ? "Вы на " + place + " месте в рейтинге" : ""; HiscoreComponent.Show(ScoreManager.HiScores, text); RestartGame(); }); return; } } // Перезапуск игры RestartGame(); }
/// <summary> /// Проверка окончания игры. /// </summary> private void CheckGameOver() { for (int j = 0; j < GameTable.Foundations * 2; j++) { if (!_foundationViews[j].Foundation.IsFinished()) { return; } } // Игра окончена - выводим финальную заставку. // Откатываем ходы в самое начало (не сбрасывая счётчики) _table.RestartGame(false); // Показываем в фоне историю действий игрока. var dt = new DispatcherTimer(); dt.Tick += (s, ee) => { _table.Redo(); RefreshView(); }; dt.Interval = new TimeSpan(500 * 10000); dt.Start(); // Запрашиваем имя игрока. EnterNameComponent.Show((s, ee) => { _table.EndGame(true); // Показываем ScoreManager.Load(); int place = ScoreManager.GetPlace(); string text = (place > 0) ? "Вы на " + place + " месте в рейтинге" : ""; HiscoreComponent.Show(ScoreManager.HiScores, text); dt.Stop(); NewGame(); }); }