BearLibTerminal - псевдоконсольное окно для рогалика

Форум библиотеки BeaRLib

Модератор: Apromix

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 22 фев 2017, 08:29

Нашел на гитхабе обертку для go, но не получается скомпилить, показывает ошибку:
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

package ddd

//import "fmt"
import "gopherlibterminal"

func main() {
	/*glt.Open()
	defer glt.Close()
	glt.Print(0, 0, "Hello, world!")
	glt.Refresh()
	glt.Delay(1000)*/
	//fmt.Println("Hello++++, world!")
}
Никто не знает, что может быть? Как устанавливал go? Скачал msi и установил. Как IDE использую LiteIDE.

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 22 фев 2017, 09:12

Обертка для Go есть и в репозитории терминала. Она более официальная, как минимум в том смысле что будет обновляться и исправляться моими силами.

Ошибка на скриншоте из-за того, что cgo не может найти GCC (лодку мне). "cgo" -- это такая штука, которая использует GCC для того, чтобы склеить С и GO, оно натурально компилирует BearLibTerminal.h как ANSI C в процессе. Логично, что без доступного в системе GCC это не сработает. Btw, в .h из "релизных" архивов ошибка, из-за которой cgo будет ругаться. Пока надо брать .h из репозитория.
Пытается раскуклиться

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 22 фев 2017, 09:35

Все понятно. Спасибо. Не ожидал, что для запуска go еще и C нужен :) Дальше я думаю сам разберусь.

altmax
Сообщения: 173
Зарегистрирован: 15 сен 2012, 11:59

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение altmax » 28 фев 2017, 18:28

Apromix писал(а):
11 авг 2016, 05:05
Можно добавить в терминал рисование точки, линии, прямоугольника и круга орп. цветом. Так можно будет отрисовать рамку для тайла и полоску здоровья :D Вообще эти два элемента наверное можно добавить в терминал тоже, думаю почти в каждом рогалике будут использоваться))

Так уже все реализовано с первой версии )))
Не знаю, писали об это или нет, но сегодня я открыл для себя всю мощь функции terminal_put_ext с включенным terminal_composition. Можно рисовать что угодно и как угодно, для этого нужен всего лишь символ в виде точки (из одного или нескольких пикселов) и написанные функции, которые будут этим символом рисовать по определенному алгоритму - хоть круги определенного радиуса, хоть линии, хоть рамки, правда без сглаживания. Я, например, с помощью этой функции нарисовал миникарту уровня как в Dungeon Crawl, т.к. весь уровень не умещается в окно терминала (см. в правом нижнем углу, место для неё выбрал первое попавшееся для тестирования, потому кривовато выглядит, для рисования использовался символ 0x02D9(729) - точка 2х2 символа).
Вложения
tempmap.jpg
tempmap.jpg (85.88 КБ) 6178 просмотров

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 28 фев 2017, 18:41

Неожиданно :lol:

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение karagy » 28 фев 2017, 18:45

Я тоже чуть не поперхнулся. В голову полезли всякие пословицы о ... нецелевом использовании инструментов, черезмерном некритичном усердии и о пожарной безопастности для несовршеннолетних.

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 01 мар 2017, 00:28

Восхитительно! А если точку взять размытую, то еще и со сглаживанием получится >_<.

Но нет :-). Миникарту можно отрисовать немного более прямолинейно, ведь в терминале можно делать спрайты из массива пикселей:

Код: Выделить всё

int width, height;
std::vector<color_t> pixels; // size = width * height
terminal_setf("U+E000: %#p, raw-size=%dx%d", (void*)pixels.data(), width, height);
А если хочется миникарту с большими пикселями, то надо добавить resize=%dx%d в N раз и resize-filter=nearest чтобы пиксели не расплылись.

Про это даже пример есть (правда я там немного переборщил, надо более наглядно сделать).
Пытается раскуклиться

altmax
Сообщения: 173
Зарегистрирован: 15 сен 2012, 11:59

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение altmax » 01 мар 2017, 06:04

Cfyz писал(а):
01 мар 2017, 00:28

Про это даже пример есть (правда я там немного переборщил, надо более наглядно сделать).
Да, документация достаточно лаконична. Но это обычно всегда так, поскольку для создателя библиотеки многие функции очевидны и об них даже не упоминается. Но теперь стало понятно, как это делается.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 07 мар 2017, 20:23

Было бы хорошо для дампа персонажа чтобы терминал умел делать скриншоты (текстовые) выбранной области :)

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 07 мар 2017, 21:27

Текстовые скриншоты? А как вы себе это представляете для сцены с тайлами? =)

Я сейчас (помимо мелочей тут и там) кубаторю над реализацией субконсолей, там функциональность сохранения/загрузки из файла (например, в довольно популярном формате RexPaint) будет точно, ибо очень хорошо сочетается. Но с тайлами все равно беда будет, конечно.
Пытается раскуклиться

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 07 мар 2017, 22:51

Не, именно для сцены с символами. Результатом такой операции должна быть строка, а не картинка.

А сейчас графические скриншоты экрана можно делать?

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 08 мар 2017, 00:59

Apromix писал(а):Не, именно для сцены с символами. Результатом такой операции должна быть строка, а не картинка.

Код: Выделить всё

program SaveScreen;

uses
  BearLibTerminal, SysUtils;

procedure SaveScreen(filename: String);
var
  output: TextFile;
  x, y, c: Integer;
begin
  Assign(output, filename);
  Rewrite(output);
  for y := 0 to terminal_state(TK_HEIGHT) do begin
    for x := 0 to terminal_state(TK_WIDTH) do begin
	  c := terminal_pick(x, y, 0);
	  if (c >= 32) and (c < 126) then
	    Write(output, Chr(c))
	  else
	    Write(output, ' ');
    end;
    WriteLn(output);
  end;
  Close(output);
end;

begin
  terminal_open();
  // ...
  // Draw some stuff here
  // ...
  terminal_refresh();
  
  SaveScreen('dump.txt');
 
  while (terminal_read() <> TK_CLOSE) do; 
  terminal_close();
end.
Типа того? =)

Вообще я про картинки и не говорил. Формат, в который сохраняет RexPaint, хоть и бинарный, но содержит символы и цвета. С честно текстовым дампом беда в том, что так можно представить только строго ограниченное подмножество вывода. Черт с ними с тайлами, но что делать с цветом, со слоями, с символами за пределами ASCII? Бесцветное ASCII же сдампить дело нехитрое, см. выше.

Apromix писал(а):А сейчас графические скриншоты экрана можно делать?
Можно конечно, Alt+PrintScreen =). Linux так даже сразу "сохранить как..." окошко откроет. Честно говоря, этот пункт у меня где-то далеко в конце списка, потому что надо тащить в код запись PNG при том, что все и так в общем-то работает.
Пытается раскуклиться

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 08 мар 2017, 20:09

Да хотелось бы задать самому кнопочку, нажав на которую получим скриншот :)

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Apromix » 10 мар 2017, 15:13

Спасибо за сниппет. Их неплохо было бы где-то собирать, скажем на вики терминала, в отдельном разделе snippets :) Ну это так, хотелка, а вот реально нужна помощь. Мне нужно выводить лог в определенную зону, справа внизу экрана, в виде столбика. Мне форматировать самому строки, или терминал сам умеет? Задача казалось бы простая, но со сменой API print'ов чет не въезжаю как сделать :)

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Сообщение Cfyz » 10 мар 2017, 15:47

Apromix писал(а):Мне форматировать самому строки, или терминал сам умеет?
Умеет. Можно печатать как обычно (переносы в самой строке учитываются), с выравниванием текста относительно x, y и еще с автопереносом строк по указанной ширине. Без картинок словами довольно бестолково, так что посмотри пункт "8. Text Alignment" в SampleOmni. Размер строки на экране с учетом всех переносов и тегов можно узнать заранее с помощью Measure.

При этом в процессе форматирования учитываются теги цвета, вставки и наложения произвольных тайлов, смены шрифта (в том числе на шрифт другого размера или пропорций). В итоге можно малой кровью сделать довольно пестрый лог, это можно подсмотреть в "9. Formatted Log".
Пытается раскуклиться

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость