BearLibTerminal — различия между версиями

Материал из Клуб любителей рогаликов
Перейти к: навигация, поиск
(Примеры)
Строка 459: Строка 459:
 
'''FreePascal'''<source lang="delphi">
 
'''FreePascal'''<source lang="delphi">
 
uses
 
uses
   BeaRLibTerminal,
+
   BeaRLibTerminal;
  Windows;
 
  
 
begin
 
begin

Версия 22:29, 20 августа 2014

BearLibTerminal — это небольшая (в интерфейсном плане) библиотека для организации терминал-подобного окна, вывода текста, обработки простого ввода.

Большое количество roguelike совершенно осознанно используют аскетичное символьное/псевдографическое оформление. Однако, использование стандартных средств вывода (командной строки ОС) сопряжено с досадными ограничениями скорости вывода, цветовой гаммы, используемого шрифта. Нетривиальной задачей оказывается и применение расширенного набора символов, например нескольких языков и псевдографики. BearLibTerminal позволяет обойти упомянутые ограничения оставаясь в рамках простой концепции "терминала": пользователю предоставляется прямоугольная сетка ячеек-знакомест, средства для вывода текста и чтения ввода с клавиатуры.

Достойными внимания особенностями терминала являются:

  • Высокая скорость вывода (в основе лежит OpenGL).
  • Возможность использования тайловых (в виде картинки) и векторных (TrueType) шрифтов.
  • Легкость использования Unicode.
  • Полная TrueColor палитра.
  • Возможность комбинации нескольких символов в одном знакоместе.
  • Поддержка ввода с клавиатуры и мыши.

BearLibTerminal не является:

  • Фреймворком roguelike: в библиотеке нет и никогда не будет генераторов случайных чисел, уровней или имен персонажей, механизмов расчета FOV/LOS и освещения, средств для работы с файлами или сетью.
  • Графическим движком общего назначения: функциональность библиотеки сознательно ограничивается функциональностью псевдотерминала (спорное утверждение для версий 0.9+).

Похожие инструменты: Tinycurses, libtcod.

Найти библиотеку можно в соответствующей теме форума (см. первое сообщение).

Элементарный пример использования

C/C++<source lang="cpp">

  1. include <BearLibTerminal.h>

TERMINAL_TAKE_CARE_OF_WINMAIN // Но можно и самостоятельно определить WinMain

int main() {

   terminal_open();
   // Выводим текст
   terminal_printf(1, 1, "Hello, world!");
   terminal_refresh();
   // Ждем, пока пользователь не закроет окно
   while (terminal_read() != VK_CLOSE); 
   terminal_close();

} </source>

Справка по интерфейсу библиотеки

BearLibTerminal оформлен в виде динамически подключаемой библиотеки (.dll). Используемое соглашение вызова — cdecl.

terminal_open

<source lang="cpp"> int terminal_open(); </source> Для начала работы с библиотекой необходимо вызвать функцию terminal_open. До вызова terminal_open все остальные функции библиотеки мгновенно завершаются, не выполняя никаких действий. terminal_open производит инициализацию терминала со "стандартными" параметрами: размер рабочей области 80x25 ячеек, шрифт Fixedsys Excelsior. Вызов terminal_open не приводит к немедленному выводу окна терминала на экран, окно отображается в момент первого вызова функции #terminal_refresh.

terminal_close

<source lang="cpp"> void terminal_close(); </source> Симметричный terminal_open вызов, закрывающий терминал и освобождающий используемые библиотекой ресурсы. Поведение программы, не вызвавшей terminal_open перед своим завершением, неопределено.

terminal_set

Данная функция представляет собой универсальный способ задания разнообразных настроек библиотеки и описания используемых тайлсетов. Опции задаются в виде строки с группами значений в следующем формате: group1.option1=value1; group1.option2=value2; ... Эта запись может быть сокращена до: group1: [option1=]value1, option2=value2; ... Например: <source lang="cpp"> terminal_set("window: size=80x25, title='Заголовок'; log.level=trace"); </source>

Динамическая библиотека предоставляет три варианта для строки из 8, 16 и 32-битных символов: terminal_set8, terminal_set16 и terminal_set32. Детали о разрядности символов должны быть скрыты хедером для конкретного языка программирования с учетом разрядности исрользуемых в языке строк. Например, для С/С++ этот вызов доступен в виде следующих функций: <source lang="cpp"> int terminal_set(const char* s); int terminal_wset(const wchar_t* s); </source> Кроме того, хедер для C/C++ предоставляет варианты с printf-подобным форматированием строки: terminal_[w]set[f](...);

Перечень доступных параметров

Наименование Значение по умолчанию Описание
Настройки окна, группа атрибутов terminal
encoding utf-8 Кодировка, в которой терминал воспринимает однобайтные (char*) строки.
Настройки окна, группа атрибутов window
size 80x25 Размер окна терминала в знакоместах в формате <ширина>x<высота>.
cellsize auto Размер ячейки знакоместа, в пикселях в формате <ширина>x<высота> или auto
title BearLibTerminal Заголовок окна терминала.
icon app.ico Имя .ico-файла с иконкой, которая будет использована для окна.
Настройки ввода, группа атрибутов input
events keypress Фильтр событий ввода, комбинация из флагов none, keypress, keyrelease, mousemove, mousescroll, all.
nonblocking false Если выставлен в true, вызовы terminal_read[_xxx] не приостанавливают выполнение программы, если очередь ввода пуста.
precise-mousemove false Флаг, указывающий, будет ли считаться движением мыши попиксельное (true) или познакоместное (false) перемещение указателя.
sticky-close true Если выставлен в false, то по закрытию окна событие VK_CLOSE генерируется однократно. Если выставлен в true, то по закрытию окна terminal_read будет постоянно возвращать VK_CLOSE.
cursor-symbol 95 (ASCII 0x5F, подчеркивание) Код символа, используемого в качестве курсора в terminal_read_str.
cursor-blink-rate 500 Скорость мерцания курсора в terminal_read_str, в миллисекундах.
Настройки вывода, группа атрибутов output
postformatting true Флаг, включающий или выключающий постформатирование при выводе текста.
vsync true Флаг, включающий или выключающий вертикальную синхронизацию при отрисовке.
Настройки растрового тайлсета, группа атрибутов font или U+xxxx (см. ниже)
name Описательное имя растрового ресурса: имя файла или адрес памяти.
size Размер одиночного тайла в пикселях в формате <ширина>x<высота>. Необязательный атрибут, если он не указан, считается что все изображение это один тайл.
resize <size> Размер, до которого нужно переразмерить растровое изображение. Необязательный атрибут.
resize-filter bilinear Фильтр, который будет использован при переразмерении изображения. Возможные варианты: nearest, bilinear, bicubic.
resize-mode stretch Режим переразмерения. Возможные варианты: stretch (растянуть), fit (вписать по большей стороне), crop (вписать по меньшей стороне).
raw-size <size> Размер исходного изображения в случае загрузки из памяти.
codepage ascii Кодовая таблица соответствия отдельных тайлов в тайлсете кодам Unicode.
align center/top-left Точка отсчета координат для центрирования тайла в ячейке. Возможные значения: center, top-left, top-right, bottom-left, bottom-right.
bbox 1x1 Размер логической ячейки, в которой выполняется центрирование тайла, в знакоместах.
transparent auto Цвет прозрачного фона для изображений без альфа-канала. Необязательный атрибут (и вообще используйте PNG).
Настройки TrueType тайлсета, группа атрибутов font или U+xxxx (см. ниже)
name Имя .ttf-файла шрифта
size Размер шрифта: либо средняя высота строчного символа в пикселях, либо размер ячейки в пикселях для автоматического подбора размера шрифта.
size-reference @ Необязательный атрибут. Код символа, используемого для оценки/подбора размера шрифта.
mode normal Режим растеризации. Возможные варианты: monochrome, normal или lcd.
codepage utf-8 Кодовая таблица нестандартного соответствия кодов Юникода и символов шрифта.
align center Точка отсчета координат для центрирования символа в ячейке. Возможные значения: center, top-left, top-right, bottom-left, bottom-right.
bbox 1x1 Размер логической ячейки, в которой выполняется центрирование тайла, в знакоместах.
Настройки логгирования, группа атрибутов log
file bearlibterminal.log Имя файла, куда в библиотека будет писать свой лог.
level error Уровень важности логгирования: none, fatal, error, warning, info, debug, trace
mode truncate Режим ведения лога. Возможные варианты: truncate (начинать файл заново при каждом новом старте) и append (дописывать в конец файла).

Использование тайлсетов

Растровые тайлсеты

Технически, терминал предоставляет ~65 тысяч слотов под символы (16-битное кодовое пространство UCS-2/UTF-16). Каждому слоту может быть назначен тайл произвольного размера.

Тайлы могут быть загружены индивидуально: <source lang="cpp"> terminal_set("0xE000: tile.png"); </source> В таком случае изображение из файла однозначно соответствует указанному "коду символа" и может быть помещено в ячейку на сцене посредством #terminal_put или #terminal_print.

Также, тайлы могут быть загружены в составе одного тайлсета: <source lang="cpp"> terminal_set("0xE100: tileset.png, size=32x32"); </source> В этом случае изображение из файла нарезается на кусочки указанного размера (в приведенном примере это 32x32) и эти кусочки-тайлы назначается кодам символов начиная с указанного (в приведенном примере это 0xE100). Например, если tileset.png является картинкой 64x64 пикселей, то она будет нарезана на четыре части, и указанная выше команда подгрузит тайлы с кодами 0xE100, 0xE101, 0xE102 и 0xE103. Порядок выбора кусочков из исходного изображения -- построчно, слева направо.

В качестве стартового кода (кода символа, с которого начинается отсчитываться тайлсет) может быть указано любое число от 0x0000 до 0xFFFD в десятичном или шестнадцатиричном формате. Коды 0xFFFE и 0xFFFF зарезервированы. Основной шрифт, задаваемый посредством тайлсета "font", имеет стартовый код 0. Фактически, слово "font" в этом контексте является просто синонимом числа 0.

Кодовые страницы

Тайлсет шрифта может содержать тайлы, коды символов которых не располагаются последовательно. Например тайлсет шрифта в кодировке Windows-1251, где первая половина соответствует ASCII и имеет коды 0-127, а вторая половина содержит символы национального алфавита и разбросана в большом промежутке кодов вплоть до 0x044F. Для того, чтобы тайлы в тайлсете могли быть назначены не только строго последовательно, при его загрузке используется параметр codepage: <source lang="cpp"> terminal_set("font: tileset_1251.png, size=8x16, codepage=1251"); </source> В таком случае, коды для тайлов выбираются по порядку из указанной кодовой страницы. Таблицы некоторых кодовых страниц встроены в терминал: 437, 866, 1250, 1251. Недостающие таблицы могут быть заданы явно, для этого в качестве значения параметра codepage надо указать имя файла с таблицей в следующем формате: <source lang="plaintext"> U+0000-U+007F, U+0402, U+0403, ... </source>

Выравнивание

Каждый тайл/тайлсет имеет свойство выравнивания в ячейке. Одиночные растровые тайлы выровнены по верхнему левому углу (верхний левый угол изображения будет совпадать с верхним левым углом ячейки, куда положен тайл). Растровые тайлсеты, даже из пары тайлов, выравниваются по центру (центр изображения совпадает с центром ячейки). Для того, чтобы изменить это (например, загружается тайлсет не с символами, для которых необходимо центрирование, а набор тайлов для карты), следует использовать параметр align, принимающие одно из следующих значений: center, top-left, top-right, bottom-left, bottom-right. Например: <source lang="cpp"> terminal_set("0xE200: terrain.png, size=32x32, align=top-left"); </source>

Помимо выравнивания в одной ячейке, может возникнуть необходимость выравнивания тайла в пределах большей области. Например, большой символ, которым обозначается многоклеточный монстр. Выравнивание таких символов в области из 2x2 знакомест может оказаться нетривиальной задачей даже с применением попиксельного смещения. В этом случае можно указать параметр bbox, относительно которого будет производиться выравнивание: <source lang="cpp"> terminal_set("0xE300: monsters.png, size=32x32, align=center, bbox=2x2"); </source> Тогда изображение будет отцентрировано в блоке из четырех ячеек, начиная с той, в которую помещен тайл.

TrueType тайлсеты

Помимо вышеописанных растровых тайлсетов, тайлы могут быть загружены из TrueType шрифта: <source lang="cpp"> terminal_set("font: VeraMono.ttf, size=12"); </source>

Размер символа в TrueType тайлсете можно задать двумя способами. Во-первых, указав средний размер строчного символа, как в примере выше. Во-вторых, указав размер некоторой ячейки (может не совпадать с размерами ячейки-знакоместа): <source lang="cpp"> terminal_set("font: VeraMono.ttf, size=16x16"); </source> В этом случае библиотека самостоятельно подберет размер шрифта таким, чтобы его символы вписывались в указанные пределы (без изменения пропорций).

В растровом тайлсете-картинке отдельные тайлы расположены последовательно и для трансляции индексов в коды символов пространства Unicode используется кодовая страница. В шрифте TrueType символам уже назначены правильные коды Unicode. Это удобно для установки основного шрифта в терминале, но является проблемой, если хочется иметь в распоряжении символы из нескольких TrueType шрифтов. В этом случае также используется кодовая страница, однако ее смысл противоположен таковой у растрового тайлсета. Если при загрузке тайлсета из TrueType шрифта указана некоторая кодовая страница, то она определяет порядок в котором символы из шрифта будут помещены в последовательные слоты тайлов. Например: <source lang="cpp"> terminal_set("0xE400: UbuntuMono-R.ttf, size=12, codepage=1251"); </source> В приведенном примере, начиная с 0xE400 будут загружены 255 последовтельных тайлов (0xE400-0xE4FF), в порядке кодовой страницы Windows-1251. В частности, тайл с кодом 0xE4DF (0xE400 + 0xDF) будет содержать изображение буквы 'Я' (код 0xDF в Windows-1251). Это позволяет, пожертвовав полноценной поддержкой Unicode, иметь в распоряжении более-менее полные наборы символов из разных шрифтов. В комбинации с тегом постформатирования base функции #terminal_print это позволяет выводить текст несколькими шрифтами одновременно.

Параметры align и bbox имеют такой же смысл, как и для растрового тайлсета.

terminal_put

<source lang="cpp"> void terminal_put(int x, int y, int code); </source> Одна из основных функций библиотеки, позволяет вывести символ в знакоместо с указанными координатами. В зависимости от выбранного режима смешения, выводимый символ может заменить собой все содержимое указанного знакоместа или быть добавленным поверх уже имеющихся (см. #terminal_composition). Для ячеек первого слоя terminal_put применяет цвет фона.

terminal_put_ext

<source lang="cpp"> void terminal_put_ext(int x, int y, int dx, int dy, int code, color_t* corners); </source> Расширенный вывод символа в ячейку. Позволяет задать смещение в пикселях относительно обычного положения тайла (dx, dy) и индивидуальные цвета углов тайла (corners). Если цвета не заданы (последним аргументом передано 0), то используется текущий цвет, установленный #terminal_color.

terminal_color

<source lang="cpp"> void terminal_color(color_t color); </source> Устанавливает основной цвет выводимого текста (тайлов). Функция принимает целое беззнаковое 32-битное число, представляющее цвет в формате 0xAARRGGBB. В хедере для C++ имеется перегруженный вариант, принимающий строку с именем цвета.

См. #color_from_argb, #color_from_name, #Постформатирование.

terminal_bkcolor

<source lang="cpp"> void terminal_bkcolor(color_t color); </source> Аналогичная terminal_color функция, но устанавливающая цвет фона выводимых символов.

Цвет фона применяется к знакоместам только в первом слое (см. #terminal_layer).

terminal_composition

<source lang="cpp"> void terminal_composition(int mode); </source> Функция устанавливает режим наложения тайлов в одной ячейке: TK_COMPOSITION_ON или TK_COMPOSITION_OFF.

В режиме TK_COMPOSITION_OFF выводимый символ полностью замещает содержимое соответствующего знакоместа, цвет фона устанавливается в выбранный посредством #terminal_bkcolor цвет. Это обычное поведение терминал-подобных приложений.

В режиме TK_COMPOSITION_ON выводимый символ "накладывается" на уже имеющиеся в ячейке символы, причем каждый отдельный символ в получившейся "стопке" может иметь индивидуальный цвет (и даже индивидуальное смещение и цвета углов, см. #terminal_put_ext. Таким образом можно комбинировать глифы и/или тайлы для получения более сложных фигур.

terminal_layer

<source lang="cpp"> void terminal_layer(int layer); </source> Функция устанавливает текущим слой с указанным номером. Доступны слои с номерами от 0 до 255. Цвет фона у ячеек имеется только у первого слоя, ячейки остальных слоев имеют прозрачный фон. Функция #terminal_clear_area работает только с текущим слоем, в то время как #terminal_clear очищает все содержимое сцены, все слои.

terminal_print

<source lang="cpp"> int terminal_print(int x, int y, const char* s); </source> Аналогично #terminal_set, библиотека предоставляет несколько вариантов функции для строк различной разрядности, но хедер к С/С++ скрывает это и вызов доступен для char* и wchar_t* строк с форматированием и без: terminal_[w]print[f]. В строке, передаваемой в функцию terminal_print могуть присутствовать теги постформатирования, модифицирующие производимый вывод:

Цвет текста и фона:
terminal_print(2, 1, "[color=amber]Amber[/color] letters, [bkcolor=darkest gray]gray background[/bkcolor].");

Произвольный символ:
terminal_print(2, 1, "Earth rune: [U+E001]");

Комбинация символов:
terminal_print(2, 1, "a[+]^");
Такой тег комбинирует два тайла как будто бы они были положены в одну ячейку с включенным наложением (TK_COMPOSITION_ON).

Межсимвольный интервал:
terminal_print(2, 1, "[spacing=2x2]sparse text");
Межсимвольный/межстрочный интервал необходим для вывода текста тайлами размером более одного знакоместа.

Сдвиг кодовой страницы:
terminal_print(2, 1, "[base=0xE000:1251]Русский текст");
Сдвиг страницы позволяет выводить текст тайлсетом в произвольной кодировке и загруженным по произвольному коду.

terminal_clear

<source lang="cpp"> void terminal_clear(); </source> Функция очистки экрана. Содержимое всех ячеек-знакомест во всех слоях удаляется, цвет фона устанавливается в выбранный посредством #terminal_bkcolor цвет.

terminal_clear_area

<source lang="cpp"> void terminal_clear_area(int x, int y, int w, int h); </source> Функция частичной очистки экрана. Удаляется содержимое ячеек-знакомест в указанной области экрана текущего слоя.

terminal_refresh

<source lang="cpp"> void terminal_refresh(); </source> Функция обновления экрана. Эта функция должна быть вызвана, чтобы изменения содержимого терминала на самом деле отобразились на экране. Окно терминала выводится на экран при первом вызове terminal_refresh.

terminal_has_input

<source lang="cpp"> int terminal_has_input(); </source> Позволяет узнать, есть ли события в очереди ввода. Возвращает 0, если очередь пуста или 1, если есть непрочитанные события.

terminal_read

<source lang="cpp"> int terminal_read(); </source> Возвращает код следующего событие из очереди ввода.

Если очередь ввода пуста, поведение зависит от параметра input.nonblocking:

  • false: выполнение программы блокируется до поступления следующего события ввода.
  • true: блокирования выполнения программы не производится, в случае пустой очереди ввода функция немедленно возвращает TK_INPUT_NONE.

См. #Ввод

terminal_read_ext

<source lang="cpp"> int terminal_read_ext(int flags); </source> Расширенная версия чтения очереди ввода. Параметр flags может включать в себя следующие флаги:

  • TK_READ_CHAR: функция пытается выбрать из очереди текстовый символ. В случае, если следующее событие в очереди ввода не порождает текcтовый ввод, возвращается TK_INPUT_CALL_AGAIN, не убирая событие из очереди.
  • TK_READ_NOREMOVE: функция не убирает прочитанное событие из очереди. Следующий вызов вернет такое же значение.

terminal_read_str

<source lang="cpp"> int terminal_read_str(int x, int y, char* buffer, int max); int terminal_read_wstr(int x, int y, wchar_t* buffer, int max); </source> Функция чтения текста с клавиатуры с учетом локалей и раскладок пользователя. Набираемые пользователем символы добавляются к строке в буфере buffer, при этом максимальный размер получаемой строки ограничивается max символами.

Поведение функции сильно зависит от параметра input.nonblocking. Если он равен false (по умолчанию), то в процессе работы функции ввод полностью обрабатывается терминалом. В это время содержимое строки и курсор ввода отображается в терминале начиная с позиции (x, y). Чтение ввода функцией terminal_read_str в блокирующем режиме производится до:

  • Подтверждения ввода (поступления события TK_RETURN). Функция возвращает количество введенных символов (значение больше либо равное нулю).
  • Отмены ввода (поступления события TK_ESCAPE или TK_CLOSE). Функция возвращает TK_INPUT_CANCELLED.

По завершении, terminal_read_str убирает введенную строку и курсор ввода с экрана, восстанавливая предыдущее содержимое использованных ячеек-знакомест.

Если input.nonblocking равен true (неблокирующее чтение), функция terminal_read_str не трогает экран, а только производит чтение доступной очереди ввода. В неблокирующем режиме:

  • По подтверждению ввода (TK_RETURN) функция возвращает количество введенных символов.
  • По отмене ввода (TK_ESCAPE или TK_CLOSE) функция возвращает TK_INPUT_CANCELLED.
  • Если очередь ввода пуста, функция возвращает TK_INPUT_CALL_AGAIN.

Задача отрисовки процесса ввода (текст, курсор) ложится на пользователя библиотеки.

Размер передаваемого в функцию буфера должен быть достаточно большим, чтобы вместить максимально возможную вводимую строку. Так как параметр max указывается в символах, без учета нуль-терминатора, это означает, что для вызова в кодировке UTF-8 (terminal_read_str) буфер должен быть размером не менее max*3+1 (каждый символ может занять до трех байт + нуль-терминатор), а для UTF-16/32 вызова (terminal_read_wstr) -- не менее max+1.

См. #Ввод

terminal_state

<source lang="cpp"> int terminal_state(int code); </source> Данная функция позволяет получить текущее состояние некоторых переменных терминала. Код переменной берется из перечисления TK_xxx.

  • Состояние клавиш: коды TK_ESCAPE, TK_0, TK_NUMPAD0, TK_A и т. д. Функция возвращает 1, если клавиша нажата или 0, если отпущена.
  • Состояние мыши: TK_MOUSE_X и TK_MOUSE_Y (в знакоместах), TK_MOUSE_PIXEL_X, TK_MOUSE_PIXEL_Y (в пикселях), TK_MOUSE_WHEEL (в шагах колесика).
  • Размеры экрана в знакоместах: TK_WIDTH, TK_HEIGHT.
  • Размеры знакоместа в пикселях: TK_CELL_WIDTH, TK_CELL_HEIGHT.
  • Текущие параметры сцены: TK_COMPOSITION, TK_COLOR, TK_BKCOLOR, TK_LAYER.

В зависимости от выбранного фильтра событий ввода (input.events), состояние клавиш и мыши возвращается не на момент вызова, а соответствующее текущему состоянию очереди ввода. Обновление значений, возвращаемых функцией terminal_state, производится по мере выбора соответствующих событий из очереди ввода посредством terminal_read.

Например, если пользователь нажмет сочетание клавиш Shift+Z, в очереди ввода оно будет представлено как Shift(нажато), Z(нажато), Z(отпущено), Shift(отпущено). На момент выбора из очереди ввода события о нажатии клавиши Z, состояние клавиши Shift будет точно "нажато", даже если обработка ввода будет произведена несвоевременно и на самом деле клавиша Shift к тому моменту будет уже отпущена. Это позволяет производить проверку нажатия сочетаний клавиш элементарным образом: <source lang="cpp"> int code = terminal_read();

if (code == TK_Z) {

   if (terminal_state(TK_SHIFT))
   {
       // Нажато Shift+Z
   }
   else if (terminal_state(TK_CTRL))
   {
       // Нажато Ctrl+Z
   }
   else
   {
       // Нажата просто Z
   }

} </source> Однако, если событие не попадает под фильтр событий ввода (input.events), оно не может быть выбрано из очереди посредством terminal_read и будет обработано автоматически. В пределе, если фильтр равен none, то все события обрабатываются автоматически и terminal_state всегда возвращает текущее (последнее) состояние.

color_from_argb

<source lang="cpp"> color_t color_from_argb(int a, int r, int g, int b); </source> Простая вспомогательная функция, собирающая из отдельных R, G, B и A компонент одно 32-битное число, которым представляется цвет в библиотеке (0xAARRGGBB).

color_from_name

<source lang="cpp"> color_t color_from_name(const char* name); </source> Данная функция возвращает цвет (его числовое представление) по имени из встроенной в библиотеку палитры. Эта палитра практически полностью повторяет палитру из libtcod. Имя указывается в виде "оттенок" или "яркость оттенок", где возможными значениями являются:

Яркость lightest, lighter, light, dark, darker, darkest
Оттенок grey или gray, red, flame, orange, amber, yellow, lime, chartreuse, green, sea, turquoise, cyan, sky, azure, blue, han, violet, purple, fuchsia, magenta, pink, crimson

Также, по имени цвет можно использовать в тегах color и bkcolor функции terminal_printf: <source lang="cpp"> terminal_color("lighter gray"); // Основным цветом выбран светло-серый terminal_printf(1, 1, "You see a [color=dark red]glowing[/color] stone."); // Слово glowing будет темно-красным </source>

Ввод

...

Примеры

FreePascal<source lang="delphi"> uses

 BeaRLibTerminal;

begin

 terminal_open();

 // Выводим текст
 terminal_print(1, 1, 'Hello, world!');
 terminal_refresh();
 // Ждем, пока пользователь не закроет окно
 while (terminal_read() <> TK_CLOSE) do; 

 terminal_close();

end. </source>


C#<source lang="csharp"> using System; using BearLib;

namespace HelloWorld {

   static class Program
   {
       static void Main()
       {
           Terminal.Open();
           // Выводим текст
           Terminal.Print(1, 1, "Hello, world!");
           Terminal.Refresh();
           // Ждем, пока пользователь не закроет окно
           while (Terminal.Read() != Terminal.Keys.Close);
           Terminal.Close();
       }
   }

} </source>