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

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;

}

}

///

/// Computes the score of the hand

///

/// the value of the score

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;

}

}

///

/// Contains a number of card decks

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

///

public class CardShoe

{

private int noOfDecks = 1;

private byte[] decks;

private int nextCard;

private bool testShoe = false;

///

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

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

///

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;

}

///

/// Gets the next card number from the deck

///

/// The number of the next card

public byte NextCardNo

{

if (nextCard == decks.Length)

{

shuffleShoe;

}

return decks[nextCard++];

}

///

/// Gets the next card from the deck.

///

/// A new instance of the card

public Card DealCard

{

return new Card(NextCardNo);

}

///

/// Constructs a shoe containing a number of decks

///

///

public CardShoe(int noOfDecks)

{

this.noOfDecks = noOfDecks;

makeShoe;

shuffleShoe;

testShoe = false;

}

///

/// Constructs a shoe containing a single deck

///

public CardShoe

: this(1)

{

}


///

/// Creates a stacked deck for test purposes.

///

/// array of bytes

public CardShoe(byte[] stackedDeck)

{

decks = stackedDeck;

testShoe = true;

}

}

}

В панели Solution Explorer выполняем правый щелчок по имени проекта и в контекстном меню выбираем Add, New Item. В панели Add New Item выделяем шаблон Code File, в окне Name записываем имя нового файла с расширением *.cs и щёлкаем кнопку Add. В проект (и в панель Solution Explorer) добавляется этот файл, открывается пустое окно редактирования кода, в которое записываем следующий код.

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

using System;

namespace PocketJack

{

///

/// Summary description for Betting.

///

public class Pot

{

private int betValueChangeValue;

private int betValue;

private int potValue;

private const int INITIAL_POT_VALUE = 500;

private const int INITIAL_BET_CHANGE_VALUE = 5;

public int BetValue

{

get

{

return betValue;

}

}

public int PotValue

{

get

{

return potValue;

}

}

public void ResetPot

{

betValueChangeValue = INITIAL_BET_CHANGE_VALUE;

betValue = INITIAL_BET_CHANGE_VALUE;

potValue = INITIAL_POT_VALUE;

}

public void CheckPot

{

if (betValue > potValue)

{

if (System.Windows.Forms.MessageBox.Show(

"Insufficient funds for the bet." +

"Do you want to reload the pot?",

"Bank",

System.Windows.Forms.MessageBoxButtons.YesNo,

System.Windows.Forms.MessageBoxIcon.Question,

System.Windows.Forms.

MessageBoxDefaultButton.Button1) ==

System.Windows.Forms.DialogResult.Yes)

{

ResetPot;

}

else

{

betValue = potValue;

}

}

}

public void DoIncreaseBet

{

betValue = betValue + betValueChangeValue;

CheckPot;

}

public void DoDecreaseBet

{

if (betValue >= betValueChangeValue)

{

betValue = betValue – betValueChangeValue;

}

}

public void PlayerWins

{

// win back 2 * our stake

potValue = potValue + betValue;

//potValue = potValue + betValue; //We commented out.

}

public void HouseWins

{

CheckPot;

}

public void DoPushBet

{

// put the betValue back in the potValue

potValue = potValue + betValue;

}

public void DoPlaceBet

{

potValue = potValue – betValue;

}

public Pot

{

ResetPot;

}

}

}

После этого добавления в панели Solution Explorer должны быть файлы, показанные на рисунке выше. Дважды щёлкая по имени файла, любой файл можно открыть, изучить и редактировать.

В этих файлах использованы XML-комментарии (XML comment), где XML – Extensible Markup Language – расширяемый язык разметки, типа:

///

/// Description of a variable:

///

который состоит из начального тэга (start tag):

///

и конечного тэга (end tag):

///

между которыми записывается сам комментарий:

/// Описание переменной:

/// Description of a variable:

Перейти на страницу:

Похожие книги

ЕГЭ-2024. История. 16 тематических вариантов. ЕГЭ близко. 862-2020 гг
ЕГЭ-2024. История. 16 тематических вариантов. ЕГЭ близко. 862-2020 гг

Сборник соответствует 3 требованиям:Задания в сборнике тематические, т.е. соответствуют той или иной теме по хронологии. Выдержать это требование было очень сложно, но именно такие задания наиболее полезны для начинающих.Задания соответствуют формату ЕГЭ, насколько это возможно, учитывая п. 1. Например, в каждом варианте ЕГЭ должны быть задания про ВОВ. Но зачем выполнять их человеку, который только начал проходить Древнюю Русь? Поэтому мы заменили эти задания на те, которые соответствуют периоду, но тоже будут полезны для практики. Зато общая нагрузка при выполнении варианта будет сопоставима с тем, что будет на реальном экзамене, и ты сможешь реально оценивать свои силы.Задания примерно соответствуют ЕГЭ по уровню сложности. Конечно это понятие растяжимое, но мы постарались соблюсти баланс.В этом сборнике представлены 16 вариантов заданий по периодам с древности до наших дней.

Анатолий Анатольевич Сухарев , Виктория Александровна Юршина

Школьные учебники / Образование и наука
Все произведения школьной программы в кратком изложении. 9 класс
Все произведения школьной программы в кратком изложении. 9 класс

Помимо краткого содержания произведений (но вместе с тем достаточно подробного, чтобы ответить на любой вопрос), в книге содержатся конспекты критических статей, биографические сведения об авторах, анализ произведений и многое другое. Основной задачей авторов пособия было предоставить читателям то, что им может понадобиться при изучении литературы в школе. Поэтому в книгу вошли все произведения, составляющие школьную программу, а также те, которые изучаются факультативно («по выбору учащихся», «по выбору учителя»). Книга будет незаменимым помощником при повторении пройденного материала, а также при сдаче экзаменов.В конце пособия отдельным разделом помещены сведения по теории литературы, изучаемые в данном классе. В книгу также входят программные произведения зарубежных авторов, их биографические сведения и краткий очерк творчества.

Игорь Олегович Родин

Школьные учебники / Образование и наука