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

Жарков Валерий

Шрифт:

/// Provides a container for a number of cards.

/// May be used to draw the cards and compute their score.

/// </summary>

public class CardHand : ArrayList

{

/// <summary>

/// Used as a destination of teh draw action

/// </summary>

private static Rectangle drawRect;

/// <summary>

/// Draws the hand on the graphics.

/// </summary>

/// <param name="g">graphics to draw with</param>

/// <param name="startx">left edge of first card</param>

/// <param name="starty">top of first card</param>

/// <param name="gapx">x gap between each card</param>

/// <param name="gapy">y gap between each card</param>

public void DrawHand(Graphics g, int startx, int starty,

int gapx, int gapy)

{

drawRect.X = startx;

drawRect.Y = starty;

foreach (Card card in this)

{

drawRect.Width = card.CardImage.Width;

drawRect.Height = card.CardImage.Height;

g.DrawImage(

card.CardImage, // Image

drawRect, // destination rectange

0, // srcX

0, // srcY

card.CardImage.Width, // srcWidth

card.CardImage.Height, // srcHeight

GraphicsUnit.Pixel, // srcUnit

Card.cardAttributes); // ImageAttributes

drawRect.X += gapx;

drawRect.Y += gapy;

}

}

/// <summary>

/// Computes the score of the hand

/// </summary>

/// <returns>the value of the score</returns>

public 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>

  • Читать дальше
  • 1
  • ...
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: