Введение в язык Си++

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


Вначале было намерение написать администратор экрана на 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

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

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

void screen_refresh() // обновление { for (int y=YMAX-1; 0



Содержание раздела