Программирование игр и головоломок
Шрифт:
Игра 15. Игра Доминика.
Уж здесь-то я могу ручаться, что это игра для начинающих. Ее для своего малюсенького микрокомпьютера придумал мой племянник Доминик. Она напоминает «плату за страх» (игра 9). Начальное положение игры — то же (рис. 4). Доминик взял прямоугольник поменьше и уменьшил число препятствий. Для начала он поставил препятствия на определенные места.
Правила игры изменены. Убийцы не вооружены огнестрельным оружием, у них — только ножи. Они не могут добраться до игрока иначе, чем достигнув занимаемого им поля. Игрок перемещается на 1 шаг в любом направлении (по горизонтали, по вертикали, по диагонали) с условием
Игра осталась очень интересной. Проблема нахождения игрока и убийцы на смежных линиях больше не стоит. Если убийца оказывается рядом с игроком в каком-либо направлении, он его хватает на следующем ходе, если игрок не удаляется от него при своем ходе…
4. Игры со стратегией
В этом разделе мы предлагаем программировать игры, главная трудность которых заключается в том, чтобы дать компьютеру хорошую стратегию. Разделение па игры со стратегией и без нее до некоторой степени произвольно. Уже по поводу случайных чисел мы предлагали игру со стратегией (игра 2). Конечно, совершенно необходимо, чтобы вы могли хоть немного развлечься… Некоторые из игр, с которыми вы познакомитесь, требуют не намного больше размышлений, чем игра в лис и кур. На самом деле это во многом зависит от особенностей вашего ума: стратегия, очевидная для одного, является головоломкой для другого.
Можно также упрекнуть некоторые игры в том, что они теряют всякую привлекательность, поскольку компьютер располагает выигрывающей стратегией. Если партнер компьютера не знает этой стратегии, то он проигрывает все партии. Если же он ее знает, то тот, кто делает выигрывающий начальный ход, неминуемо становится победителем.
Наконец, некоторые игры настолько распространены, что я постеснялся их здесь предлагать: такова, например, игра Отелло. Не пытайтесь браться за шашки или шахматы. Слишком трудно!
В этом разделе вам предстоит встретиться с двумя трудностями:
— найти стратегию для компьютера;
— запрограммировать ее.
Именно потому, что есть так много опубликованных плохих программ, я, не ссылаясь на эти публикации, добавил игру Нима, Сочувствую всем тем, кто может оказаться обиженным. Но тот, кто публикует программы, всегда рискует. Таковы правила этой игры.
Игра 16. Чтобы войти в курс дела,
Это — крайне простая игра, которую Роуз-Бол [BAL] относит к средневековым играм, поскольку ей действительно более 500 лет.
Вы выкладываете на стол 50 спичек. Каждый игрок по очереди вынимает спички из кучи, по меньшей мера 1 и не более 6. Кто берет последнюю спичку, выигрывает.
Вы можете реализовать ее, заставляя компьютер сообщать число оставшихся спичек, Когда очередь хода за компьютером, он делает ход настолько быстро, что игрок не успевает увидеть происходящего. Включите в вашу программу «цикл ожидания», чтобы замедлить игру компьютера (цикл от 1 до нескольких тысяч, в котором ничего не происходит:
Вы можете изменить игру, взяв в качестве допускающих изменение данных — начальное число спичек и максимальное число спичек( которое можно вытащить на каждом ходе.
? Игра 17. Игра дат.
Эта игра предложена Берлокеном [BER]. Номер года в ней не очень существен, но предполагается, что
Первый, кто доберется до 31 декабря, выигрывает.
У вас не должно возникнуть никаких затруднений ни в определении стратегии, ни в программировании этой игры. Подумайте о проверке осмысленности предлагаемых дат… Кроме того, вставьте цикл ожидания, чтобы дать игроку время для ответных действий. Компьютер должен быть вежлив и должен спросить, кто будет начинать, по крайней мере, бросить «орла» или «решку», чтобы узнать, кому начинать…
?** Игра 18. Игра с 24 картами.
Расположим на столе 24 раскрытые карты: все карты с номерами от 1 до 6 обычной колоды, где туз считается за 1. Масти карт несущественны: двойка бубен имеет то же значение, что и двойка треф.
Каждый игрок при своем ходе берет со стола карту и складывает ее значение с суммой тех, которые были взяты ранее [14] . Первый, кто берет в точности 50 очков, выигрывает. Внимание: если при вашем ходе вы, взяв карту, не можете не превысить 50 очков, то вы проиграли. Если, например, ваш партнер увеличил сумму до 49 очков, а все тузы уже взяты, то вы проиграли: карту нужно брать, а ее значение больше единицы.
14
Таким образом, подсчитывается общая сумма карт, взятых партнерами, а не отдельные суммы для каждого партнера. — Примеч. ред.
Это — вариант средневековой игры. Стратегия гораздо сложнее, потому что карт каждого сорта только 4. К этой игре нужно привыкнуть. Сперва компьютер выигрывает все партии подряд (любопытна реакция программиста: я счастлив, что моя программа меня обыгрывает). Но по прошествии нескольких партий уже я выигрываю. Тогда программу нужно улучшить.
?** Игра 19. Игра города Нима.
Ах! Эта нимская игра… кто ее не знает. Существует немало запрограммированных вариантов в большом числе публикаций и обзоров. Читатель может сказать мне, что этой игре здесь не место: если моя цель — заставить читателя программировать, то я проиграл с самого начала.
Ну, нет. Поскольку решения, предложенные в вышеупомянутых книгах (и, поскольку перечитывать их бесполезно, то я их имена и не указываю), очень плохо запрограммированы и совершенно не объяснены. Вам придется сделать лучше. Если вы знаете выигрывающую стратегию, то вам придется ее испытать, чтобы её проверить. Если вы ее не знаете, вы должны попробовать ее изобрести. Во всех случаях нужно программировать очень тщательно, чтобы не делать ненужных вычислений.
Напомним даже саму игру на тот очень мало правдоподобный случай, если вы ее еще не знаете. Это игра для двоих, и компьютер будет вашим партнером. На столе — кучи спичек в некотором количестве, и в каждой куче — некоторое количество спичек. Например, есть 5 кучек с 8, 13, 7, 5, 9 спичками.