Литмир - Электронная Библиотека
Содержание  
A
A

10. Попробуйте изменить компоновку элементов управления по своему усмотрению. Вероятно, часть элементов управления пользовательского интерфейса имело бы смысл поместить выше игрового поля, а часть — ниже. Возможно, некоторые элементы должны располагаться поверх игрового поля, тогда как другие — справа или слева от него. Внося соответствующие изменения в код конечного автомата, вы легко сможете проверить и уточнить свои предположения.

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

//--------------------------------------------------------------------------

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

//--------------------------------------------------------------------------

private enum GameUIState {

 startScreen = 1,

 waitForNextQuestion = 2,

 waitForUserToStateKnowledge = 4,

 waitForUserToAnswerMultipleChoice = 8

}

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

private GameUIState m_GameUIState;

//==========================================================================

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

//==========================================================================

private void StateChangeForGameUI(GameUIState newGameUIState) {

 m_GameUIState = newGameUIState;

 switch (newGameUIState) {

 case GameUIState.startScreen:

  buttonAskQuestion.Visible = true;

  buttonAskQuestion.Text = "Start";

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

  textBoxAskQuestion.Visible = false;

  SetAnswerButtonVisibility(false);

  SetDifficultyButtonVisibility(false);

  break;

 case GameUIState.waitForNextQuestion:

  setQuestionText("List answer details here... \r\n" +

   "Lots of space to write...\r\n" +

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

                        //элементами управления

  textBoxAskQuestion.Height = pictureBoxGameBoard.Top - 2;

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

      //элементами управления

  textBoxAskQuestion.Top = pictureBoxGameBoard.Top + pictureBoxGameBoard.Height + 2;

  textBoxAskQuestion.Height = this.Height - textBoxAskQuestion.Top;

#endif

  break;

 case GameUIState.waitForUserToStateKnowledge:

  SetTextForVocabularyQuestion();

  textBoxAskQuestion.Visible = true;

  buttonAskQuestion.Visible = false;

  SetAnswerButtonVisibility(false);

  SetDifficultyButtonVisibility(true);

#if PLAYFIELD_ON_BOTTOM //ПОЛЕ ИГРЫ располагается под пользовательскими

                        //элементами управления

  textBoxAskQuestion.Height = buttonShowAnswers_AdvancedVersion.Top - 2;

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

      //элементами управления

  textBoxAskQuestion.Top = buttonShowAnswers_AdvancedVersion.Top + buttonShowAnswers_AdvancedVersion.Height + 2;

  textBoxAskQuestion.Height = this.Height - textBoxAskQuestion.Top;

#endif

  break;

 case GameUIState.waitForUserToAnswerMultipleChoice:

  buttonAskQuestion.Visible = false;

  SetDifficultyButtonVisibility(false);

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

  SetAnswerButtonEnabled(true);

  SetAnswerButtonVisibility(true);

#if PLAYFIELD_ON_BOTTOM //ПОЛЕ ИГРЫ располагается под пользовательскими

                       //элементами управления

  textBoxAskQuestion.Height = buttonAnswer0.Top - 2;

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

      //элементами управления.

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

  //эффективно

  textBoxAskQuestion.Top = buttonAnswer5.Top + buttonAnswer5.Height + 2;

  textBoxAskQuestion.Height =this.Height - textBoxAskQuestion.Top;

#endif

  break;

//======================================================================

143
{"b":"947732","o":1}