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

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

СКАЧАТЬ int BlackJackScoreHand()

      {

      int score = 0;

      int aces = 0;

      foreach (Card card in this)

      {

      score += card.BlackJackScore;

      if (card.BlackJackScore == 11)

      {

      aces++;

      }

      }

      while ((score > 21) && (aces > 0))

      {

      score -= 10;

      aces–;

      }

      return score;

      }

      }

      /// <summary>

      /// Contains a number of card decks

      /// which can be dealt one at a time.

      /// </summary>

      public class CardShoe

      {

      private int noOfDecks = 1;

      private byte[] decks;

      private int nextCard;

      private bool testShoe = false;

      /// <summary>

      /// True if the deck is "stacked",

      /// i.e. was created from a byte array

      /// </summary>

      public bool TestShoe

      {

      get

      {

      return testShoe;

      }

      }

      private void makeShoe()

      {

      decks = new byte[noOfDecks * 52];

      int cardPos = 0;

      for (int i = 0; i < noOfDecks; i++)

      {

      for (byte j = 1; j < 53; j++)

      {

      decks[cardPos] = j;

      cardPos++;

      }

      }

      nextCard = 0;

      }

      private void shuffleShoe()

      {

      if (!testShoe)

      {

      System.Random rand = new Random();

      byte swap;

      int p1, p2;

      for (int i = 0; i < decks.Length; i++)

      {

      p1 = rand.Next(decks.Length);

      p2 = rand.Next(decks.Length);

      swap = decks[p1];

      decks[p1] = decks[p2];

      decks[p2] = swap;

      }

      }

      nextCard = 0;

      }

      /// <summary>

      /// Gets the next card number from the deck

      /// </summary>

      /// <returns>The number of the next card</returns>

      public byte NextCardNo()

      {

      if (nextCard == decks.Length)

      {

      shuffleShoe();

      }

      return decks[nextCard++];

      }

      /// <summary>

      /// Gets the next card from the deck.

      /// </summary>

      /// <returns>A new instance of the card</returns>

      public Card DealCard()

      {

      return new Card(NextCardNo());

      }

      /// <summary>

      /// Constructs a shoe containing a number of decks

      /// </summary>

      /// <param name="noOfDecks"></param>

      public CardShoe(int noOfDecks)

      {

      this.noOfDecks = noOfDecks;

      makeShoe();

      shuffleShoe();

      testShoe = false;

      }

      /// <summary>

      /// Constructs a shoe containing a single deck

      /// </summary>

      public CardShoe()

      : this(1)

      {

      }

      /// <summary>

      /// Creates a stacked deck for test purposes.

      /// </summary>

      /// <param name="stackedDeck">array of bytes</param>

      public CardShoe(byte[] stackedDeck)

      {

      decks СКАЧАТЬ