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

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

Вот несколько предложений по реализации игры. Я представляю автостраду следующим образом.

Расстояние между машинами постоянно, В верхней полосе оно равно 18 (17 точек между двумя машинами) и возрастает на 1 в каждой следующей полосе (24 точки между двумя стрелками в нижней полосе). Стрелки представляют машины острием в направлении их перемещения. Тире указывают место вашего перехода, но это отнюдь не переход «зебра»: ни одна машина не замедлит хода, чтобы дать вам перейти! В начале игры вы находитесь вне автострады, как на рис. 2.

Скорость машин постоянна. В верхней полосе я выбрал 5: любое перемещение машин продвигает их на 5 точек влево. В результате одна из машин может уйти влево или справа может появиться новое транспортное средство, если интервал вправо увеличится более чем на 17 точек до края: расстояние между машинами поддерживается постоянным. Я решил сделать скорость машин растущей на 1 точку при каждой смене полосы: она равна 6 во второй полосе, 7 — в третьей…

Таким образом, расстояние между машинами растет, скорость тоже, но отношение не постоянно. Если вы вступаете на первую полосу в тот момент, когда машина только что проехала тире, то у вас 16 точек до машины справа от вас. При скорости 5 точек вы можете оставаться неподвижным три хода. На нижней полосе у вас осталось бы справа 23 точки, но при скорости 12 вы не можете оставаться на месте более одного хода. Чем дальше вы продвигаетесь, тем больше риск, что вы будете раздавлены.

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

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

Не говорите: идиотская игра, придуманная в дурацком мозгу… Прежде всего это невежливо по отношению ко мне. Кроме того, в ней нужно иметь некоторый опыт, чтобы дать себе отчет в том, насколько трудно играть оптимальным образом. Благодаря изображению точек, вы можете — если захотите — проводить свои подсчеты и узнавать, каким будет положение машин после следующего хода. Вы можете предвидеть или вычислять столько ходов от начала, сколько вы пожелаете: игра вашего противника полностью определена. Но опыт показывает, что это скучно. Ходы лучше делать, оценивая положение машин перед следующим ходом. Может получиться, что вы говорите себе: у меня есть время пройти, а он возьмет дай раздавит. Может случиться, что вы не берете на себя риск пойти вперед, а машина останавливается в точности перед тире.

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

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

Программирование этой игры очень просто. Желаю успеха.

* Игра 8. Шадок у гиби.

«У шадоков ситуация удовлетворительна. Испытания ракет продолжаются, постоянно кончаясь неудачами.

Дело здесь в одном из основных принципов шадокской логики: «Нет ничего, что бы непрерывно продолжалось и не кончилось успехом». Или, в других выражениях: «Чем больше неудач, тем больше шансов, что оно заработает». Их ракета еще несовершенна, но они вычислили, что у них есть по крайней мере один шанс из миллиона, что она заработает… И они торопятся поскорее осуществить 999999 первых неудачных опытов, чтобы быть уверенными, что миллионная заработает». (Жак Руксель. Великолепие навыворот. Париж, издательство Грассе.)

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


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.