Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

KTX

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

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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

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

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

pascal
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>

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

pascal
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

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

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

pascal
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 задаётся одной строкой:

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

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

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

pascal
  var b := new KTX.KeyBlockBuilder;

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

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

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

pascal
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-конвертация, теперь уже старая):

4

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

<code>Этот раздел разрабатывается</code>

6. Методы KTX.Console

<code>Этот раздел разрабатывается</code>

Лицензия

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

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

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