В Visual Basic .NET мне особенно нравятся возможности, относящиеся к обработке событий; ключевые слова AddHandler и Handles (используемые в приведенных ниже кодах) гораздо более элегантны и декларативны, чем их текущие варианты, используемые в С#. Поскольку удобнее всего работать с примерами, которые написаны на наиболее привычном языке, я поместил в данное приложение VB.NET-версии почти всех листингов, приведенных в основной части книги.
Не включены в приложение только листинги примеров, которые, либо в силу малости их размера, либо в силу того, что они должны быть одинаково хорошо понятны разработчикам, принадлежащим любому лагерю, автор счел слишком тривиальными, чтобы тратить время на их трансляцию. Везде, где только возможно, соблюдается практика записи кода, принятая в Visual Basic, в том смысле, что приведенный ниже код является не результатом прямой трансляции кода, написанного на языке C#, а скорее его "VB-версией"; в то же время, оба вида примеров функционально эквивалентны друг другу, и тем, для кого представляет интерес сравнение возможностей языков Visual Basic и C#, чтобы решить для себя, какой из них выбрать, сделать это не составит труда. Удачного программирования!
Примеры к главе 5 (конечные автоматы)
Листинг 5.1. Простой код конечного автомата для игры с множественным выбором
Option Explicit On
Class MyStateMachineClass
Private Enum GameState
StartScreen
AskQuestion
CongratulateUser
ScoldUser
End Enum
Private m_CurrentGameStateAs GameState
'---------------------------------------------------------------------
'Конечный автомат, воздействующий на пользовательский интерфейс и
'управляющий переходами приложения в другие состояния в соответствии с
'текущим режимом работы пользователя
'-----------------
----------------------------------------------------
Private Sub StateChangeForGame(ByVal newGameUIState _
As GameState)
'Определить, в какое состояние переходит приложение
Select Case (newGameUIState)
Case GameState.StartScreen
'Если переход в данное состояние осуществляется из состояния,
'для которого это запрещено, возбудить исключение
If ((m_CurrentGameState <> GameState.CongratulateUser) _
AndAlso (m_CurrentGameState <> GameState.ScoldUser)) Then
Throw New System.Exception("Запрещённое изменение состояния!")
End If
'ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:
' 1. Скрытие (Hide), отображение (Show) и перемещение (Move)
' элементов управления пользовательского интерфейса
' 2. Настройка переменных/состояний игры, соответствующих
' данному режиму работы
' SetUpGameStateForStartScreen()
Case GameState.AskQuestion
'Если переход в данное состояние осуществляется из состояния,
'для которого это запрещено, возбудить исключение
If ((m_CurrentGameState <> GameState.StartScreen) _
AndAlso (m_CurrentGameState <> GameState.CongratulateUser) _
AndAlso (m_CurrentGameState <> GameState.ScoldUser)) Then
Throw New System.Exception("Запрещённое изменение состояния!")
End If
'ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:
' 1. Скрытие (Hide), отображение (Show) и перемещение (Move)
' элементов управления пользовательского интерфейса
' 2. Настройка переменных/состояний игры, соответствующих
' данному режиму работы
'
' SetUpGameStateForAskQuestion()
Case GameState.CongratulateUser
'Если переход в данное состояние осуществляется из состояния,
'для которого это запрещено, возбудить исключение
If (m_CurrentGameState <> GameState.AskQuestion) Then
Throw New System.Exception("Запрещённое изменение состояния!")
End If
'ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:
' 1. Скрытие (Hide), отображение (Show) и перемещение (Move)
' элементов управления пользовательского интерфейса
' 2. Настройка переменных/состояний игры, соответствующих
' данному режиму работы
'
' SetUpGameStateForCongratulateUser()
Case GameState.ScoldUser
'Если переход в данное состояние осуществляется из состояния,
'для которого это запрещено, возбудить исключение
If (m_CurrentGameState <> GameState.AskQuestion) Then
Throw New System.Exception("Запрещённое изменение состояния!")
End If
'ЧТО СДЕЛАТЬ: Поместите сюда код, выполняющий следующие операции:
' 1. Скрытие (Hide), отображение (Show) и перемещение (Move)
' элементов управления пользовательского интерфейса
Читать дальше