Портирование судоку с Windows 8.1 на Windows Phone 8

Для начала создаем проект шаблона Windows Phone

Windows Phone Application Template

В этом решении я скопировал необходимые элементы управления из проекта Windows 8.1 в проект Windows Phone. Это решение не является лучшим, но оно самое быстрое. В следующих статьях я покажу как делать кроссплатформенные решения.

Сейчас же вернемся к портированию приложения. В игре на телефоне решено было сделать постраничную навигацию. Создано 4 страницы:

страницы судоку

Игра начинается со страницы GamePage. Если нет сохраненной игры - необходимо отправить пользователя на экран создания новой игры:

  protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            GameState game = SettingsProvider.LoadSavedGame();
            if (game == null)
            {
                NavigationService.Navigate(new Uri("/Pages/NewGame.xaml", UriKind.Relative));
            }
            else
            {
               //...
            }
        }

Работа с файлами и сессиям в Windows 8.1

В шаблоне Windows 8.1 автоматически будет создан класс SuspensionManager, который реализует механизм сохранения сессий. Тогда в классе страницы необходимо определить метод NavigationHelperLoadState и NavigationHelperSaveState. Код NavigationHelperLoadState показан ниже, сохранения состояния происходит похожим образом.

 private async void NavigationHelperLoadState(object sender, LoadStateEventArgs e)
        {
            try
            {
                if (SuspensionManager.SessionState.ContainsKey("game-data"))
                {
                    string previousGame = SuspensionManager.SessionState["game-data"] as string;
                    if (!string.IsNullOrEmpty(previousGame))
                    {
                        GameStateModel game = GameStateModel.FromJson(previousGame);
                        if (game != null)
                        {
                            LoadGameToBoard(game.ToGameState());
                        }
                    }
                }
            }
            catch (FileNotFoundException fileNotFound)
            {
            }
            catch (Exception)
            {
            }
        }

Работа с файлами и сессиям в Windows Phone 8

На телефоне работа с файлами немного отличается. Есть такое понятия, как IsolatedStorageSettings. Понятие это пришло из Silverlight версии 2. Как понятно из названия этот тип предназначен для хранения файлов и данных изолированно на локальной файловой системе. Это значит, что другое приложение, помимо вашего не получит доступ к этим данным.

Код загрузки данных об игре:

   public static GameState LoadSavedGame()
        {
            try
            {
                IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
                if (settings.Contains(SavedGame))
                {
                    string previousGame = settings[SavedGame] as string;
                    if (!string.IsNullOrEmpty(previousGame))
                    {
                        GameStateModel game = GameStateModel.FromJson(previousGame);
                        if (game != null)
                        {
                            return game.ToGameState();
                        }
                    }
                }

            }
            catch (Exception exception)
            {

            }

            return null;
        }

Найденные особенности

Windows Phone 8 не позволяет сохранять шрифты в ресурсах xaml. Такой код на платформе WP8 не валиден:

   <!-- Fonts -->
    <FontFamily x:Key="ThemeFontFamily">Segoe UI Light</FontFamily>
    <FontWeight x:Key="ThemeFontWeight">SemiLight</FontWeight>

Поэтому пришлось разделить файлы ресурсов и очистить лишнее из WP8. 

Работа с разметкой

Очень порадовала работа с разметкой. Во-первых нет необходимости делать верстку приложения для 3-х видов как в Win 8.1 (Full, Filled, Snapped). Важно правильно сделать верстку для экрана в целом. В судоку поддерживается только вертикальное положение экрана (горизонтальное поддерживаться на 99% не будет). 

После адаптации верстки, стилей и размеров объектов необходимо протестировать на различных устройствах и экранах.

Windows Phone 8

 Протестировав все функции - публикуем в Windows Phone Store

Судоку+

Комментарии

comments powered by Disqus