Модуль для удобной работы с консолью
Модуль для удобной работы с консолью
Содержит методы для создания псевдоокон и последовательности открытий “окон” внутри консоли
С помощью этого модуля можно запросто создать интерфейс для игры или софтовой программы
Кроме всего прочего, содержит и другие полезные средства.
Содержание:
1. Установка в директорию PascalABC.NET
2. Использование без установки в директорию
3. Блоки KTX.Block
4. Блоки KTX.KeyBlock
5. Класс KTX.Drawing и его использование
6. Методы KTX.Console
uses KTX;
Для полноценной работы необходима Windows XP и старше, на Windows 10 требуется включить опцию консоли “Использовать прежнюю версию консоли”.
Без этой опции работать будет далеко не всё (Особенно это касается изменения размера окна).
uses KTX;
Любой блок задаётся следующим образом:
var b := new KTX.Block;
У блока есть три основных свойства:
Status — показатель, который влияет на продолжение цикла по текущему блоку, после создания имеет значение true, зачение false выставляется методом .Close
Input — строка, введённая пользователем в консоль, заполняется с помощью .Read
, обнуляется с помощью .Reload
Output — целое число, ни на что не влияет, просто дополнительная переменная. Обнуляется до integer.MinValue
в .Reload
каждую итерацию цикла. Обычно используется как индекс массива при выводе списков.
И одно дополнительное:
OutIsDigit — возвращает true, если Input является целым числом. Внутри себя единожды на итерацию проводит вычисление Output, которое получает числовое представление Input, из-за чего очень удобно использовать конструкцию if (b.OutIsDigit) and (b.Output > 100) then
Что бы использовать блок, нужно начать цикл, в котором в качестве условия будет указано название блока. Рекомендется использовать цикл while. Типичный блок выглядит так:
uses KTX;
begin
var b := new KTX.Block;
while b do
begin
b.Reload;
//Интерфейс блока
b.Read;
//Условия переходов между блоками
end;
end.
b.Reload
всегда должно быть перед всем остальным, так как оно очищает консоль
Самым первым условием обычно прописывается выход из блока: if b.Input=’0’ then b.Close;
Простейшая программа, выводящая меню будущей игры:
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.
Для вывода списков используются методы Console.Resize(<начальная позиция списка>, <размер списка>)
и b.ReadWithResize(<начальная позиция списка>, <размер списка>)
Следующий код реализует список из 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.
KeyBlock’и нужны для системы последовательного открывания блоков, как в KTX.Block, но с главным отличием — в качестве ввода используется не строки, введённые с клавиатуры, а сами клавиши клавиатуры.
Простейший KeyBlock задаётся одной строкой:
var a := new KTX.KeyBlock(() -> StandardKeyBlocksBuilders.BuildCleanKeyBlock.ToKeyBlock);
Что бы создать любой KeyBlock используются строители этого типа — KeyBlockBuilder’ы.
Задаются они легко:
var b := new KTX.KeyBlockBuilder;
Что бы выделить KeyBlock из строителя используется фукнция .ToKeyBlock b.ToKeyBlock
Но рекомендуется описывать строителя в лямбде конструктора 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 закроет текущий блок.
Если вы хотите задать собственные зависимости клавиш внутри блока, можете просто выключить стандартную проверку позиций k.CheckStages := false;
, а также не заполнять Exiters (клавиши выхода) и Confirmers.Этот раздел разрабатывается
На что способен KTX.Drawing (new-конвертация, теперь уже старая):
На что он способен сейчас:
Этот раздел разрабатывается
Этот раздел разрабатывается
Вы можете встраивать этот .pcu-модуль в свои программы без указания меня как автора, но обязательно указать где-либо Made with KTX.StrFull
или Используется KTX.StrFull
Если же всё-таки вы желаете указать меня как автора, то достаточно указать ссылку на этот репозиторий, указать где-либо KTX by Alexandr Kotov
или оставить ссылку на мою страничку ВКонтакте
Изменять, модифицировать и распостранять можно.