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

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


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

счёт игрока превышает 21, игрок совершил перебор карт (the player busts), и состояние игры изменяется, чтобы отобразить это. Иначе, экран обновляется, что вызывает перерисовку и добавление на экран новой карты.

      Когда игрок достиг счёта, которым он доволен, игрок может приостановить (stay) набор новой карты, как показано в следующем коде:

      void playerStays ()

      {

      dealerHoleCard. FaceUp = true;

      mode = GameMode.DealerActive;

      this.Refresh ();

      System.Threading.Thread.Sleep (750);

      while (dealerHand. BlackJackScoreHand () <17)

      {

      dealerHand.Add(shoe.DealCard ());

      this.Refresh ();

      System.Threading.Thread.Sleep (750);

      }

      if (dealerHand. BlackJackScoreHand ()> 21)

      {

      mode = GameMode.DealerBust;

      pot.PlayerWins ();

      showPot ();

      return;

      }

      if (playerHand. BlackJackScoreHand ()>

      dealerHand. BlackJackScoreHand ())

      {

      mode = GameMode.PlayerWon;

      pot.PlayerWins ();

      showPot ();

      return;

      }

      if (playerHand. BlackJackScoreHand () <

      dealerHand. BlackJackScoreHand ())

      {

      mode = GameMode.DealerWon;

      //Мы дописываем в оригинале:

      pot.DoPlaceBet ();

      pot. HouseWins ();

      showPot ();

      return;

      }

      if (playerHand. BlackJackScoreHand () ==

      dealerHand. BlackJackScoreHand ())

      {

      mode = GameMode. Push;

      pot.DoPushBet ();

      showPot ();

      return;

      }

      }

      Этот метод должен изменить игровое состояние на DealerActive и затем закончить набор карт банкомётом. Он также переворачивает тайную карту банкомёта лицом вверх, чтобы эту карту можно было увидеть. Игра банкомёта организована по циклу, который неоднократно даёт новые карты банкомёту, если счёт банкомёта меньше 17. Банкомёт обязан запускать игру этим механистическим способом. Приложение содержит паузу на 750 миллисекунд между каждой картой банкомёта, чтобы добавить волнение в игру (в этой паузе также звучит тревожная музыка). Вызов метода Refresh гарантирует, что игрок информирован относительно каждой последующей карты банкомёта.

      Если банкомёт получает счёт, больше 21, состояние изменено на DealerBust (Банкомёт перебрал карты), и выполнение метода заканчивается. Иначе, метод решает, кто выиграл и устанавливает соответствующее состояние игры. Тогда игрок может выбрать команду «new game» для начала новой игры, которая снова устанавливает «руки» игрока и банкомёта и соответствующее состояние игры.

      1.13. Контекстно-зависимый пользовательский интерфейс

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

      void doEnter ()

      {

      switch (mode)

      {

      case GameMode. LoadingDisplay:

      break;

      case GameMode.PlacingBets:

      startPlay ();

      break;

      case GameMode.PlayerActive:

      playerHits ();

      break;

      case GameMode. PocketJack:

      case GameMode.PlayerWon:

      case GameMode.PlayerBust:

      case GameMode.DealerActive:

      case GameMode.DealerWon:

      case GameMode.DealerBust:

      case GameMode. Push:

      startHand ();

      break;

      }

      }

      Этот