KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Иво Салмре, "Программирование мобильных устройств на платформе .NET Compact Framework" бесплатно, без регистрации.
Перейти на страницу:

   thisAssembly.GetManifestResourceStream( _

   assemblyName + ".Hank_LeftRunl.bmp"))

  m_CaveMan_Bitmap4 = New System.Drawing.Bitmap( _

   thisAssembly.GetManifestResourceStream( _

   assemblyName + ".Hank_LeftRun2.bmp"))


  'Добавить их в коллекцию

  m_colCaveManBitmaps = New System.Collections.ArrayList

  m_colCaveManBitmaps.Add(m_CaveMan_Bitmap1)

  m_colCaveManBitmaps.Add(m_CaveMan_Bitmap2)

  m_colCaveManBitmaps.Add(m_CaveMan_Bitmap3)

  m_colCaveManBitmaps.Add(m_CaveMan_Bitmap4)

 End If


 'Возвратить коллекцию

 Return m_colCaveManBitmaps

End Function

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 'ПОЛЕ ИГРЫ располагается над пользовательскими элементами управления

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

  'эффективно

  textBoxAskQuestion.Top = buttonAnswer5.Top + _

   buttonAnswer5.Height + 2

  textBoxAskQuestion.Height = Me.Height - _

   textBoxAskQuestion.Top

#End If

 End Select

End Sub


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

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

'Сюда входят все элементы, позиции которых остаются фиксированными.

'Изменения в остальные свойства внесет конечный автомат пользовательского

'интерфейса

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

Private Sub SetStartControlPositionAndState()

 pictureBoxGameBoard.Width = 240

 pictureBoxGameBoard.Height = 176


 'Установить размеры кнопок множественного выбора вариантов ответов

 Const answerButtons_dx As Integer = 117

 Const answerButtons_dy As Integer = 18


 buttonAnswer0.Width = answerButtons_dx

 buttonAnswer0.Height = answerButtons_dy

 buttonAnswer1.Size = buttonAnswer0.Size

 buttonAnswer2.Size = buttonAnswer0.Size

 buttonAnswer3.Size = buttonAnswer0.Size

 buttonAnswer4.Size = buttonAnswer0.Size

 buttonAnswer5.Size = buttonAnswer0.Size

 buttonShowAnswers_AdvancedVersion.Width = answerButtons_dx

 buttonShowAnswers_AdvancedVersion.Height = 24

 buttonShowAnswers_SimpleVersion.Size = _

  buttonShowAnswers_AdvancedVersion.Size


 'Расстояние (в пикселях) между соседними кнопками

 Const dx_betweenButtons As Integer = 3

 Const dy betweenButtons As Integer = 2

 Const answerbuttons_beginX As Integer = 3


 'Создать задний план для нашего изображения, чтобы мы видели

 'его в процессе тестирования

 Dim gameBoard As System.Drawing.Bitmap

 gameBoard = New System.Drawing.Bitmap( _

  pictureBoxGameBoard.Width, pictureBoxGameBoard.Height)


 Dim gameboard_gfx As System.Drawing.Graphics

 gameboard_gfx = System.Drawing.Graphics.FromImage(gameBoard)

 gameboard_gfx.Clear(System.Drawing.Color.Yellow)


 Dim myPen As System.Drawing.Pen = New System.Drawing.Pen( _

  System.Drawing.Color.Blue)

 gameboard_gfx.DrawRectangle(myPen, 2, 2, _

  gameBoard.Width - 4, gameBoard.Height - 6)

 myPen.Dispose()

 gameboard_gfx.Dispose()

 pictureBoxGameBoard.Image = gameBoard


 'Разместить текстовое окно, в котором содержатся задаваемые вопросы,

 'а также подробные ответы для пользователей

 textBoxAskQuestion.Left = 0

 textBoxAskQuestion.Width = 240


 buttonAskQuestion.Width = 64

 buttonAskQuestion.Height = 20

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

 Const answerbuttons_beginY As Integer = 42

 Const showanswers_beginY As Integer = 77

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

 'Задать кнопки выбора вариантов "Easy" или "Hard" режима игры

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

 buttonShowAnswers_AdvancedVersion.Top = showanswers_beginY

 buttonShowAnswers_SimpleVersion.Top = showanswers_beginY


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

 'Задать набор вариантов ответов

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

 'Задать элемент управления, по которому будут выравниваться

 'все остальные элементы управления

 buttonAnswer0.Top = answerbuttons_beginY


 'Поместить PictureBox под элементами управления

 pictureBoxGameBoard.Top = _

  (answerButtons dy + dy betweenButtons) * 3 + _

  answerbuttons_beginY


 buttonAskQuestion.Top = 0

 buttonAskQuestion.Left = 174

 textBoxAskQuestion.Top = 0

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

 Const answerbuttons_beginY As Integer = 174

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

 'Задать кнопки выбора вариантов "Easy" или "Hard" режима игры

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

 buttonShowAnswers_AdvancedVersion.Top = answerbuttons_beginY

 buttonShowAnswers_SimpleVersion.Top = answerbuttons_beginY


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

 'Задать набор вариантов ответа

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

 'Задать элемент управления, по которому будут выравниваться

 'все остальные элементы управления

 buttonAnswer0.Top = answerbuttons_beginY

 pictureBoxGameBoard.Top = 0

 buttonAskQuestion.Top = answerbuttons_beginY

 buttonAskQuestion.Left = 174

#End If

 buttonShowAnswers AdvancedVersion.Left = answerbuttons_beginX

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*