Skip to content

Преобразование изображений в консольный текст

Notifications You must be signed in to change notification settings

AIexandrKotov/KTX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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.

npp7

Для вывода списков используются методы 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.

4. Блоки KTX.KeyBlock

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. Этот раздел разрабатывается

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

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

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

6. Методы KTX.Console

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

Лицензия

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

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

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

About

Преобразование изображений в консольный текст

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages