Валерий Алексеевич Жарков

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 3: Программирование на Visual C# искусственного интеллекта (продолжение 2)


Скачать книгу

типа GameMode сохраняет состояние игры. Эта переменная управляет перерисовкой экрана. Когда состояние игры изменяется, должен произойти ряд действий. Лучший способ получить это поведение состоит в том, чтобы осуществить управление посредством свойства следующим образом:

      GameMode modeValue;

      GameMode mode

      {

      get

      {

      return modeValue;

      }

      set

      {

      switch (value)

      {

      case GameMode. LoadingDisplay:

      BetMinusToolStripMenuItem1.Enabled = false;

      BetPlusToolStripMenuItem. Enabled = false;

      HitMeToolStripMenuItem. Enabled = false;

      StayToolStripMenuItem. Text = «Point»;

      StayToolStripMenuItem. Enabled = false;

      MenuToolStripMenuItem. Text = «21»;

      MenuToolStripMenuItem. Enabled = false;

      break;

      …

      modeValue = value;

      this.Invalidate ();

      }

      }

      Когда свойству задано значение value, выполняется часть набора свойства после ключевого слова set. Когда код набора set выполнен, переключатель switch устанавливает приложение нужным способом. Например, когда состояние свойства изменено в состояние PlayerActive, активизированы команды меню Hit и Stay. Везде, где происходит изменение состояния в основном приложении, пользовательский интерфейс находится всегда в нужном состоянии. Это также означает, что мы должны изменить конфигурацию игры только в одном месте кода. Отметим, что, когда состояние игры изменено, вызывается метод Invalidate для обновления экрана.

      Состояние игры (game state) также управляет рисованием, когда вызывается событие Paint, как показано в следующем коде:

      void paintForm (Graphics g)

      {

      switch (mode)

      {

      …

      case GameMode.PlayerActive:

      dealerHand. DrawHand (g, 10, 30, 80, 25);

      playerHand. DrawHand (g, 10, 135, 20, 25);

      Utilities.BigText (playerHand. BlackJackScoreHand ().

      ToString (), 140, 150, Color. Black,

      Color. Yellow, messageFont, g);

break;

      …

      Этот код с методом Paint показывает, как приложение управляет выводом сообщений и карт. Очки банкомёта не появляются, когда игрок набирает карты.

      1.11. Набор карт банкомётом

      Банкомёт (dealer) должен получить две карты, одна из которых появляется лицевой стороной вниз (face down). Мы достигаем этого при использовании следующего кода:

      // clear the hands

      playerHand.Clear ();

      dealerHand.Clear ();

      // deal the face down hole card

      dealerHoleCard = shoe.DealCard ();

      dealerHoleCard. FaceUp = false;

      dealerHand.Add (dealerHoleCard);

      // deal the first player card

      playerHand.Add(shoe.DealCard ());

      // deal the second dealer card (face up)

      dealerHand.Add(shoe.DealCard ());

      // deal the second player card

      playerHand.Add(shoe.DealCard ());

      …

      mode = GameMode.PlayerActive;

      Приложение сохраняет ссылку на «тайную – hole» карту банкомёта, которая инициализируется лицевой стороной вниз, когда начинается набор карт. Это достигается заданием свойству FaceUp (Лицевая сторона вверх) значения, равное False. Когда экран будет перерисовываться, будет нарисована также и обратная сторона «тайной – hole» карты банкомёта. Когда банкомёт начинает набор карт, свойству FaceUp (Лицевая сторона вверх) задаётся значение True, и изображение на лицевой стороне карты становится видимым. Отметим, что изменение режима (mode) внизу приведённого кода переводит