Администратор Экрана

Вначале было намерение написать администратор экрана на C (а не на C++), чтобы подчеркнуть разделение уровней реализации. Это оказалось слишком утомительным, поэтому пришлось пойти на компромисс: используется стиль C (нет функций членов, виртуальных функций, определяемых пользователем операций и т.п.), однако применяются конструкторы, надлежащим образом описываются и проверяются параметры функций и т.д. Оглядываясь назад, можно сказать, что администратор экрана очень похож на C программу, которую потом модифицировали, чтобы воспользоваться средствами C++ не переписывая все полностью.

Экран представляется как двумерный массив символов, работу с которым осуществляют функции put_point() и put_line(), использующие при ссылке на экран структуру point:

// файл screen.h const XMAX=40, YMAX=24; struct point { int x,y; point() {} point(int a, int b) { x=a; y=b; } }; overload put_point; extern void put_point(int a, int b); inline void put_point(point p) { put_point(p.x,p.y); } overload put_line; extern void put_line(int, int, int, int); inline void put_line(point a, point b) { put_line(a.x,a.y,b.x,b.y); } extern void screen_init(); extern void screen_refresh(); extern void screen_clear(); #include

Перед первым использованием функции put экран надо инициализировать с помощью screen_init(), а изменения в структуре данных экрана отображаются на экране только после вызова screen_refresh(). Как увидит пользователь, это "обновление" ("refresh") осуществляется просто посредством печати новой копии экрана под его предыдущим вариантом. Вот функции и определения данных для экрана:

#include "screen.h" #include enum color { black='*', white=' ' }; char screen[XMAX][YNAX]; 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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: