Статья: Законченная программа

void screen_init()

{

for (int y=0; y=a || a<=b) y0 += dy, eps -= two_a;

}

}

Предоставляются функции для очистки экрана и его обновления:

void screen_clear() { screen_init(); } // очистка

void screen_refresh() // обновление

{

for (int y=YMAX-1; 0<=y; y--) { // сверхувниз

for (int x=0; x

Библиотека Фигур

Нам нужно определить общее понятие фигуры (shape). Это надо сделать таким образом, чтобы оно использовалось (как базовый класс) всеми конкретными фигурами (например, кругами и квадратами), и так, чтобы любой фигурой можно было манипулировать исключительно через интерфейс, предоставляемый классом shape:

struct shape {

shape() { shape_list.append(this); }

virtual point north() { return point(0,0); } // север

virtual point south() { return point(0,0); } // юг

virtual point east() { return point(0,0); } // восток

virtual point neast() { return point(0,0); } // северо-восток

virtual point seast() { return point(0,0); } // юго-восток

virtual void draw() {}; // нарисовать

virtual void move(int, int) {}; // переместить

};

Идея состоит в том, что расположение фигуры задается с помощью move(), и фигура помещается на экран с помощью draw(). Фигуры можно располагать относительно друг друга, используя понятие точки соприкосновения, и эти точки перечисляются после точек на компасе (сторон света). Каждая конкретная фигура определяет свой смысл этих точек, и каждая определяет способ, которым она рисуется. Для экономии места здесь на самом деле определяются только необходимые в этом примере стороны света. Конструктор shape::shape() добавляет фигуру в список фигур shape_list. Этот список является gslist, то есть, одним из вариантов обобщенного односвязанного списка, определенного в #7.3.5. Он и соответствующий итератор были сделаны так:

typedef shape* sp;

declare(gslist,sp);

typedef gslist(sp) shape_lst;

typedef gslist_iterator(sp) sp_iterator;

поэтому shape_list можно описать так:

shape_lst shape_list;

К-во Просмотров: 312
Бесплатно скачать Статья: Законченная программа