buttonShowAnswers AdvancedVersion.Left = answerbuttons_beginX
buttonShowAnswers_SimpleVersion.Left = _
buttonShowAnswers_AdvancedVersion.Left + _
answerButtons dx + dx_betweenButtons
pictureBoxGameBoard.Left = 0
pictureBoxGameBoard.Width = 240
pictureBoxGameBoard.Height = 172
buttonAnswer0.Left = answerbuttons_beginX
buttonAnswer1.Left = buttonAnswer0.Left + answerButtons_dx + _
dx_betweenButtons
buttonAnswer1.Top = buttonAnswer0.Top
'Следующий ряд
buttonAnswer2.Left = buttonAnswer0.Left
buttonAnswer2.Top = buttonAnswer0.Top + answerButtons_dy + _
dy_betweenButtons
buttonAnswer3.Left = buttonAnswer2.Left + answerButtons_dx + _
dx_betweenButtons
buttonAnswer3.Top = buttonAnswer2.Top
'Следующий ряд
buttonAnswer4.Left = buttonAnswer2.Left
buttonAnswer4.Top = buttonAnswer2.Top + answerButtons_dy + _
dy_betweenButtons
buttonAnswer5.Left = buttonAnswer4.Left + answerButtons_dx + _
dx_betweenButtons
buttonAnswer5.Top = buttonAnswer4.Top
End Sub
'-----------------------------------------------------------------------
'Вспомогательная функция, которая позволяет задавать состояние видимости
'кнопок, отображающих ответы из словаря
'-----------------------------------------------------------------------
Private Sub SetAnswerButtonVisibility(ByVal visibleState _
As Boolean)
buttonAnswer0.Visible = visibleState
buttonAnswer1.Visible = visibleState
buttonAnswer2.Visible = visibleState
buttonAnswer3.Visible = visibleState
buttonAnswer4.Visible = visibleState
buttonAnswer5.Visible = visibleState
End Sub
'-----------------------------------------------------------------
'Вспомогательная функция, вызываемая для задания свойств видимости
'некоторых элементов управления
'-----------------------------------------------------------------
Private Sub SetDifficultyButtonVisibility(ByVal visibleState _
As Boolean)
buttonShowAnswers_AdvancedVersion.Visible = visibleState
buttonShowAnswers_SimpleVersion.Visible = visibleState
End Sub
'-----------------------------------------------------------------------
'Вспомогательная функция, которая позволяет задавать состояние видимости
'кнопок, отображающих ответы из словаря
'-----------------------------------------------------------------------
Private Sub SetAnswerButtonEnabled(ByVal enabledState _
As Boolean)
buttonAnswer0.Enabled = enabledState
buttonAnswer1.Enabled = enabledState
buttonAnswer2.Enabled = enabledState
buttonAnswer3.Enabled = enabledState
buttonAnswer4.Enabled = enabledState
buttonAnswer5.Enabled = enabledState
End Sub
'-----------------------------------------------------------------
'Задает текст в текстовом окне и кнопках,
'необходимых для формулирования вопросов.
'
'В случае практической реализации эта функция должна просматривать
'вопросы динамически
'-----------------------------------------------------------------
Private Sub SetTextForVocabularyQuestion()
setQuestionText("What is the English word for 'der Mensch'?")
buttonAnswer0.Text = "Four"
buttonAnswer1.Text = "Person"
buttonAnswer2.Text = "Three"
buttonAnswer3.Text = "To Jump"
buttonAnswer4.Text = "Newspaper"
buttonAnswer5.Text = "Brother"
End Sub
'Вызывается для оценки варианта ответа, выбранного пользователем
Private Sub evaluateMultipleChoiceAnswer(ByVal buttonClicked _
As Button, ByVal selection As Integer)
'Примечание: В практической реализации правильный номер ответа
'определяется динамически и не всегда соответствует "кнопке #1"
'Если выбранный пользователем вариант ответа не является правильным,
'отменить доступ к нажатой кнопке
If (selection <> 1) Then
'Выбранный вариант ответа является неправильным
buttonClicked.Enabled = False
Else
'Пользователь выбрал правильный ответ, продолжить игру
StateChangeForGameUI(GameUIState.waitForNextQuestion)
End If
End Sub
'Абстракция, задающая текст вопросов
Sub setQuestionText(ByVal textIn As String)
textBoxAskQuestion.Text = textIn
End Sub
'----------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Пользователь желает увидеть следующий вопрос
'----------------------------------------------------------------
Private Sub buttonAskQuestion_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles buttonAskQuestion.Click
SetTextForVocabularyQuestion()
StateChangeForGameUI(GameUIState.waitForUserToStateKnowledge)
End Sub
'---------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ:
'Пользователь желает ответить на отображенный вопрос и сообщить, какой
'наиболее сложный уровень является для него приемлемым
'---------------------------------------------------------------------
Private Sub buttonShowAnswers AdvancedVersion_Click( _
ByVal sender As Object, ByVal e As System.EventArgs) _
Handles buttonShowAnswers_AdvancedVersion.Click
'Установить состояние игры для отображения вариантов выбора
StateChangeForGameUI( _
GameUIState.waitForUserToAnswerMultipleChoice)
End Sub
'---------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ:
'Пользователь желает ответить на отображенный вопрос и сообщить, какой
'наиболее легкий уровень является для него приемлемым
'---------------------------------------------------------------------
Private Sub buttonShowAnswers_SimpleVersion_Click( _
ByVal sender As Object, ByVal e As System.EventArgs) _
Handles buttonShowAnswers_SimpleVersion.Click
'Установить состояние игры для отображения вариантов выбора
StateChangeForGameUI( _
GameUIState.waitForUserToAnswerMultipleChoice)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer0_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer0.Click
evaluateMultipleChoiceAnswer(buttonAnswer0, 0)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer1_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer1.Click
evaluateMultipleChoiceAnswer(buttonAnswer1, 1)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer2_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer2.Click
evaluateMultipleChoiceAnswer(buttonAnswer2, 2)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer3_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer3.Click
evaluateMultipleChoiceAnswer(buttonAnswer3, 3)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer4_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer4.Click
evaluateMultipleChoiceAnswer(buttonAnswer4, 4)
End Sub
'ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа
Private Sub buttonAnswer5_Click(ByVal sender As Object, ByVal _
e As System.EventArgs) Handles buttonAnswer5.Click
evaluateMultipleChoiceAnswer(buttonAnswer5, 5)
End Sub
Листинг 13.2. Динамическое создание элементов управления на форме во время выполнения
'-------------------------------------
'Счетчик количества создаваемых кнопок
'-------------------------------------
Private m_nextNewButtonIndex As Integer
'---------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Обработчик щелчка на кнопке, которая
' имеется на нашей форме.
'
'Эта функция создает новую кнопку, присоединяет ее к нашей форме
'и подключает обработчик события щелчка для нее
'---------------------------------------------------------------
Private Sub buttonCreateNewButtons_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles buttonCreateNewButtons.Click
'Впоследствии мы начнем создавать новые кнопки, начиная
'снизу экрана, поэтому ограничиваем их количество восемью
If (m_nextNewButtonIndex > 8) Then
Return
End If
'----------------------------------------------------
'Создать кнопку (еще не присоединенную к нашей форме)
'установить ее местоположение, размеры и текст
'----------------------------------------------------
Const newButtonHeight As Integer = 15
Dim newButton As System.Windows.Forms.Button
newButton = New System.Windows.Forms.Button
newButton.Width = 100
newButton.Height = newButtonHeight
newButton.Left = 2
newButton.Top = (newButtonHeight + 2) * m_nextNewButtonIndex
newButton.Text = "New Button " + _
m_nextNewButtonIndex.ToString()
'----------------------------------------------------
'Присоединить обработчик к событию щелчка для данного