|
Игра с кубикомВ данной статье описана компьютерная программа, моделирующая игру с игральной костью, условия которой изложены в статье “Цифровые корни”. Будем рассматривать вариант игры, в котором участвуют компьютер и человек. В программе использованы следующие величины: n — предельное число очков (до которого ведется игра); выпало — число, выпавшее на кубике при первом “бросании”; всего — общее число просуммированных очков; начинает и очередной — номер участника, соответственно начинающего игру и делающего очередной ход (1 — компьютер, 2 — человек); выбрал1 — число на гранях, выбранное компьютером при очередном ходе; выбрал2 — то же, вторым участником игры; верхнее — число, оказавшееся на верхней грани кубика (при первом “бросании” или после очередного хода участников игры). Общая схема программы: Условимся на этапе 1 (см. схему программы в колонке слева) число n выбирать случайным образом из диапазона 30–40. Для этого используем функцию rnd: n := 30 + rnd(11) Также случайным образом определим номер участника, начинающего игру (“бросающего” кубик): начинает := 1 + rnd(2) и выпавшее число: выпало := 1 + rnd(6) Действия на этапе 4 можно описать в виде оператора цикла с постусловием: цикл Выбор числа компьютером будем проводить в соответствии со стратегией, которую обсудим ниже. Перед выбором участниками игры того или иного числа будем выводить перечень чисел, которые можно выбрать. Ясно, что этот перечень зависит от текущего числа на верхней грани кубика (значения верхнее и 7 – верхнее выбирать нельзя1). Вывод перечня оформим в виде отдельной вспомогательной процедуры2. алг Вывод_возможных_чисел(арг цел
верхнее_число) Примечание. Можно объединить некоторые значения величины верхнее_число в пары (использовав сложные условия). Как сформировать пары, продумайте самостоятельно. В случае ввода человеком недопустимого значения числа выбрал2 на экран будем выводить соответствующее сообщение и предложим повторить ввод (применим оператор цикла с постусловием). Правильное значение числа выбрал2 удовлетворяет условию: выбрал2 > 0 и выбрал2 < 7 и выбрал2 <> верхнее и выбрал2 <> 7 – верхнее. После выбора числа (“поворота кубика”) каждым участником игры необходимо менять значения величин всего, верхнее и очередной. Этап 5 можно оформить в виде: |Определение победителя вывод нс, "Игра закончилась!" Осталось обсудить механизм выбора числа компьютером при его ходе. Будем идти, так сказать, от простого3 к сложному и в данной статье применим стратегию, которую назовем “квазиоптимальной”. Ее суть состоит в следующем. 1. Найдем ближайшее большее по сравнению с всего число, обеспечивающее выигрыш (как это сделать — опишем ниже); имя этой величины — большее_оптимальное. 2. Определим значение величины разность: разность := большее_оптимальное – всего 3. Исследуем три варианта значения разность: 1) если разность = 9, то, как указывалось в статье “Цифровые корни”, такая позиция для компьютера является проигрышной (если, конечно, второй участник знает выигрышную стратегию). В этом случае будем выбирать минимально возможное число (1 или 2). Соответствующий фрагмент программы выглядит так: если разность = 9 2) если разность < 7, то можно получить следующую выигрышную позицию, выбрав на кубике число разность, если это допустимо. В случае невозможности такого выбора также выберем минимально возможное число, например: при разность = 6: и т.п.; 3) если разность = 8 или если разность = 7, то одним ходом следующую выигрышную позицию получить нельзя — здесь также будем выбирать минимально возможное число. Определение “квазиоптимального” хода компьютера целесообразно оформить в виде вспомогательной функции (ее имя ниже — Выбор_компьютера). Прежде чем приводить такую функцию4, заметим, что ее аргументами являются величины n, всего, верхнее и представим для анализа фрагмент функции, относящийся к определению значения большее_оптимальное: большее_оптимальное := n Функция на школьном алгоритмическом языке: алг цел Выбор_компьютера(арг цел
n, всего, верхнее) … (см. выше) |Определяем значение разность |Рассматриваем три варианта значения |разность Вся программа имеет вид: алг Игра_с_кубиком Конечно, применение “квазиоптимальной” стратегии не всегда сможет обеспечить компьютеру выигрыш, даже если после первого бросания кубика или после какого-то хода позиция будет для него выигрышной. Так сказать, “полностью оптимальная” стратегия игры компьютера обсуждается в статье “О выигрышной стратегии компьютера в игре с кубиком” в этом выпуске ниже. Ознакомьтесь, пожалуйста, с ней и выполните предложенное в статье задание (см. также рубрику “Внимание! Конкурс”). Другие задания для самостоятельной работы Разработайте программу, моделирующую рассмотренную игру с кубиком, в двух вариантах: 1) аналогичном описанному; 2) в котором играют два человека. В каждом из них предусмотрите возможность того, что один из участников игры может сдаться (например, путем ввода числа 0). Разработанные программы (можно и одну) присылайте в редакцию. Все приславшие правильные программы будут награждены дипломами. |