Хрестоматия по программированию на Си в Unix




Экранные библиотеки и работа с видеопамятью. Хрестоматия по программированию на Си в Unix - стр. 3


Для начала напишите "выскакивающее" окно с сообщением; окно должно исчезать по нажатию любой клавиши.

c = message(x, y, text);

Размер окна вычисляйте по длине строки text. Код клавиши возвращайте в качестве значения функции.

Теперь сделайте text массивом строк: char *text[]; (последняя строка - NULL).

Сделайте так, чтобы "выскакивающие" окна имели тень. Для этого надо сохранить в некоторый буфер атрибуты символов (сами символы не надо!), находящихся на местах $:

########## ##########$ ##########$ $$$$$$$$$$

а затем прописать этим символам на экране атрибут 0x07 (белый по черному). При стирании окна (puttext-ом) следует восстановить спасенные атрибуты этих символов (стереть тень). Если окно имеет размер xlen*ylen, то размер буфера равен xlen+ylen-1 байт.

Напишите функцию, рисующую на экране прямоугольную рамку. Используйте ее для рисования рамки окна.

Напишите "выскакивающее" окно, которое проявляется на экране как бы расширяясь из точки:

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

Вам следует написать функцию box(x,y,width,height), рисующую цветной прямоугольник с верхним левым углом (x,y) и размером (width,height). Пусть конечное окно задается углом (x0,y0) и размером (W,H). Тогда "вырастание" окна описывается таким алгоритмом:

void zoom(int x0, int y0, int W, int H){ int x, y, w, h, hprev; /* промежуточное окно */ for(hprev=0, w=1; w < W; w++){ h = H * w; h /= W; /* W/H == w/h */ if(h == hprev) continue; hprev = h; x = x0 + (W - w)/2; /* чтобы центры окон */ y = y0 + (H - h)/2; /* совпадали */ box(x, y, w, h); delay(10); /* задержка 10 миллисек. */ } box(x0, y0, W, H); }

Составьте библиотеку функций, аналогичных библиотеке curses, для ЭВМ IBM PC в ОС XENIX. Используйте прямой доступ в видеопамять.

Напишите рекурсивное решение задачи "ханойские башни" (перекладывание дисков: есть три стержня, на один из них надеты диски убывающего к вершине диаметра. Требуется переложить их на третий стержень, никогда не кладя диск большего диаметра поверх диска меньшего диаметра). Усложнение - используйте пакет curses для изображения перекладывания дисков на экране терминала. Указание: идея рекурсивного алгоритма:




Содержание  Назад  Вперед