项目作者: AIexandrKotov

项目描述 :
Модуль для удобной работы с консолью
高级语言: Pascal
项目地址: git://github.com/AIexandrKotov/KTX.git
创建时间: 2018-12-26T16:30:47Z
项目社区:https://github.com/AIexandrKotov/KTX

开源协议:

下载


KTX

Модуль для удобной работы с консолью

Содержит методы для создания псевдоокон и последовательности открытий “окон” внутри консоли

С помощью этого модуля можно запросто создать интерфейс для игры или софтовой программы

Кроме всего прочего, содержит и другие полезные средства.


Содержание:

1. Установка в директорию PascalABC.NET

2. Использование без установки в директорию

3. Блоки KTX.Block

4. Блоки KTX.KeyBlock

5. Класс KTX.Drawing и его использование

6. Методы KTX.Console

1. Установка в директорию PascalABC.NET

1) Для работы необходима среда PascalABC.NET последней версии

2) Скопируйте .pas файл в папку LibSource директории PascalABC.NET

3) Скопируйте .pcu файл в папку Lib директории PascalABC.NET

4) Если нужно использовать модуль, напишите в начале программы uses KTX;

Для полноценной работы необходима Windows XP и старше, на Windows 10 требуется включить опцию консоли “Использовать прежнюю версию консоли”.
Без этой опции работать будет далеко не всё (Особенно это касается изменения размера окна).

2. Использование без установки в директорию

1) Для работы необходима среда PascalABC.NET последней версии

2) Скопируйте .pas и .pcu файлы в папку с вашей программой

3) Напишите в начале программы uses KTX;

3. Блоки KTX.Block

Любой блок задаётся следующим образом:

  1. 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. Типичный блок выглядит так:

  1. uses KTX;
  2. begin
  3. var b := new KTX.Block;
  4. while b do
  5. begin
  6. b.Reload;
  7. //Интерфейс блока
  8. b.Read;
  9. //Условия переходов между блоками
  10. end;
  11. end.

b.Reload всегда должно быть перед всем остальным, так как оно очищает консоль

Самым первым условием обычно прописывается выход из блока: if b.Input=’0’ then b.Close;


Простейшая программа, выводящая меню будущей игры:

  1. uses KTX;
  2. begin
  3. var menu := new KTX.Block;
  4. while menu do
  5. begin
  6. menu.Reload;
  7. Console.DrawOn(1,1,'(1) Новая игра');
  8. Console.DrawOn(1,2,'(2) Продолжить игру');
  9. Console.DrawOn(1,3,'(3) Настройки');
  10. Console.DrawOn(1,4,'(0) Выход');
  11. menu.Read;
  12. if menu.Input = '0' then menu.Close;
  13. end;
  14. end.

npp7

Для вывода списков используются методы Console.Resize(<начальная позиция списка>, <размер списка>) и b.ReadWithResize(<начальная позиция списка>, <размер списка>)

Следующий код реализует список из 50-ти элементов, в каждый из которых можно “заглянуть”.

  1. uses KTX;
  2. begin
  3. var b := new KTX.Block;
  4. while b do
  5. begin
  6. b.Reload;
  7. var first := 1;
  8. var count := 50;
  9. Console.Resize(first, count);
  10. for var i:=0 to count-1 do
  11. Console.DrawOn(1, first+i, $'({i+1}) ...');
  12. b.ReadWithResize(first, count);
  13. if b.Input = '0' then b.Close;
  14. if (b.OutIsDigit) and (b.Output > 0) and (b.Output <= count) then
  15. begin
  16. var bb := new KTX.Block;
  17. while bb do
  18. begin
  19. bb.Reload;
  20. Console.DrawOn(1, 1, $'Элемент списка #{b.Output}');
  21. bb.Read;
  22. if bb.Input = '0' then bb.Close;
  23. end;
  24. end;
  25. end;
  26. end.

4. Блоки KTX.KeyBlock

KeyBlock’и нужны для системы последовательного открывания блоков, как в KTX.Block, но с главным отличием — в качестве ввода используется не строки, введённые с клавиатуры, а сами клавиши клавиатуры.
Простейший KeyBlock задаётся одной строкой:

  1. var a := new KTX.KeyBlock(() -> StandardKeyBlocksBuilders.BuildCleanKeyBlock.ToKeyBlock);

Что бы создать любой KeyBlock используются строители этого типа — KeyBlockBuilder’ы.

Задаются они легко:

  1. var b := new KTX.KeyBlockBuilder;

Что бы выделить KeyBlock из строителя используется фукнция .ToKeyBlock b.ToKeyBlock

Но рекомендуется описывать строителя в лямбде конструктора KeyBlock’а.

Как, например, в этом случае:

  1. uses KTX;
  2. begin
  3. var b := new KTX.KeyBlock(() ->
  4. begin
  5. var k := new KTX.KeyBlockBuilder;
  6. k.AddStage(1,100,1);
  7. k.StandardStage := 0;
  8. k.CheckStages := true;
  9. k.AddExiter(Key.Escape);
  10. k.AddConfirmer(Key.Enter);
  11. k.AddIncreasers(Key.DownArrow, Key.S);
  12. k.AddDecreasers(Key.UpArrow, Key.W);
  13. Result := k.ToKeyBlock;
  14. end);
  15. while b do
  16. begin
  17. b.Reload;
  18. Console.DrawOn(1,1,b.Stage[0]);
  19. b.Read;
  20. if b.Confirm then b.CurrentStage+=20;
  21. end;
  22. end.

В этом примере стрелками вы сможете изменить значение числа (позиции) на 1, нажав Enter — увеличить на 20. Escape закроет текущий блок.

Если вы хотите задать собственные зависимости клавиш внутри блока, можете просто выключить стандартную проверку позиций k.CheckStages := false;, а также не заполнять Exiters (клавиши выхода) и Confirmers.
Этот раздел разрабатывается

5. Класс KTX.Drawing и его использование

На что способен KTX.Drawing (new-конвертация, теперь уже старая):

4

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

Этот раздел разрабатывается

6. Методы KTX.Console

Этот раздел разрабатывается

Лицензия

Вы можете встраивать этот .pcu-модуль в свои программы без указания меня как автора, но обязательно указать где-либо Made with KTX.StrFull или Используется KTX.StrFull


Если же всё-таки вы желаете указать меня как автора, то достаточно указать ссылку на этот репозиторий, указать где-либо KTX by Alexandr Kotov или оставить ссылку на мою страничку ВКонтакте


Изменять, модифицировать и распостранять можно.