BeaRLibMG - генератор карт

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

Модератор: Apromix

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: BeaRLib

Сообщение Jesus05 » 25 авг 2011, 07:49

Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.

JustHarry
Сообщения: 655
Зарегистрирован: 30 июл 2010, 17:13

Re: BeaRLib

Сообщение JustHarry » 25 авг 2011, 09:50

Jesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
Да ей и тут неплохо, думаю, будет :P

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

Re: BeaRLib

Сообщение Apromix » 30 авг 2011, 07:06

Jesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
Да мы тут так решили вместе, что в этом форуме ей будет как раз. HoD будет использовать все возможности BeaRLib :)

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

Re: BeaRLib

Сообщение Apromix » 01 сен 2011, 08:56

Наконец удалось запихнуть все генераторы карт в одну DLL размером 14 кб :) Осталось оттестировать и будем выкладывать либу :) Чертовски нравится генератор "Логово Муравьев", испытал на HoD'е и чуть не ужаснулся, как все запутано + понял, что нужно добавить движение на 8 сторон срочно, не откладывая =)

П. С.: Предлагайте еще варианты местностей для генератора...

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 07:54

Удалось наконец добится надежности библиотеки при генерации карт и, я думаю, можно тестировать всеми силами. Исходники присутствуют.

Следует знать:
1. Что установлены разумный лимит для ширины и высоты генерируемой карты: от 25 до 511 тайлов. Могут быть ошибки, если кому-то захочется получить карту 20 на 20 или 700 на 900 :)
2. Карта получается в динамической матрице из символов (на паскале: array of array of char), могут быть ошибки, если динамически не выделять память под матрицу перед генерацией.

Просьба:
1. Потестировать на С++ и С# и выложить исходники демок и exe. Ну и интересует сам результат тестирования =)

Выкладываю фреймворк BeaRLib для тестирования и обнаружения ошибок: http://rghost.ru/20190561

Аватара пользователя
alexbard
Сообщения: 670
Зарегистрирован: 22 апр 2011, 17:15
Откуда: Украина
Контактная информация:

Re: BeaRLib

Сообщение alexbard » 02 сен 2011, 12:45

Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.

Аватара пользователя
kipar
Сообщения: 2120
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: BeaRLib

Сообщение kipar » 02 сен 2011, 14:02

array[1..n]of array[1..m] of char эквивалентен array[1..m*n] of char

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 15:22

alexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
А это разве структура (record по пасу)? Нет. Это простая матрица из динамических массивов :)
kipar писал(а):array[1..n]of array[1..m] of char эквивалентен array[1..m*n] of char
Только в дин. массивах от 0 до n - 1.

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 15:30

alexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Я тут подумал, а если передавать в статический массив из массивов?

Аватара пользователя
kipar
Сообщения: 2120
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: BeaRLib

Сообщение kipar » 02 сен 2011, 16:31

Apromix писал(а): Только в дин. массивах от 0 до n - 1.
Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 18:10

kipar писал(а):
Apromix писал(а): Только в дин. массивах от 0 до n - 1.
Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).
Ну вот код импорта из dll на паскале:

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

type TBeaRLibMap = array of array of Char;
function GenMap(const X, Y, ID: Integer): TBeaRLibMap; stdcall; external 'BeaRLibMG.dll';
Дальше объявляем переменные:

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

var
  DR: TBeaRLibMap;
  X: Word = 99; // 25 .. 511
  Y: Word = 99; // 25 .. 511
И собственно используем в процедуре отрисовки:

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

var
  I, J, Z: Integer;
  S: string;
begin
  RE.Clear;
  Z := 1;
  for Z := 1 to 15 do
  begin
    RE.Lines.Append('#' + IntToStr(Z));
    SetLength(DR, X);
    for I := 0 to X - 1 do SetLength(DR[I], Y);
    DR := GenMap(X, Y, Z);
    for I := 0 to X - 1 do
    begin
      S := '';
      for J := 0 to Y - 1 do
        S := S + DR[I][J];
      RE.Lines.Append(S);
    end;
  end;
end;
Все элементарно просто...

Аватара пользователя
alexbard
Сообщения: 670
Зарегистрирован: 22 апр 2011, 17:15
Откуда: Украина
Контактная информация:

Re: BeaRLib

Сообщение alexbard » 02 сен 2011, 18:29

Вы просили потестить вызов из С# и я это сделал. Более того msdn также согласен со мной в том, что вложенные массивы не поддерживаются. Вполне может быть можно было бы решить все, взяв array of string, но, насколько я помню из первого семестра универа, в паскале string сам по-себе - это array of char.

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 18:47

alexbard писал(а):Вы просили потестить вызов из С# и я это сделал. Более того msdn также согласен со мной в том, что вложенные массивы не поддерживаются. Вполне может быть можно было бы решить все, взяв array of string, но, насколько я помню из первого семестра универа, в паскале string сам по-себе - это array of char.
То есть лучше передавать как массив из строк: array of string ?

Аватара пользователя
alexbard
Сообщения: 670
Зарегистрирован: 22 апр 2011, 17:15
Откуда: Украина
Контактная информация:

Re: BeaRLib

Сообщение alexbard » 02 сен 2011, 18:58

Честно сказать, я первый раз подгружаю dll из delphi в C#, поэтому не могу сказать, как сделать так, чтобы работало как надо.
Обещаю со своей стороны посмотреть примеры подобной реализации.

Ну а вы можете пока воткнуть в следующую версию библиотеки перегруженную функцию CreateMap, которая выводит array of string;

Добавлено: совсем забыл паскаль. А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?

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

Re: BeaRLib

Сообщение Apromix » 02 сен 2011, 19:31

alexbard писал(а):А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?
Массив из массивов или матрица - это и есть обыкновенный двумерный массив, индексы которого начинаются с нуля :)

Ответить

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

Сейчас этот форум просматривают: Bing [Bot] и 22 гостя