Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1. Валерий Алексеевич Жарков
Чтение книги онлайн.

Читать онлайн книгу Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 8: Программирование на Visual C# искусственного интеллекта. Издание 2. Продолжение 1 - Валерий Алексеевич Жарков страница 8

СКАЧАТЬ и карт. Очки банкомёта не появляются, когда игрок набирает карты.

      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) внизу приведённого кода переводит игру в активное состояние, когда игрок готов принять участие в игре.

      Приложение сдаёт карты в том же самом порядке, как в реальной игре с банкомётом и игроком, по очереди берущими карты. Нет никакой программируемой причины для замены между банкомётом и игроком, но в реальной игре проще "расположить в стеке" колоду, если сдача карт не чередуется.

      1.12. Набор карт игроком

      Приложение содержит метод, который вызывается, когда игрок хочет набрать себе карты. Он получает дополнительную карту, только если счёт – меньше 21, как показано в следующем коде:

      void playerHits()

      {

      if (playerHand.BlackJackScoreHand() < 21)

      {

      playerHand.Add(shoe.DealCard());

      if (playerHand.BlackJackScoreHand() > 21)

      {

      //We write in the original:

      pot.DoPlaceBet();

      pot.HouseWins();

      showPot();

      mode = GameMode.PlayerBust;

      }

      this.Invalidate();

      }

      }

      Если счёт игрока превышает 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();

СКАЧАТЬ