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

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

Жанры

Программирование мобильных устройств на платформе .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("Неизвестное состояние!");

}

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

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

Эпоха Опустошителя. Том VII

Павлов Вел
7. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VII

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Последний Паладин. Том 9

Саваровский Роман
9. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 9

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Телохранитель Генсека. Том 3

Алмазный Петр
3. Медведев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Телохранитель Генсека. Том 3

Наномашины, Кошмар Академии! Том 10

Новиков Николай Васильевич
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Наномашины, Кошмар Академии! Том 10

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Этот мир не выдержит меня. Том 2

Майнер Максим
2. Первый простолюдин в Академии
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Этот мир не выдержит меня. Том 2

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая

На границе империй. Том 10. Часть 13

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 13

1941, Великая Отечественная катастрофа: Итоги дискуссии

Коллектив авторов
Документальная литература:
военная документалистика
6.25
рейтинг книги
1941, Великая Отечественная катастрофа: Итоги дискуссии