С одной стороны, работа над этой простой задачей позволяет сосредоточиться на стратегии поиска решения, не застревая в груде мелочей. С другой стороны, несмотря на очевидную простоту, задача имеет раз- личные решения. Вот несколько вариантов.
- Мы можем представить себе дом состоящим из прямых линий. В таком случае основной задачей станет рисование каждой линии.
- Мы можем представить себе, что дом состоит из шести независимых фигур: сторона 1, сторона 2, две двери, треугольник и параллелограмм. Рисование каждой из этих фигур — основная задача.
- Поскольку две двери одинаковы, мы можем назвать одной из основных задач рисование двери и запустить ее дважды.
- Мы можем рассматривать треугольник и параллелограмм наверху дома как единое целое: крышу. В таком случае отдельной основной задачей будет нарисовать крышу.
- Мы можем рассматривать сторону 1 и дверь как одно целое: фасад дома. В этом случае отдельной задачей будет нарисовать фасад.
Есть много других вариантов, но этих достаточно, чтобы проиллюстрировать нашу идею. Нужно разделить общую задачу на небольшие, обозримые подзадачи, с которыми проще работать и которые можно решать по одной. Если вы обнаруживаете схожие фрагменты, пробуйте найти для них единое решение и применяйте его ко всем таким случаям.
Наш план рисования дома, тоже опирается на эту идею. Он подразумевает, что спрайт начинает в точке А и ориентирован направо. Надо создать скрипт, который подходил бы к шагам, прописанным в этом плане. Мы напишем процедуру
Сторона 1 (
Side1), чтобы рисовать левую сторону дома, как показано в шаге 1. Мы также напишем еще три процедуры:
Дверь,
Сторона 2 и
Крыша (
Door, Side2 и
Roof), чтобы нарисовать две двери, правую сторону дома и крышу (см. шаги 2, 3, 4 и 6), и соединим все эти процедуры с соответствующими командами
Движения.
Наша процедура
Дом изображена на рисунке, где также показаны последовательно все этапы рисования и их привязка к процедуре. Ей требуется один параметр (масштаб), который определяет длину единицы (коэффициент масштабирования) при рисовании дома. Обратите внимание на то, что процедура
Дверь используется дважды. А процедура
Крыша отвечает за рисование всей крыши и может содержать различные подалгоритмы для рисования отдельных компонентов.