Читать книгу Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 3: Программирование на Visual C# искусственного интеллекта (продолжение 2) - Валерий Алексеевич Карданов, Дарья Андреевна Самсонова, Наталья Сергеевна Кузьмина - Страница 19
Введение
1.17. Правила игры
ОглавлениеСформулируем правила данной компьютерной карточной (из 52 карт) игры в очко, которые далее будут также записаны в справочную форму Form2, выводимую после выбора команды Помощь из меню элемента управления MenuStrip на главной форме Form1.
1. Мы (пользователи) считаемся как один игрок и играем один на один с компьютером-банкомётом.
2. Мы устанавливаем в Банке начальную сумму денег, например, 500 долларов и определяем Ставку в игре, равную, например, 5 долларам. В каждой сдаче карт наш выигрыш будет увеличивать Банк, а проигрыш – уменьшать Банк на величину Ставки.
По окончании игры, если Банк будет больше 500, то мы выиграли у Банкомёта разницу между итоговым значением Банка и начальным значением Банка в 500 долларов.
Если же по окончании игры Банк будет меньше 500, то мы проиграли Банкомёту разницу между начальным значением Банка в 500 долларов и итоговым значением Банка.
Естественно, по методике данной главы в приводимом далее проекте мы можем запрограммировать другие варианты Банка, Ставки и условий игры.
3. В данном варианте игры, наша цель состоит в том, чтобы на экране набрать «в руку» карты с очками, как можно ближе к 21, но не превышая 21, и, к тому же, больше, чем у банкомёта. На экране сначала мы видим вверху карту банкомёта, а внизу – две наши карты с очками этих карт.
4. После запуска игры на форме появляются команда Себе и команда общего Меню (рис. 1.10), приведённый выше рисунок loading.gif, а затем фон игры в виде приведённого выше изображения bank.jpg и начальный счёт игры:
Банк: 500 Ставка: 5
Рис. 1.10. Исходное состояние (заставка) игры. Рис. 1.11. Команда «Ставка +” в Меню.
Если мы желаем изменить значение Ставки, то при помощи мыши раскрываем Меню элемента управления MenuStrip, в котором выбираем команду «Ставка +” или «Ставка -” (рис. 1.11). Это меню закрывается после его повторного выбора. Значения Банка и Ставки можно также изменить в приведённой далее программе. Для примера, оставляем заданные по умолчанию значения Банка и Ставки. Никаких игровых действий пока не производится.
5. Для начала игры нажимаем клавишу Enter.
В верхней части экрана (как свойство Text формы Form1) появляются начальные значения Банка и Ставки (рис. 1.12): Банк: 500 Ставка: 5
В верхней половине экрана появляется одна закрытая и одна открытая карта банкомёта, а в нижней – две карты игрока с очками этих карт (рис. 1.12). Звучит сопровождение в виде файла pj_bg_noise. wav тревожного шума окружающих игрока и банкомёта групп поддержки.
6. У нас два варианта действий. Видя наши исходные очки и очки банкомёта, либо,
по первому варианту, при помощи клавиши Enter (или команды «Карту мне» из Меню, см. предыдущий рисунок) нам взять следующую карту,
либо, по второму варианту, при помощи мыши выбрать в Меню команду Себе (попросить банкомёт брать карты себе).
Рис. 1.12. Карта банкомёта и две карты игрока. Рис. 1.13. Счёт игры изменился.
Мы помним (из предыдущего описания), что банкомёт будет набирать карты себе до тех пор, пока у него не наберётся ровно 17 или более очков. А у нас уже 14 очков. Конечно, можно дать команду Банкомёту брать карты себе (в надежде на перебор карт у него). Но мы решаемся, и при помощи клавиши Enter берём следующую карту. Но, увы, к нам пришла не та карта, и мы видим грустное сообщение «Вы перебрали» с итоговыми нашими очками 22 (рис. 1.13). Звучит недовольство с помощью звукового файла pj_busted. wav. В верхней части экрана Банк уменьшается на величину Ставки, и счёт игры становится не в нашу пользу таким:
Банк: 495 Ставка: 5
7. Для осуществления нового набора карт мы можем выбрать команду «Сдача карт» (при помощи мыши) или нажать клавишу Enter.
Нажимаем клавишу Enter.
Появляется фон игры в виде приведённого выше изображения bank.jpg и новый счёт игры не только в верхней части экрана (как свойство Text формы Form1), но и в центральной части экрана в виде крупного изображения, нарисованного методом DrawString (рис. 1.14):
Банк: 495 Ставка: 5
Так продолжается игра. Например, в середине игры нажимаем клавишу Enter. Появляются очередные начальные наборы карт у нас и Банкомёта (рис. 1.15).
8. У нас те же два варианта действий. Видя наши исходные очки и очки банкомёта, либо,
по первому варианту, при помощи клавиши Enter нам взять следующую карту,
либо, по второму варианту, при помощи мыши выбрать в Меню команду «Take a card to yourself» (попросить банкомёт брать карты себе).
Мы помним (из предыдущего описания), что банкомёт будет набирать карты себе до тех пор, пока у него не наберётся ровно 17 или более очков.
А у нас теперь всего 9 очков. Поэтому при помощи клавиши Enter смело берём следующую карту. К нам пришла пятёрка, появилось количество очков 14 наших карт (рис. 1.16).
Рис. 1.14. Заставка игры с новым счётом. Рис. 1.15. Очередные начальные наборы карт.
Рис. 1.16. Мы набрали 14 очков. Рис. 1.17. Мы набрали 17 очков.
9. При помощи клавиши Enter берём следующую карту. К нам пришла тройка, появилось количество очков 17 наших карт (рис. 1.17).
10. Ситуация непростая, т.к. набранное нами число 17 равно числу 17, на котором Банкомёт останавливает набор карт, и близко к числу 21, за которым начинается перебор карт.
У нас те же два варианта действий. Видя наши очки и очки банкомёта, либо,
по первому варианту, при помощи клавиши Enter нам взять следующую карту, но велика вероятность перебора карт (больше 21),
либо, по второму варианту, при помощи мыши в Меню выбрать команду «Take a card to yourself» (попросить банкомёт брать карты себе), с надеждой на перебор у него.
Решаемся, и при помощи клавиши Enter берём следующую карту. Но опять, увы, к нам пришла не та карта, и мы видим грустное сообщение «Вы перебрали» с итоговыми нашими очками (рис. 1.18).
Звучит недовольство с помощью звукового файла pj_busted. wav.
В верхней части экрана Банк уменьшается на величину Ставки, например, с 505 до 500 и счёт игры становится таким: Банк: 500 Ставка: 5
Рис. 1.18. У нас опять превышение очков. Рис. 1.19. Заставка игры с новым счётом.
11. Продолжаем игру, например, на каком-то этапе игры нажимаем клавишу Enter.
Появляется фон игры в виде приведённого выше изображения bank.jpg и новый счёт игры не только в верхней части экрана (как свойство Text формы Form1), но и в центральной части экрана в виде крупного изображения, нарисованного методом DrawString (рис. 1.19):
Банк: 490 Ставка: 5
12. Для осуществления нового набора карт мы можем выбрать команду «Сдача карт» (при помощи мыши) или нажать клавишу Enter.
Нажимаем клавишу Enter. Появляется новый начальный набор карт у нас и Банкомёта.
Дальше поступаем аналогично, сначала сами набираем (или не набираем, оставляя начальный вариант) карты до удовлетворяющего нас результата, а затем даём команду Банкомёту набирать карты себе.
Теперь кратко опишем возможные типичные варианты игры.
13. При помощи клавиши Enter набираем (или не набираем, оставляя начальный счёт) карты до удовлетворяющего нас результата, например, до 16 (рис. 1.20) и при помощи мыши даём команду Банкомёту набирать карты себе.
Банкомёт, к нашему неудовольствию, набирает 20 очков, и мы видим неприятное для нас сообщение «Вы потеряли».
В верхней части экрана Банк уменьшается на величину Ставки не в нашу пользу.
14. При помощи клавиши Enter получаем новую сдачу карт, однако Банкомёт, к нашему неудовольствию, сразу же набирает 21 очко (или коротко, «очко»), и мы видим неприятное для нас сообщение «Вы потеряли» (рис. 1.21).
В верхней части экрана Банк уменьшается на величину Ставки не в нашу пользу.
15. При помощи клавиши Enter набираем (или не набираем, оставляя начальный счёт) карты до удовлетворяющего нас результата, например, до 18 (рис. 1.22) и при помощи мыши даём команду Банкомёту набирать карты себе.
Рис. 1.20. Мы проиграли. Рис. 1.21. У Банкомёта – очко.
Рис. 1.22. Мы выиграли. Рис. 1.23. Превышение очков у Банкомёта.
Банкомёт, к нашей радости, набирает всего 17 очков, и мы видим приятное для нас сообщение «Вы выиграли».
В верхней части экрана Банк увеличивается на величину Ставки в нашу пользу.
Звучат аплодисменты в наш адрес в виде файла pj_claps. wav.
16. При помощи клавиши Enter набираем (или не набираем, оставляя начальный счёт) карты до удовлетворяющего нас результата, например, до 20 (рис. 1.23) и при помощи мыши даём команду Банкомёту набирать карты себе.
Банкомёт, к нашей радости, набирает 22 очка, и мы видим приятное для нас сообщение «Превышение очков (у Банкомёта)».
В верхней части экрана Банк увеличивается на величину Ставки в нашу пользу.
17. При помощи клавиши Enter набираем (или не набираем, оставляя начальный счёт) карты до удовлетворяющего нас результата, например, до 17 (рис. 1.24) и при помощи мыши даём команду Банкомёту набирать карты себе.
Рис. 1.24. Равное количество очков. Рис. 1.25. Туз с Дамой – это PocketJack.
Банкомёт, к нашей радости, набирает также 17 очков. Согласно правилам, при равенстве очков победителем считается тот, кто первым набрал это количество очков, т.е. игрок. И мы видим приятное для нас сообщение «Вы выиграли». Это правило можно перепрограммировать в приведённой далее программе, установив, например, неизменность Банка при ничьей. В верхней части экрана Банк увеличивается на величину Ставки в нашу пользу.
18. При помощи клавиши Enter получаем новую сдачу карт, и, к нашей радости, мы сразу же набираем 21 очко (или коротко, «очко»), причём не просто «очко». Просто «очко» – это Туз с десяткой. А Туз с Валетом, Дамой, Королём или десяткой даёт 21 очко и называется PocketJack, который бьёт даже 21 очко у соперника. И мы видим приятное для нас сообщение «Вы выиграли» (рис. 1.25).
В верхней части экрана Банк увеличивается на величину Ставки в нашу пользу.
Звучит радостная мелодия со словами PocketJack в виде файла pj_pj. wav (в этом имени pj и есть сокращение слова PocketJack).
19. Напомним, что
13 карт 1, 2, 3, …,13 первой масти – это трефы (club),
13 карт 14, 15, 16, …, 26 второй масти – это бубны (diamond),
13 карт 27, 28, 29, …, 39 третьей масти – это черви (heart),
13 карт 40, 41, 42, …, 52 последней четвертой масти – это пики (spade).
Первая карта любой масти – Туз (Ace – A).
Значения очков каждой карты следующие:
Туз (Ace – A) = 1 или 11;
как 1-я, 2-я или 3-я карта – Туз даёт 11 очков;
с Валетом, Дамой и Королём, Туз даёт 11 очков и в сумме 10+11=21 эти две карты называются PocketJack, который бьёт карты соперника (игрока или Банкомёта), даже набравшие 21;
как 4-я и последующая карта – Туз даёт 1 очко;
цифры на картах от 2 до 9 означают очки этой карты;
карта с числом 10, Валет (Jack – J), Дама (Queen – Q), Король (King – K) = по 10 очков.
20. Банкомёт сдаёт карты с единственной колоды карт.
21. Банкомёт будет сдавать себе карты, пока не достигнет 17 или больше.
22. Первую карту банкомёта можно запрограммировать так, что она будет сдаваться лицевой стороной вниз и невидимой.
23. Мы должны или оставить Ставку по умолчанию, или установить новую вашу Ставку до сдачи карт (в последнем случае используем команды «Ставка +” и «Ставка -” в Меню для элемента управления MenuStrip).
24. Наше значение Банка все время показывается на экране. Если значение Банка станет ниже нашей Ставки, нам предложат начать новую игру.
25. Когда мы набрали карты, мы можем приостановить игру, выбрав в Меню команду Останов. Банкомёт покажет свою карту (если до этого она была невидима).
26. Схема оплаты:
проигравший платит победителю по договорённости, например, 1:1.
27. Чтобы начать новую игру, необходимо при помощи мыши в Меню выбрать команду Выход, а затем ещё раз нажать клавишу Enter.
28. Если в игре по очереди участвуют несколько игроков, то победителем считается игрок, который, например, за одно и то же для всех игроков время набрал больший Банк. Здесь возможны различные варианты, в зависимости от наших желаний.
29. Игра в очко желает вам успехов во всех играх.
На основании этих правил игры можно разработать другие правила этой или другой подобной игры с внесением соответствующих изменений в приведённую далее программу (если будет необходимость в этих изменениях).