Игра оказывается более или менее трудной в зависимости от соотношения между числом препятствий и числом роботов. Я взял прямоугольник с 11 строками и 18 столбцами (число строк нечетно по причине особой роля, которую играет среднее поле), с 30 расщелинами и 20 роботами. Игрок имеет право разрушить 12 роботов. В начале игры игроку, как правило, трудно выйти из своего начального положения, потому что он находится поблизости от двух правых углов, из которых появляется немало свежих роботов. Когда же ему удается удалиться от правого края, выходящие из углов роботы его меньше стесняют и большая их часть падает в расщелины. Трудности возобновляются при приближении к левому краю. Именно поэтому нужно избегать растраты боеприпасов в начале партии. Попытайтесь, и вы увидите, что это требует немалой ловкости…
* Игра 11. Формула 1[12].
Задумывались ли вы когда-нибудь над тем, что переживает водитель, мчащийся на огромной скорости по извилистой дороге, обгоняя попутные машины и уклоняясь от встречных? Конечно, вы не преобразуете ваш компьютер в быстро мчащийся автомобиль, и с помощью используемых нами графических средств мы не сможем создать впечатление движения по расстилающейся перед вами дороге. Так как, наконец, я полагаю, что у вас нет средств управления вашим компьютером в реальном времени (этих средств нет не только у меня, но и в оборудовании учебных заведений)[13], поэтому перед любым вашим действием вы сможете размышлять столько времени, сколько вам захочется, а это совсем не так в случае водителя на дороге. Но попытайтесь-ка в этой игре реагировать быстро и вы увидите, что эффект не так уж плох, несмотря на элементарность средств…
Автострада выводится на экран в виде последовательности строк, на которых поставлены точки, нули и звездочка. Точки реализуют 4 полосы движения и представляют свободные места. Выше транспортное средство пред- ставимо звездочкой. Нули суть неподвижные препятствия (скажем, что-то тяжеловесное и очень медлительное). Типичная ситуация изображена на рис. 7. Вы находитесь перед участком дороги (я выбрал 13 строк. Это дает мне хорошие результаты. Но вы можете взять больше, если вам позволяет ваш экран; это увеличивает возможности предвидения. Вы можете взять и меньше, что заставит вести машину в еще более стесненных условиях…).
У вас есть некоторая скорость, которая не выводится на экран, но вы можете ее узнать. В начале игры решается, фиксируется ли она сразу на всю игру (я выбрал 4) или предлагается вами. Когда вы решаете — ускоряете ли вы движение или замедляете его — вы можете узнать на каждом ходе, какова она. Но я не считаю уместным заставить компьютер сообщать ее постоянно — это слишком многое облегчает водителю. Увидите сами.
Компьютер требует от вас, что вы собираетесь делать: ускорять, замедлять, повернуть правее или повернуть левее. Попарно эти возможности взаимоисключающие, но вы можете одновременно ускорить движение и взять вправо или замедлить и взять влево. Вы можете также не менять ни вашу скорость, ни направление вашего движения.
Если вы ускоряете движение, то ваша скорость увеличивается на одну единицу. Если вы замедляете движение, то скорость уменьшается на единицу. Если вы таким образом добираетесь до нуля, то вы рассматриваетесь как проигравший партию: вы не имеете права останавливаться…
Предположим сначала, что вы не меняете направления движения. Ваша машина спускается по вертикали на число строк, равное вашей скорости. Это может привести к тому, что вы пересечете поле, обозначенное 0. Тогда вы сталкиваетесь с грузовиком, вы пропали. Это может также привести вас к тому, что вы попадаете на не обозначенное поле. Вы покинули дорогу. Это — тяжелый несчастный случай. Вы пропали. Так, на рис. 8, если ваша скорость превосходит 2, то вы сталкиваетесь с грузовиком. Если бы вы исходили из крайнего левого поля того же ряда и ваша скорость превосходила бы 5, то вы покинули бы дорогу (внимание: вы пропали с того момента, как вы достигли нуля или не обозначенного поля. Оставшаяся часть вашей траектории движения не рассматривается).
Теперь, если вы меняете направление движения, двигаясь, например, вправо, то ваша машина продвигается по диагонали из исходного ряда вправо до следующей строки, а затем движение продолжается дальше в том столбце, в котором оказывается машина. Понятие «вправо» двусмысленно: вы можете расширить его до «вправо на фигуре» или «вправо по направлению движения». Это не так уж важно, выберите тот смысл, который вы пожелаете. Если это вас шокирует, переверните рисунок и заставьте машину подниматься; тогда «направо» будет значить «направо на экране» во всех случаях. Но это немного усложняет программу, и я так не делаю.
Если вы повернете направо в случае, изображенном на рис. 8, то какова бы ни была ваша скорость, вы сразу же сталкиваетесь с грузовиком. Если вы повернете налево, то вы избегаете грузовиков, но ваша скорость не должна превосходить пяти.
Когда вы сообщили все ваши команды, компьютер показывает положение звездочки на последовательных строчках, чтобы материализовать ваше движение. Если вы оказываетесь на поле, не помеченном точкой, то все останавливается, вы пропали. В противном случае через некоторое время — время ожидания, дающее вам возможность лучше рассмотреть пройденное вами, вся фигура поднимается, чтобы возвратить вашу машину на верхнюю строку, и на экране появляется новый кусок дороги. Таким образом, вы можете обнаружить, что вы едете слишком быстро и что дорога резко поворачивает или что попарно гуськом идут по два тяжелых грузовика, которые блокируют две полосы движения. Вы можете затормозить, но только на одну единицу. Придется рисковать…
Для того чтобы игра не продолжалась бесконечно, вы должны условиться о числе линий, которые нужно пересечь (например 100). Если вы достигли этого, компьютер прославляет вас так, как вы того заслуживаете, и указывает вашу среднюю скорость.
Эту игру программировать не очень трудно, если не считать того, что нужно оказаться способным корректно дозировать число грузовиков, и что нельзя позволять дороге часто делать зигзаги, а также выходить за пределы экрана. Но здесь нет ничего, с чем вы не могли бы справиться.
Собственно игра оказывается гораздо труднее, чем можно было себе представить. Вы, конечно, можете затормозить до скорости 1. Вы оказались на краю. Но ничего смешного нет. Вы можете оказаться в самом рискованном положении, вы терпите удар за ударом. Благодаря воспроизводимым непредсказуемым последовательностям вы можете много раз возобновлять один и тот же пробег. Впрочем, здесь бывает трудно вспомнить, что же происходит на шестидесятом километре… Вы можете также попробовать маршрут, а затем предложить его вашим друзьям. И если вы на их глазах вылетели с трассы, но вовсе не факт, что они смогут на ней удержаться. Итак, желаю успеха!
?** Игра 12. Твоя песенка спета, любопытный!
Идея не нова, да и реализация поступила в рыночную продажу. Но в этой игре возникают некоторые маленькие задачи по программированию, И я предлагаю вам красивый план их реализации.. К тому же это позволит ввести вас в игры с числами.
Вы знаете телевизионную игру: вытащить случайным образом 6 шашек среди 24f образованных следующим образом:
двойной набор из 10 шашек с числами от 1 до 10;
четыре шашки с числами 25, 50, 75, 100.
Случайным образом выбирается трехзначное целое число (первая цифра которого — не нуль, так что оно содержится между 100 и 999, включая границы). Задача состоит в том, чтобы менее чем за 45 с обнаружить последовательность операций, использующих только значения шести выбранных шашек, причем каждую не более одного раза, и соединить их знаками + − × / (целочисленное деление разрешается только в тех случаях, когда оно выполняется нацело, без остатка).