Программирование >>  Рекурсивные объекты и фрактальные узоры 

1 ... 39 40 41 [ 42 ] 43


глава 10. архитектура программного обеспечения, или о чем подумать

на сон грядущий



В итоге пользователь видит перед собой изображение того же размера, что и исходное, но составленное из произвольно совмещённых между собой фрагментов.

Цель игры - меняя местами фрагменты картинки и поворачивая их на 180 , получить исходное изображение. Как только цель достигнута, выводится сообщение о победе.

В большинстве книг по программированию (и эта - не исключение) задачи предназначены для иллюстрации какого-либо принципа, метода или алгоритма. Однако мир программирования на этом не заканчивается. Как отметил Ричард Хэмминг ещё в 1969 году, Пародируя наши нынешние методы преподавания программирования, мы даём новичкам грамматику и словарь и говорим им, что они теперь великие писатели. Мы редко, если когда-либо вообще, проводим хоть сколько-нибудь серьёзное обучение стилю . Задача может иллюстрировать просто интересную ситуацию из жизни, в которой компьютер при умелом подходе может оказаться полезным инструментом. Таким образом, успешное решение задачи определяется разработкой грамотной архитектуры программного продукта, хорошим стилем программирования.

Данная глава посвящена именно таким задачам. В них вы не найдёте ничего алгоритмически сложного, но как проекты приведённые задачи интересны. Я не берусь превращать книгу в учебник хорошего стиля пр01раммирова-ния; кроме того, стиль во многом определяется используемой парадигмой, и мне не хотелось бы заранее склонять читателей к тому или иному подходу. Поэтому все задачи этой главы даются без решений.

10.1. ИГРЫ и головоломки

10.1.1. Классический puzzle - простая игра на составление изображения

Требуется написать программу для игры в puzzle (составление изображения из фрагментов) по упрощённой схеме.

Пользователь задаёт размеры головоломки (N элементов по вертикали, М элементов по горизонтали) и файл, содержащий входное изображение. Изображение разрезается на NxM прямоугольных кусочков, затем эти кусочки перемешиваются случайным образом и каждый из них с вероятностью 1/2 поворачивается на 180.

10.1.2. Puzzle со сдвигами - составление изображения по

необычным правилам

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

Игрок теперь не может и произвольно переставлять местами фрагменты изображения: в его силах лишь прокручивать отдельные строки и столбцы. Поскольку исходная картинка была преобразована именно таким образом, вернуть её в первоначальное состояние всегда можно.

Как только игрок восстанавливает исходное изображение, печатается сообщение о победе.

Рис. Ю.1. Игра upuzzle со сдвигами

10.1.3. Шахматная головоломка - подсчёт атакуемых полей

Игра Шахматная головоломка по стилю чем-то напоминает Сапера (п. 9.1.3). Однако на сей раз целью будет программирование игры, а решение головоломки мы предоставим человеку.

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



Далее игрок может открывать любые незанятые клетки доски. При открытии в клетке отображается количество фигур, её бьющих.

Цель игры - выявить расположение фигур компьютера, открыв как можно меньше клеток. Набранное в итоге количество очков тем меньше, чем больше клеток пришлось открыть. Неверная догадка означает немедленное поражение в игре.

10.1.4. Ball Game ~ взаимодействие с объектами игрового мира

В текстовом файле хранится описание прямоугольного уровня, условно разбитого на клетки. В каждой клетке может располагаться стена (#), приз (*), отражатель первого типа (/) или отражатель второго типа (\). Пример уровня:

##############################################

# * \ # # # #

# \ #

### /

# \# *# #

##############################################

Игра начинается с того, что шарик вылетает из верхнего левого угла уровня и летит вправо. Если на пути встречается приз, он съедается, и шарик продолжает движение.

Стена отражает шарик в направлении, противоположном текущему. Отражатели меняют движение шарика по закону угол падения равен углу отражения . Угол наклона каждого отражателя считается равным 45 .

Задача заключается в моделировании (с анимацией) поведения шарика. Допускается использование текстового режима для вывода графики, хотя полноценная графика была бы приятнее. Моделирование заканчивается, когда шарик достигает правого нижнего угла уровня. Затем печатается сообщение: удалось ли собрать все призы на уровне или нет. Должна быть также предусмотрена возможность для прерывания работы программы.

Дополнительная задача. Этот движок можно превратить в полноценную игру, если разработать игровой редактор. Каждый уровень изначально со-

стоит лишь из стенок и призов. Цель играющего - расставить (в редакторе) отражатели так, чтобы шарик при движении съел все призы и достиг правого нижнего угла экрана. Количество отражателей, естественно, ограничивается (для каждого уровня должны предусматриваться свои ограничения). Построенный уровень передаётся на вход программе, моделирующей движение шарика. При победе происходит переход на следующий уровень - в об1цем, всё как в любой обычной компьютерной игре.

10.2. ХРАНЕНИЕ И ОБРАБОТКА ДАННЫХ

10.2.1. Логические схемы - инструмент для изучающих электронику

Требуется разработать прогзамму, облегчающую создание логических схем. Прог-рамма должна дать пользователю возможность задать N входов и М выходов схемы, а затем позволить поместить на схему произвольное количество блоков И, ИЛИ и НЕ (рис. 10.2, вверху) и соединить их проводниками. Детали редактировагпш оставляются на усмотрение разработчика. Кроме логических блоков очень полезны разветвители , превращающие один сигнал в набор из двух или трёх сигналов (рис. 10.2, внизу). Должна быть предусмотрена функция печати логической таблицы для построенной схемы. В этой таблице для каждого возможного набора входных сигналов (сигнал кодируется числом О или 1) печатается соответствующий ему ртабор выходных сигналов.

&

РАЗВЕТВИТЕЛИ

Рис. 10.2. Логические схемы и разветвители



1 ... 39 40 41 [ 42 ] 43

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика