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

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


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

открывается пустое окно редактирования кода, в которое записываем следующий код.

      Листинг 1.11. Новый файл CardEngine.cs.

      using System;

      using System.Collections;

      using System.Drawing;

      namespace PocketJack

      {

      /// <summary>

      /// Provides the behaviours required to manage and draw cards

      /// </summary>

      public class Card

      {

      /// <summary>

      /// The number of the card, in the range 1 to 52

      /// </summary>

      public byte CardNo;

      /// <summary>

      /// Indicates if the card is to be drawn face up.

      /// True by default.

      /// </summary>

      public bool FaceUp = true;

      /// <summary>

      /// The images of the cards. Stored for all the cards.

      /// The image with number 0 is the

      /// back pattern of the card

      /// </summary>

      static private Image[] cardImages = new Bitmap[53];

      /// <summary>

      /// The attribute to be used when drawing the card

      /// to implement transpancy

      /// </summary>

      static public System.Drawing.Imaging.ImageAttributes

      cardAttributes;

      /// <summary>

      /// Used when loading card images prior to drawing

      /// </summary>

      static private System.Reflection.Assembly execAssem;

      /// <summary>

      /// Sets up the color and attribute values.

      /// </summary>

      static Card()

      {

      cardAttributes =

      new System.Drawing.Imaging.ImageAttributes();

      cardAttributes.SetColorKey(Color.Green, Color.Green);

      execAssem =

      System.Reflection.Assembly.GetExecutingAssembly();

      }

      /// <summary>

      /// Scores for each of the cards in a suit

      /// </summary>

      static private byte[] scores =

      new byte[] {       11,      //ace

       2,3,4,5,6,7,8,9,10, //spot cards

       10,10,10}; //jack, queen, king

      /// <summary>

      /// Picture information for each card in a suit

      /// </summary>

      static private bool[] isPicture =

      new bool[] {       false,      //ace

       false,false,false,false,false,false,

      false,false,false, //spot cards

       true,true,true}; //jack, queen, king

      /// <summary>

      /// Names of the suits, in the order that of the suits

      /// in the number sequence

      /// </summary>

      static private string[] suitNames =

      new string[] { "club", "diamond", "heart", "spade" };

      /// <summary>

      /// Names of individual cards, in the order of the cards

      /// in a suit

      /// </summary>

      static private string[] valueNames =

      new string[] {"Ace", "Deuce","Three","Four","Five","Six",

      "Seven","Eight","Nine","Ten", "Jack","Queen","King" };

      /// <summary>

      /// Returns the value in points of a given card,

      /// according to BlackJack rules

      /// </summary>

      public int BlackJackScore

      {

      get

      {

      return scores[(CardNo – 1) % 13];

      }

      }

      /// <summary>

      /// Returns true if the card is a picture

      /// (i.e. jack, queen or king)

      /// </summary>

      public bool IsPicture

      {

      get

      {

      return isPicture[(CardNo – 1) % 13];

      }

      }

      /// <summary>

      /// Returns text of the suit of this card

      /// </summary>

      public string Suit

      {

      get

      {

      return suitNames[(CardNo – 1) / 13];

      }

      }

      /// <summary>

      /// Returns the text of the value of this card

      /// </summary>

      public string ValueName

      {

      get

      {

      return valueNames[(CardNo – 1) % 13];

      }

      }

      /// <summary>

      /// Returns true if this is a red card

      /// </summary>

      public bool Red

      {

      get

      {

      int suit = (CardNo – 1) / 13;

      return ((suit == 1) || (suit == 2));

      }

      }

      /// <summary>

      /// Returns true if this is a black card

      /// </summary>

      public bool Black

      {

      get

      {

      return !Red;

      }

      }

      /// <summary>

      /// Returns an image which can be used to draw this card

      /// </summary>

      public Image CardImage

      {

      get

      {

      int