Программирование игр и головоломок - [2]
некоторые задачи имеют очень простой вид, но доведение решения до программы является настоящей головоломкой (например, переставить две части вектора, найти наибольший белый прямоугольник в решетке кроссворда). Это — совершенно новый тип задач, тесно связанный с компьютером;
наконец, последний тип — настолько трудный, что я уменьшил набор его примеров, выбрав их из поистине неисчислимого множества, — связан с тем, что я говорил в начале. Вам дана программа (в нашей книге — написанная настолько хорошо, насколько это возможно), но без комментариев. Скажите, что она делает.
Трудность головоломки обозначается вопросительными знаками. Есть головоломки с довольно простыми решениями, но деликатным программированием: «?***», и есть ужасные головоломки с легким программированием: «???». Выбирайте!
Эта книга будет полезна и всем тем, кто занимается подготовкой подростков по информатике: преподавателям лицеев и колледжей, руководителям клубов или каникулярных занятий.
Я не привожу никаких решений, за исключением нескольких настолько классических случаев, что их решение исследовано всюду, или задач, решение которых является образцом, который часто встречается и который нужно знать. Изучите сначала их.
Первый раздел — немного особенный. Каковы бы ни были ваши склонности — начните с него; он даст вам инструмент, необходимый для почти всех игр и немалого числа головоломок (формирование ситуаций случайным образом).
Если вы уже перелистали книгу, то вы, может быть, заметили в ней и кое-что, похожее на математику, Признаюсь! Несколько головоломок в ней — арифметические, и их решение требует вычислений. В большей части эта книга доступна и людям, не имеющим никакой специальной математической подготовки, даже тем, кому вся эта математика внушает страх и отвращение.
Я сказал все. Теперь — вам ИГРАТЬ, вам СОЗДАВАТЬ…
Обозначения
Вот конструкции, используемые в программах этой книги.
Оператор присваивания. В нем используется знак «:=»
>i := i + 1
Вот его аналоги на других языках:
Бейсик: >LET I = I + 1
LSE: >I ← I + 1
Паскаль: >I := I + 1
Условный оператор имеет вид
>ЕСЛИ условие ТО последовательность операторов
>КОНЕЦ_ЕСЛИ
При работе условного оператора вначале проверяется условие. Если оно имеет значение ИСТИНА, то выполняется последовательность операторов, заключенная между ТО и КОНЕЦ_ЕСЛИ. КОНЕЦ_ЕСЛИ играет роль закрывающей скобки, избавляющей от применения разделителей DEBUT FIN, как на LSE, или BEGIN END, как в языке Паскаль. При работе оператора
>ЕСЛИ условие ТО последовательность операторов
> ИНАЧЕ последовательность операторов
>КОНЕЦ_ЕСЛИ
вначале проверяется условие. Если оно имеет значение ИСТИНА, то выполняется последовательность операторов, заключенная между ТО и ИНАЧЕ, а если условие имеет значение ЛОЖЬ, то выполняется то, что содержится между ИНАЧЕ и КОНЕЦ_ЕСЛИ. Снова, как и выше, нет нужды в DEBUT FIN.
Цикл
>ПОКА условие ВЫПОЛНЯТЬ
> последовательность операторов
>ВЕРНУТЬСЯ
выполняет последовательность операторов, заключенную между скобками ВЫПОЛНЯТЬ — ВЕРНУТЬСЯ, пока условие справедливо. Он эквивалентен циклу LSE
>FAIRE номер строки ПОКА условие
> последовательность операторов
>n замыкающая строка
или циклу на языке Паскаль
>WHILE условие DO
> BEGIN последовательность операторов END
Цикл
>ВЫПОЛНЯТЬ
> последовательность операторов, содержащая слово КОНЧЕНО
>ВЕРНУТЬСЯ
работает так:
Последовательность инструкций, заключенная между скобками операторов ВЫПОЛНЯТЬ — ВЕРНУТЬСЯ, повторяется неограниченно. Слово КОНЧЕНО означает, что цель цикла достигнута, повторяемая работа закончена. На этом цикл останавливается и программа продолжается со следующего за циклом оператора В английских книгах и статьях вместо КОНЧЕНО обычно пишут EXIT: выйти из цикла (также сделано и в языке Ада). Но EXIT вызывает идею действия: выхода. Я предпочитаю ему слово КОНЧЕНО, которое лучше отражает идею не действия, а ситуации: я достиг цели цикла, с ним все кончено.,..
Простых эквивалентов этого цикла на Бейсике, LSE или Паскале нет. Можно применить операторы ALLER EN или GO ТО для симуляции такого цикла.
— На Бейсике можно использовать дополнительную переменную Z:
>FOR Z = 1 ТО 0
заменяет >ВЫПОЛНЯТЬ
>LET Z = 0
заменяет >КОНЧЕНО
>NEXT Z
заменяет >ВЕРНУТЬСЯ
Кроме того, нужно перепрыгнуть в цикле все, что стоит после слова КОНЧЕНО, т. е. после оператора LET Z = 0. Так как это можно сделать с помощью GO ТО, то я считаю предпочтительным использовать таким образом GO ТО для циклов. Если ваш язык не структурирован, то красивых циклов вы никогда не получите…
— На языке Паскаль используйте булеву переменную z, которой до начала цикла присвоено значение TRUE, и тогда цикл примет вид
>WHILE z DO BEGIN END
Слово КОНЧЕНО придется заменить оператором >z := FALSE
, включенным в конструкцию так, чтобы сделать этот оператор последним выполняемым оператором цикла. Если структура языка нехороша…
Цикл
>ДЛЯ i := exp 1 ШАГ exp 2 ДО exp 3 ВЫПОЛНЯТЬ…
>ВЕРНУТЬСЯ
повторяет последовательность операторов, заключенную между ВЫПОЛНЯТЬ и ВЕРНУТЬСЯ, придавая i значения из арифметической прогрессии с разностью exp 2 (постоянная величина в данном цикле), начиная с exp 1 и останавливаясь на exp 3, Если шар равен 1, то фрагмент ШАГ 1 можно опустить.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.