Программирование игр и головоломок - [17]

Шрифт
Интервал

— у него есть несколько дезинтегрирующих зарядов, с помощью которых он может разрушать роботов. Но он может применять их только в ближнем бою (разве что дальность его оружия не ограничена. Насколько мы знаем, на земле такая дистанция есть…). Кроме того, ему нужно экономить заряды. Еще неизвестно, что его ждет, когда он приблизится к выходу…

Рисунок 6 воспроизводит экран микрокомпьютера. Помещение есть прямоугольник с 11 строками и 18 столбцами. Строки обозначают свободные места, 0 — расщелины в полу, Р — роботы. Крестик (×) обозначает игрока, здесь — в начальном положении. Выход обозначен плюсом.

При своем ходе игрок может

— убить роботов на полях, прилегающих к его собственному;

— переместиться на одно поле в любом направлении, при условии, что он не попадет в расщелину, в результате чего он погиб бы. Он не должен также перемещаться в клетку, помеченную Р, так как там он был бы уничтожен роботом. Если это перемещение приводит его к полю +, то он выигрывает.

Вот что сделал я для реализации этого. Игрок сначала говорит, каких роботов он хочет разрушить, а затем — куда он хочет пойти. Если он отвечает

−Л, −В, НЛ

это означает, что должен быть разрушен робот слева (на соседнем поле), как и робот, находящийся на соседнем поле над ним, после чего он передвинется на поле, расположенное ниже и левее.

Каждый раз, прочитав ответ, компьютер вычисляет новое состояние игры и показывает его. Число роботов, которых игрок может разрушить, ограничено, компьютер следит за ним и в каждое мгновение может сообщить.

После этого роботы переместятся, каждый на одну клетку, все равно в какую сторону (по горизонтали, по вертикали или по диагонали). Если при этом робот оказывается на доле 0, то он уничтожается. Если два робота сталкиваются при движении, то один из них уничтожается. Кроме того, роботы случайным образом добавляются в четырех углах игрового поля. Это нужно делать для то- го>( чтобы число роботов в игре оставалось более или менее постоянным.

В случае, изображенном на рис. 6, игрок может остаться неподвижным. Тогда робот, расположенный над игроком в том же столбце, уничтожается в западне, расположенной непосредственно ниже, но робот, расположенный левее и ниже игрока, приблизится к игроку, и последнему придется разрушить его на следующем ходе. Игрок может также начать с хода влево, но тогда два робота приблизятся к нему, и ему придется разрушить их на следующем ходе.

Игра оказывается более или менее трудной в зависимости от соотношения между числом препятствий и числом роботов. Я взял прямоугольник с 11 строками и 18 столбцами (число строк нечетно по причине особой роля, которую играет среднее поле), с 30 расщелинами и 20 роботами. Игрок имеет право разрушить 12 роботов. В начале игры игроку, как правило, трудно выйти из своего начального положения, потому что он находится поблизости от двух правых углов, из которых появляется немало свежих роботов. Когда же ему удается удалиться от правого края, выходящие из углов роботы его меньше стесняют и большая их часть падает в расщелины. Трудности возобновляются при приближении к левому краю. Именно поэтому нужно избегать растраты боеприпасов в начале партии. Попытайтесь, и вы увидите, что это требует немалой ловкости…

* Игра 11. Формула 1[12].

Задумывались ли вы когда-нибудь над тем, что переживает водитель, мчащийся на огромной скорости по извилистой дороге, обгоняя попутные машины и уклоняясь от встречных? Конечно, вы не преобразуете ваш компьютер в быстро мчащийся автомобиль, и с помощью используемых нами графических средств мы не сможем создать впечатление движения по расстилающейся перед вами дороге. Так как, наконец, я полагаю, что у вас нет средств управления вашим компьютером в реальном времени (этих средств нет не только у меня, но и в оборудовании учебных заведений)[13], поэтому перед любым вашим действием вы сможете размышлять столько времени, сколько вам захочется, а это совсем не так в случае водителя на дороге. Но попытайтесь-ка в этой игре реагировать быстро и вы увидите, что эффект не так уж плох, несмотря на элементарность средств…

Автострада выводится на экран в виде последовательности строк, на которых поставлены точки, нули и звездочка. Точки реализуют 4 полосы движения и представляют свободные места. Выше транспортное средство пред- ставимо звездочкой. Нули суть неподвижные препятствия (скажем, что-то тяжеловесное и очень медлительное). Типичная ситуация изображена на рис. 7. Вы находитесь перед участком дороги (я выбрал 13 строк. Это дает мне хорошие результаты. Но вы можете взять больше, если вам позволяет ваш экран; это увеличивает возможности предвидения. Вы можете взять и меньше, что заставит вести машину в еще более стесненных условиях…).

У вас есть некоторая скорость, которая не выводится на экран, но вы можете ее узнать. В начале игры решается, фиксируется ли она сразу на всю игру (я выбрал 4) или предлагается вами. Когда вы решаете — ускоряете ли вы движение или замедляете его — вы можете узнать на каждом ходе, какова она. Но я не считаю уместным заставить компьютер сообщать ее постоянно — это слишком многое облегчает водителю. Увидите сами.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.