Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Пример.

Следующий пример показывает, каким образом можно использовать преди-

кат resize, чтобы заставить окна "распахиваться".

/* Program CH14EX04.PRO */

predicates

exp_window(integer)

clauses

exp_window(0) :- !.

exp_window(N) :-

makewindow(_, _, _, _, A, B, C, D),

A1 = A-1, B1 = B-2, C1 = C+2, D1 = D+4,

resizewindow(A1,B1,C1,D1),

N1 = N-1, exp_window(N1).

goal

makewindow(1, 7, 7, "TEST 1", 10, 20, 3, 10),

exp_window(9),

makewindow(2, 7, 7, "TEST 2", 12, 50, 3, 10),

exp_window(9),

makewindow(3, 7, 7, "TEST 3", 14, 16, 3, 10),

exp_window(8).

Framewindow/1

Эта версия framewindow изменяет цвет рамки текущего окна:

framewindow(FrAttr) /* (i) */

Если FrAttr=0, то рамка вокруг окна исчезает.

Framewindow/4

Эта версия framewindow может изменить как цвет, так и символы ис-

пользуемые для рамки.

framewindow(FrAttr,Header,HeaderPos,BorderChars) /* (i,i,i,i) */

Header - заголовок окна

HeaderPos- расположение заголовка

=255 в центре рамки

<>255 в заданном месте

BorderChars определяет как рисовать рамку.

1 символ: верхний левый угол;

2 символ: верхний правый угол;

3 символ: нижний левый угол;

4 символ: нижний правый угол;

5 символ: горизонтальная линия;

6 символ: вертикальная линия.

Например,

"\218\191\192\217\196\179" определяет рамку из одной линии;

"\201\187\200\188\205\186" определяет рамку из двух линий;

"++++-[" определяет другую рамку

Colorsetup/1

Этот предикат позволяет пользователю в диалоговом режиме изменять

цвет текущего окна и рамки.

colorsetup(Main_or_Frame) /* (i) */

colorsetup использует поле выбора цвета аналогичное тому, что появ-

ляется, когда вы выбираете режим Setup/Colors среды Турбо Пролога. При

этом:

colorsetup(0) - изменяет цвет окна

colorsetup(1) - изменяет цвет рамки

attribute/

Этот предикат устанавливает или читает величину атрибута (цвета букв

и фона) всех позиций экрана по умолчанию.

attribute(Attr) /* (i),(o) */

Если переменная Attr свободна, то предикат связывает ее с текущей

величиной атрибута.

scroll/2

Предикат scroll осуществляет "прокрутку" содержимого окна. Окна мо-

гут "прокручиваться" вверх, вниз, влево или вправо

scroll(NamberOfLines,NamberOfColumns) /* (i,i) */

Задание положительных значений аргументов соответствуют прокрутке

вниз и вправо, а отрицательные значения соответствуют прокрутке вверх и

влево.

cursorform/2

Этот предикат определяет высоту курсора.

cursorform(StartLn,EndLn) /* (i,i),(o,o) */

Аргументы задают линейку внутри ячейки каждого символа, где начина-

ется курсор, и линейку, где курсор кончается.

snowcheck/2

Этот предикат устанавливает или считывает состояние snow-cheking ви-

деоустройства вывода CGA, в зависимости от того, свободен или связан па-

раметр Status.

snowcheck(Status) /* (i),(o) */

Если Status связан с одной из предопределенных констант on или off,

будет переключен snow-cheking. Если в момент обращения к предикату

snowcheck переменная Status свободна, то она принимает значение текущего

состояния snow-cheking CGA.

Ввод/вывод на экран.

Стандартные предикаты базового ввода/вывода (readln,readint,

readchar, write,writet,nl) осуществляют обмен информацией с последним

созданным окном в текущей позиции курсора. Однако, семейства стандартных

предикатов read и write недостаточно для более полного использования воз-

можностей экрана и окон Турбо Пролога. Ниже приведены некоторые другие

специализированные стандартные предикаты, которые облегчают манипулирова-

ние экраном и окнами. В этом параграфе мы сначала опишем эти предикаты

ввода/ вывода, а затем используем некоторые из них, чтобы создать прог-

рамму, которая может стать основой компьютерной игры "со стрельбой".

Доступ и управление экраном может выполняться на трех уровнях:

-одним символом (scr_char,scr_attr)

-одним полем символов, где поле символов это любая непрерывная

последовательность символов, расположенных на одной строке

(field_str,field_attr)

-одним целым окном (window_str, window_attr).

Соседние файлы в папке Документация