Программирование игр и головоломок
Программирование игр и головоломок читать книгу онлайн
Рассматриваются способы программирования различных занимательных игр и головоломок с числами, геометрическими фигурами и др. Изложение большинства игр и головоломок ведется в несколько этапов. Сначала разъясняется сама постановка задачи и требования, предъявляемые к алгоритму ее решения.
В следующем разделе книги обсуждается сам алгоритм и возможные пути его реализации.
В конце книга по многим играм и головоломкам даются наброски их программной реализации. Используемый при этом язык типа Паскаля допускает перевод на другие широко распространенные языки программирования.
Для начинающих программистов, студентов вузов и техникумов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Программирование этих игр не представляет заметных трудностей. Это — не головоломка (если исключить лабиринт для коня, который представляет настоящую трудность). Но нужно работать очень тщательно, чтобы компьютер соблюдал правила и не жульничал. Ошибки программирования всегда достойны осуждения. Здесь может возникнуть. искушение сделать все быстро, потому что в конце концов всегда что-то получится. Тщательно изучите задачу, продумайте прежде чем писать, составьте план вашей программы, разберите подзадачи отдельно…
Игра 6. Гениальный ответчик.
Я не думаю, что есть еще хоть кто-нибудь, кто не знает игру, которую М. Мейрович назвал «гениальный ответчик» [11]. Обычно она играется с цветными шашками (6 и 8 различных цветов в зависимости от изготовления). Играющий должен угадать сделанную из этих шашек тайную комбинацию. Так, в варианте «мини» вы должны угадать комбинацию из четырех шашек, например: ГОЛУБАЯ ЖЕЛТАЯ ЖЕЛТАЯ КРАСНАЯ (в этом порядке). Второй игрок — ведущий. Это он выбирает комбинацию для угадывания и он оценивает ходы, которые вы делаете. Ваш ход в игре состоит в том, что вы предлагаете комбинацию, содержащую то же число шашек, из того же набора цветов, например, КРАСНАЯ ГОЛУБАЯ ЖЕЛТАЯ ГОЛУБАЯ.
Ведущий сообщает вам, сколько шашек из вашей комбинации содержат правильный цвет на правильном месте: здесь — 1, третья шашка ЖЕЛТАЯ, как и в неизвестной вам комбинации. Затем он сообщает вам, сколько шашек имеют правильный цвет, но стоят на неправильных местах. Здесь 1, так как вы предложили красную шашку, но она на неверном месте. Согласно традиции, ведущий выставляет столько черных шашек, сколько в вашем ответе шашек правильного цвета на правильном месте, а затем столько белых шашек, сколько шашек правильного цвета на неверных местах.
Составьте программу, заставляющую ваш компьютер играть роль ведущего. Он должен случайным образом выбирать комбинацию и, конечно, не сообщать ее. Когда вы предлагаете свою комбинацию, компьютер должен также сообщить вам, сколько черных и белых шашек она заслуживает. Если в конце обусловленного заранее числа попыток вы не достигли результата, компьютер вас не поздравит, но сообщит загаданную комбинацию.
Введите в вашу программу параметры по числу цветов и числу шашек в комбинации, как и по степени сложности:
простая: 4 шашки, 6 цветов, 6 попыток;
средняя: 6 шашек, 8 цветов, 8 попыток.
Особой трудности нет. Игра заведомо приятна. Отладьте диалог…
Игра 7. Пляж Ботафого.
Несколько лет назад я отправился вести курс в Понтификальном университете Рио-де-Жанейро. Часть моей семьи смогла присоединиться ко мне на несколько дней. Мы отправились посмотреть на знаменитую «Сахарную голову», расположенную вблизи Ботафого. Мы прибыли на место. В нескольких стах метров перед нами «Сахарная голова» на берегу маленькой бухты открывала весьма привлекательный пляж. Чтобы его достичь, мы должны были преодолеть одно препятствие: автостраду. Нам очень хотелось отправиться на пляж и насладиться морем (мы еще не знали, насколько оно может быть загрязнено!). Но очевидным образом не было никаких средств пересечь эту автостраду. Ни один переход не пересекал ее поверху, это мы видели. Не было поблизости и подземных переходов. Мы не говорили по-бразильски (он произошел от португальского, но он отошел от языка, на котором говорят в Лиссабоне, так же сильно, как язык Квебека отличается от французского в Париже). Наконец, мы попытались что-нибудь понять с помощью моего приблизительного английского. «Чтобы попасть туда? Пересеките автостраду…» Это не было многообещающим развлечением. Движение было интенсивным. Бразильцы водят машины на большой скорости. Не слушая ничего, кроме зова нашей отвагу мы успешно достигли покрытой дерном полосы, разделяющей два направления автострады, и впали в глубокое уныние. Никогда нам не добраться до цели! Но отступать было некуда. Либо в одном, либо в другом направлении, но дорогу нужно было пересечь. Я не знаю, каким образом нам удалось ее перейти. И вот, после того, как мы решили, что пробил наш последний час, мы вылезли из моря на пляж Ботафого и — обнаружили в ста метрах подземный переход, позволявший безопасно перейти дорогу. Когда я позже рассказывал эти злоключения одному из своих коллег, он заявил мне, что вообще молодые люди не имеют привычки пользоваться ни подземными, ни нажимными переходами, они бросаются прямо под автомобили безо всякой боязни. Он рассказал мне также, что после торжественного открытия надземного перехода, который пересекал ту же автостраду немного выше Фламенко, в одном журнале был опубликован юмористический рисунок. На нем была изображена мать семейства, катящая детскую коляску и тянущая другой рукой ребенка, чтобы перейти пешком автотрассу у надземного перехода, говоря «Какой удобный переход! Наконец-то мы сможем переходить дорогу в тенечке…»
Все это навело меня на вот какую игру. На экран выводится рисунок, символизирующий автостраду с n полосами движения. По каждой полосе движутся автомобили, В начале игры вы находитесь на краю автострады. Вы можете либо оставаться там, где вы есть, либо прыгнуть на шаг вперед. Автомобили перемещаются согласно неизвестному закону. Если один из них достигает занимаемого вами положения или проходит по нему, то вы раздавлены. А если нет, то ваш ход. Вы снова можете либо остаться неподвижным, либо продвинуться на шаг вперед, либо вернуться на шаг назад, и цикл возобновляется. Вы выигрываете, если вы достигаете другой стороны дороги, не будучи раздавленным.
Вот несколько предложений по реализации игры. Я представляю автостраду следующим образом.
Расстояние между машинами постоянно, В верхней полосе оно равно 18 (17 точек между двумя машинами) и возрастает на 1 в каждой следующей полосе (24 точки между двумя стрелками в нижней полосе). Стрелки представляют машины острием в направлении их перемещения. Тире указывают место вашего перехода, но это отнюдь не переход «зебра»: ни одна машина не замедлит хода, чтобы дать вам перейти! В начале игры вы находитесь вне автострады, как на рис. 2.
Скорость машин постоянна. В верхней полосе я выбрал 5: любое перемещение машин продвигает их на 5 точек влево. В результате одна из машин может уйти влево или справа может появиться новое транспортное средство, если интервал вправо увеличится более чем на 17 точек до края: расстояние между машинами поддерживается постоянным. Я решил сделать скорость машин растущей на 1 точку при каждой смене полосы: она равна 6 во второй полосе, 7 — в третьей…
Таким образом, расстояние между машинами растет, скорость тоже, но отношение не постоянно. Если вы вступаете на первую полосу в тот момент, когда машина только что проехала тире, то у вас 16 точек до машины справа от вас. При скорости 5 точек вы можете оставаться неподвижным три хода. На нижней полосе у вас осталось бы справа 23 точки, но при скорости 12 вы не можете оставаться на месте более одного хода. Чем дальше вы продвигаетесь, тем больше риск, что вы будете раздавлены.
При таком выборе данных период рисунка очень велик. У вас нет никакой возможности получить по ходу партии дважды одну и ту же конфигурацию.
Единственный случайный элемент: начальное положение машин на каждой полосе. Вы задаете это начальное положение, выбирая число точек между тире и первой машиной справа от тире; это — целое число, выбираемое случайно, строго меньше расстояния между машинами на данной полосе. Таким образом, для 8 полос нужно случайным образом получить 8 чисел, Используя воспроизводимую непредсказуемость последовательности, как это описано в разд. 1, вы можете переиграть партию, если сочтете, что плохо использовали ваши возможности. Вы можете провести соревнования со своими друзьями. В моей программе я подсчитываю число шагов, потребовавшихся для перехода дороги. Выигрывает тот, кто переходит с наименьшим числом шагов.