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

ЖАНРЫ

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

End Class

Примеры к главе 13 (проектирование пользовательского интерфейса)

Листинг 13.1. Использование конечного автомата для экспериментов с двумя различными вариантами компоновки пользовательского интерфейса

#Const PLAYFIELD_ON_BOTTOM = 0 'Отобразить ПОЛЕ ИГРЫ под ПИ

'#Const PLAYFIELD_ON_BOTTOM = 1 'Отобразить ПОЛЕ ИГРЫ над ПИ

'-------------------------------------------------

'ОБРАБОТЧИК СОБЫТИЙ: Вызывается при загрузке формы

'-------------------------------------------------

Private Sub Form1_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

'Задать совместно используемые свойства нашего визуального интерфейса

SetStartControlPositionAndState

'Задать динамические свойства, исходя из того, в какое состояние

'игры мы входим

StateChangeForGameUI(GameUIState.startScreen)

End Sub

'---------------------------------------------------------------------------

'Конечный автомат, который управляет отображением кнопок, скрываемых вручную

'---------------------------------------------------------------------------

Private Enum GameUIState

startScreen = 1

waitForNextQuestion = 2

waitForUserToStateKnowledge = 4

waitForUserToAnswerMultipleChoice = 8

End Enum

'Текущее состояние игры

Private m_GameUIState As GameUIState

'==========================================================================

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

'==========================================================================

Private Sub StateChangeForGameUI(ByVal newGameUIState As _

GameUIState)

m_GameUIState = newGameUIState

Select Case (newGameUIState)

Case GameUIState.startScreen

buttonAskQuestion.Visible = True

buttonAskQuestion.Text = "Start"

'Скрыть текстовое окно

textBoxAskQuestion.Visible = False

SetAnswerButtonVisibility(False)

SetDifficultyButtonVisibility(False)

Case GameUIState.waitForNextQuestion

setQuestionText("List answer details here... " + vbCrLf + _

"Lots of space to write..." + vbCrLf + _

"Waiting for user to select next question...")

textBoxAskQuestion.Visible = True

buttonAskQuestion.Text = "Next"

buttonAskQuestion.Visible = True

'Убедиться в том, что кнопка отображается на переднем плане

buttonAskQuestion.BringToFront

SetAnswerButtonVisibility(False)

SetDifficultyButtonVisibility(False)

#If PLAYFIELD_ON_BOTTOM <> 0 Then 'ПОЛЕ ИГРЫ располагается под ПИ

textBoxAskQuestion.Height = pictureBoxGameBoard.Top - 2

#Else 'ПОЛЕ ИГРЫ располагается над пользовательскими элементами управления

textBoxAskQuestion.Top = pictureBoxGameBoard.Top + _

pictureBoxGameBoard.Height + 2

textBoxAskQuestion.Height = Me.Height - _

textBoxAskQuestion.Top

#End If

Case GameUIState.waitForUserToStateKnowledge

SetTextForVocabularyQuestion

textBoxAskQuestion.Visible = True

buttonAskQuestion.Visible = False

SetAnswerButtonVisibility(False)

SetDifficultyButtonVisibility(True)

#If PLAYFIELD_ON_BOTTOM <> 0 Then 'ПОЛЕ ИГРЫ располагается под ПИ

textBoxAskQuestion.Height = _

buttonShowAnswers_AdvancedVersion.Top - 2

#Else 'ПОЛЕ ИГРЫ располагается над пользовательскими элементами управления

textBoxAskQuestion.Top = _

buttonShowAnswers_AdvancedVersion.Top + _

buttonShowAnswers_AdvancedVersion.Height + 2

textBoxAskQuestion.Height = Me.Height - _

textBoxAskQuestion.Top

#End If

Case GameUIState.waitForUserToAnswerMultipleChoice

buttonAskQuestion.Visible = False

SetDifficultyButtonVisibility(False)

'Сделать кнопки доступными, чтобы пользователь мог щелкать на них

SetAnswerButtonEnabled(True)

SetAnswerButtonVisibility(True)

#If PLAYFIELD_ON_BOTTOM <> 0 Then

'ПОЛЕ ИГРЫ располагается под ПИ

textBoxAskQuestion.Height = buttonAnswer0.Top - 2

#Else 'ПОЛЕ ИГРЫ располагается над пользовательскими элементами управления

'Разместить текстовое окно таким образом, чтобы экран использовался

'эффективно

Поделиться с друзьями: