Чтение онлайн

на главную - закладки

Жанры

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

Чтобы гарантировать, что расположенная в стеке колода карт не может использоваться в низменных целях (для подтасовок в игре), флажок сообщает пользователю объекта класса CardShoe, действительно ли в данный момент используется расположенная в стеке колода карт. Разработчик, который использует объект этого класса, может проверить этот флажок и гарантировать, что игра не использует расположенную заранее определённым образом в стеке колоду карт.

Проверяя приложение, мы можем создавать сравнительно редкие сочетания карт, типа blackjacks, просто обеспечивая расположенную в стеке колоду,

как показано в следующем коде:

public CardShoe(byte[] stackedDeck)

{

decks = stackedDeck;

testShoe = true;

}

Расположенная в стеке колода даст в игре Блэк Джека обоим игрокам. Последовательность карты 1 представляет первую карту первой масти в колоде, которая является тузом. Поскольку каждая масть содержит 13 карт, 14-я карта представляет первую карту второй масти, которая является также тузом. В полной игре между игроком (player) и банкомётом (banker) наличие с начала колоды последовательностей карт 1 и 14 приводит и к игроку, и к банкомёту, первоначально начавшему игру, туза. Последовательности карт 11 и 25 представляют Джек (валета) от первых и вторых мастей соответственно, таким образом, каждый игрок получает Джек (валета) как их вторая карта. В игре и игрок (player), и банкомёт (banker) получают по тузу, комбинация Джека (валета) приходит к обоим игрокам, имеющим Блэк Джеки.

1.8. Схема запуска игры

Когда начинается игра, приложение очищает (Clear) “руку игрока” (player's hand) и добавляет две колоды карт следующим образом:

CardHand playerHand = new CardHand;

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);

В этом коде, для простоты, не принимается во внимание чередование раздачи карт между игроком и банкомётом. Это будет учтено далее в полной программе игры.

Далее в проекте имеется команда “Hit Me” меню maneMenu1. После выбора этой команды, компьютер выдаёт игроку дополнительную карту, если набранное им количество очков меньше 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;

}

}

Отметим, что метод BlackJackScoreHand каждый раз возвращает счёт “руки игрока” (playerHand). После этого метод Invalidate перерисовывает форму Form1, точнее, перерисовывает карты и обновляет счёт обоих игроков. Аналогично в меню maneMenu1 имеется команда “Себе”, по которой банкомёт набирает карты себе (после игрока).

1.9. Рисование очков игроков

Методы Windows для рисования текстов хороши для простых сообщений, но для игры

пользователь ожидает что-то более красивое. Например, мы можем рисовать текст на фоне какого-либо рисунка, чтобы выделить текст. Мы можем осуществить это, неоднократно рисуя текст в множестве позиций вокруг его желательного местоположения, перед размещением реального текста на самом верху фона. Чтобы сделать это, был написан ряд утилит, как показано в следующем коде:

static private SolidBrush messageBrush =

new SolidBrush(Color.Black);

public static void BigText(string message, int x, int y,

Color back, Color fore,

Font messageFont, Graphics g)

{

int i;

messageBrush.Color = back;

for (i = 1; i < 3; i++)

{

g.DrawString(message, messageFont, messageBrush,

x – i, y – i);

g.DrawString(message, messageFont, messageBrush,

x – i, y + i);

g.DrawString(message, messageFont, messageBrush,

x + i, y – i);

g.DrawString(message, messageFont, messageBrush,

x + i, y + i);

}

messageBrush.Color = fore;

g.DrawString(message, messageFont, messageBrush, x, y);

}

Этот метод BigText снабжён ссылкой на объект графики, чтобы использовать её для рисования текста (message) соответствующим шрифтом (messageFont) в соответствующей позиции. Задаётся также цвет для приоритетных и фоновых версий текста. Метод рисует множество фоновых версий текста перед помещением приоритетной версии на вершине. Метод является статическим, поэтому для вызова не нуждается в объекте класса Utilities, а вызывается напрямую после имени класса, как показано в следующем коде:

Utilities.BigText("Dealer Bust",

20, 80, Color.Black, Color.Yellow, messageFont, g);

В этом коде сообщение "Dealer Bust!" означает “Банкомёт перебрал карты”.

Объект messageFont класса Font создан в начале приложения и используется для всего рисунка сообщения.

Далее при разработке программы игры мы сначала стандартно создадим шаблон метода Paint (после двойного щелчка по имени события Paint в панели Properties для формы Form1), затем в тело этого шаблона запишем наш код и будем вызывать этот метод каждый раз, когда экран должен быть перерисован. С точки зрения проектирования, считается не очень хорошей практикой выполнять прикладные функции непосредственно в обработчике события Paint. Поэтому для рисования изображений, наше приложение в шаблоне метода Form1_Paint будет вызывать специальный метод paintForm, как показано в следующем коде:

private void Form1_Paint(object sender, PaintEventArgs e)

{

paintForm(e.Graphics);

}

1.10.

Управление

игрой

Теперь мы можем использовать вышеупомянутые классы, чтобы осуществить большинство видов игры в карты. Рассмотрим, как в целом осуществляется игра, давая возможность сначала игроку (player) сделать первые ходы (набрать карты), а затем – банкомёту (или дилеру – dealer) сделать ответные ходы (набрать свои карты).

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

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Возвращение Безумного Бога 2

Тесленок Кирилл Геннадьевич
2. Возвращение Безумного Бога
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 2

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Приручитель женщин-монстров. Том 2

Дорничев Дмитрий
2. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 2

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Как я строил магическую империю 3

Зубов Константин
3. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 3

Конструктор

Семин Никита
1. Переломный век
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Конструктор

Эволюционер из трущоб. Том 4

Панарин Антон
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 4

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Повелитель механического легиона. Том IV

Лисицин Евгений
4. Повелитель механического легиона
Фантастика:
фэнтези
технофэнтези
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том IV