Чтение онлайн

на главную - закладки

Жанры

Программирование мобильных устройств на платформе .NET Compact Framework

Салмре Иво

Шрифт:

Каждый оператор case соответствует одному из вариантов изменения состояния и должен содержать вызов функции, выполняющей всю необходимую для этого работу. Подобного рода централизация и инкапсуляция управления состояниями является одним из наиболее мощных аспектов использования конечных автоматов; все важные изменения состояний приложения определяются и обрабатываются централизованно в одном месте программы.

Листинг 5.1. Простой код конечного автомата для игры с множественным выбором

class MyStateMachineClass {

 private enum GameState {

StartScreen, AskQuestion, CongratulateUser, ScoldUser

 }

 private GameState m_CurrentGameState;

 //---------------------------------------------------------------------

 //Конечный автомат, воздействующий на пользовательский интерфейс

 //и управляющий переходами приложения в другие состояния в соответствии

 //c текущим режимом работы пользователя

 //---------------------------------------------------------------------

 private void StateChangeForGame(GameState newGameUIState) {

//Определить, в какое состояние переходит приложение

switch(newGameUIState) {

case GameState.StartScreen:

//Если переход в данное состояние осуществляется из состояния,

//для которого это запрещено, возбудить исключение

if ((m_CurrentGameState != GameState.CongratulateUser) && (m_CurrentGameState != GameState.ScoldUser)) {

throw new System.Exception("Запрещённый переход!");

}

//ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:

// 1. Скрытие (Hide), отображение (Show) и перемещение (Move)

// элементов управления пользовательского интерфейса

// 2. Настройка переменных/состояния игры, соответствующих

// данному режиму работы

//

// SetUpGameStateForStartScreen;

break;

case GameState.AskQuestion:

//Если переход в данное состояние осуществляется из состояния,

//для которого это запрещено, возбудить исключение

if ((m_CurrentGameState != GameState.StartScreen)

&& (m_CurrentGameState != GameState.CongratulateUser)

&& (m_CurrentGameState !=GameState.ScoldUser)) {

throw new System.Exception("Запрещённый переход!");

}

//ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:

// 1. Скрытие (Hide), отображение (Show) и перемещение (Move)

// элементов управления пользовательского интерфейса

// 2. Настройка переменных/состояния игры, соответствующих

// данному режиму работы

//

// SetUpGameStateForAskQuestion;

break;

case GameState.CongratulateUser:

//Если переход в данное состояние осуществляется из состояния,

//для которого это запрещено, возбудить исключение

if (m_CurrentGameState != GameState.AskQuestion) {

throw new System.Exception("Запрещённый переход!");

}

//ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:

// 1. Скрытие (Hide), отображение (Show) и перемещение (Move)

// элементов управления пользовательского интерфейса

// 2. Настройка переменных/состояния игры, соответствующих

// данному режиму работы

//

// SetUpGameStateForCongratulateUser;

break;

case GameState.ScoldUser:

//Если переход в данное состояние осуществляется из состояния,

//для которого это запрещено, возбудить исключение

if (m_CurrentGameState != GameState.AskQuestion) {

throw new System.Exception("Запрещённый переход!");

}

//ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:

// 1. Скрытие (Hide), отображение (Show) и перемещение (Move)

// элементов управления пользовательского интерфейса

// 2. Настройка переменных/состояния игры, соответствующих

// данному режиму работы

//

// SetUpGameStateForScoldUser;

break;

default:

throw new System.Exception("Неизвестное состояние!");

}

//Сохранить запрошенное новое состояние в качестве текущего

Поделиться:
Популярные книги

Я не царь. Книга XXIV

Дрейк Сириус
24. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я не царь. Книга XXIV

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Тринадцатый XII

NikL
12. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
7.00
рейтинг книги
Тринадцатый XII

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Старый, но крепкий 7

Крынов Макс
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 7

Бандит

Щепетнов Евгений Владимирович
1. Петр Синельников
Фантастика:
фэнтези
7.92
рейтинг книги
Бандит

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Слезы Эйдена 1

Владимиров Денис
11. Глэрд
Фантастика:
боевая фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Слезы Эйдена 1

Принадлежать им

Зайцева Мария
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Принадлежать им

Шайтан Иван 6

Тен Эдуард
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.00
рейтинг книги
Шайтан Иван 6

Перешагнуть пропасть

Муравьёв Константин Николаевич
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Перешагнуть пропасть

Дважды одаренный

Тарс Элиан
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Дважды одаренный

Граф Книга третья

Первухин Андрей Евгеньевич
10. Ученик
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Граф Книга третья