Catalog · How the catalog works
KTX
Преобразование изображений в консольный текст
- ★ 2 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
KTX
Модуль для удобной работы с консолью
Содержит методы для создания псевдоокон и последовательности открытий "окон" внутри консоли
С помощью этого модуля можно запросто создать интерфейс для игры или софтовой программы
Кроме всего прочего, содержит и другие полезные средства.
Содержание:
1. Установка в директорию PascalABC.NET
2. Использование без установки в директорию
3. Блоки KTX.Block
4. Блоки KTX.KeyBlock
5. Класс KTX.Drawing и его использование
6. Методы KTX.Console
1. Установка в директорию PascalABC.NET
<ingore>1) </ignore>Для работы необходима среда PascalABC.NET последней версии
<ingore>2) </ignore>Скопируйте .pas файл в папку LibSource директории PascalABC.NET
<ingore>3) </ignore>Скопируйте .pcu файл в папку Lib директории PascalABC.NET
<ingore>4) </ignore>Если нужно использовать модуль, напишите в начале программы <code>uses KTX;</code>
Для полноценной работы необходима Windows XP и старше, на Windows 10 требуется включить опцию консоли "Использовать прежнюю версию консоли". Без этой опции работать будет далеко не всё (Особенно это касается изменения размера окна).
2. Использование без установки в директорию
<ingore>1) </ignore>Для работы необходима среда PascalABC.NET последней версии
<ingore>2) </ignore>Скопируйте .pas и .pcu файлы в папку с вашей программой
<ingore>3) </ignore>Напишите в начале программы <code>uses KTX;</code>
3. Блоки KTX.Block
Любой блок задаётся следующим образом:
var b := new KTX.Block;У блока есть три основных свойства:
Status — показатель, который влияет на продолжение цикла по текущему блоку, после создания имеет значение true, зачение false выставляется методом <code>.Close</code>
Input — строка, введённая пользователем в консоль, заполняется с помощью <code>.Read</code>, обнуляется с помощью <code>.Reload</code>
Output — целое число, ни на что не влияет, просто дополнительная переменная. Обнуляется до <code>integer.MinValue</code> в <code>.Reload</code> каждую итерацию цикла. Обычно используется как индекс массива при выводе списков.
И одно дополнительное:
OutIsDigit — возвращает true, если Input является целым числом. Внутри себя единожды на итерацию проводит вычисление Output, которое получает числовое представление Input, из-за чего очень удобно использовать конструкцию <code>if (b.OutIsDigit) and (b.Output > 100) then</code>
Что бы использовать блок, нужно начать цикл, в котором в качестве условия будет указано название блока. Рекомендется использовать цикл while. Типичный блок выглядит так:
uses KTX;
begin
var b := new KTX.Block;
while b do
begin
b.Reload;
//Интерфейс блока
b.Read;
//Условия переходов между блоками
end;
end.<code>b.Reload</code> всегда должно быть перед всем остальным, так как оно очищает консоль
Самым первым условием обычно прописывается выход из блока: <code>if b.Input='0' then b.Close;</code>
Простейшая программа, выводящая меню будущей игры:
uses KTX;
begin
var menu := new KTX.Block;
while menu do
begin
menu.Reload;
Console.DrawOn(1,1,'(1) Новая игра');
Console.DrawOn(1,2,'(2) Продолжить игру');
Console.DrawOn(1,3,'(3) Настройки');
Console.DrawOn(1,4,'(0) Выход');
menu.Read;
if menu.Input = '0' then menu.Close;
end;
end.
Для вывода списков используются методы <code>Console.Resize(<начальная позиция списка>, <размер списка>)</code> и <code>b.ReadWithResize(<начальная позиция списка>, <размер списка>)</code>
Следующий код реализует список из 50-ти элементов, в каждый из которых можно "заглянуть".
uses KTX;
begin
var b := new KTX.Block;
while b do
begin
b.Reload;
var first := 1;
var count := 50;
Console.Resize(first, count);
for var i:=0 to count-1 do
Console.DrawOn(1, first+i, $'({i+1}) ...');
b.ReadWithResize(first, count);
if b.Input = '0' then b.Close;
if (b.OutIsDigit) and (b.Output > 0) and (b.Output <= count) then
begin
var bb := new KTX.Block;
while bb do
begin
bb.Reload;
Console.DrawOn(1, 1, $'Элемент списка #{b.Output}');
bb.Read;
if bb.Input = '0' then bb.Close;
end;
end;
end;
end.4. Блоки KTX.KeyBlock
KeyBlock'и нужны для системы последовательного открывания блоков, как в KTX.Block, но с главным отличием — в качестве ввода используется не строки, введённые с клавиатуры, а сами клавиши клавиатуры. Простейший KeyBlock задаётся одной строкой:
var a := new KTX.KeyBlock(() -> StandardKeyBlocksBuilders.BuildCleanKeyBlock.ToKeyBlock);Что бы создать любой KeyBlock используются строители этого типа — KeyBlockBuilder'ы.
Задаются они легко:
var b := new KTX.KeyBlockBuilder;Что бы выделить KeyBlock из строителя используется фукнция .ToKeyBlock <code>b.ToKeyBlock</code>
Но рекомендуется описывать строителя в лямбде конструктора KeyBlock'а.
Как, например, в этом случае:
uses KTX;
begin
var b := new KTX.KeyBlock(() ->
begin
var k := new KTX.KeyBlockBuilder;
k.AddStage(1,100,1);
k.StandardStage := 0;
k.CheckStages := true;
k.AddExiter(Key.Escape);
k.AddConfirmer(Key.Enter);
k.AddIncreasers(Key.DownArrow, Key.S);
k.AddDecreasers(Key.UpArrow, Key.W);
Result := k.ToKeyBlock;
end);
while b do
begin
b.Reload;
Console.DrawOn(1,1,b.Stage[0]);
b.Read;
if b.Confirm then b.CurrentStage+=20;
end;
end.В этом примере стрелками вы сможете изменить значение числа (позиции) на 1, нажав Enter — увеличить на 20. Escape закроет текущий блок.
Если вы хотите задать собственные зависимости клавиш внутри блока, можете просто выключить стандартную проверку позиций <code>k.CheckStages := false;</code>, а также не заполнять Exiters (клавиши выхода) и Confirmers. <code>Этот раздел разрабатывается</code>
5. Класс KTX.Drawing и его использование
На что способен KTX.Drawing (new-конвертация, теперь уже старая):

На что он способен сейчас:

<code>Этот раздел разрабатывается</code>
6. Методы KTX.Console
<code>Этот раздел разрабатывается</code>
Лицензия
Вы можете встраивать этот .pcu-модуль в свои программы без указания меня как автора, но обязательно указать где-либо <code>Made with KTX.StrFull</code> или <code>Используется KTX.StrFull</code>
Если же всё-таки вы желаете указать меня как автора, то достаточно указать ссылку на этот репозиторий, указать где-либо <code>KTX by Alexandr Kotov</code> или оставить ссылку на мою страничку ВКонтакте
Изменять, модифицировать и распостранять можно.

