BeaRLibMG - генератор карт
Модератор: Apromix
- Jesus05
- Сообщения: 1840
- Зарегистрирован: 02 дек 2009, 07:50
- Откуда: Норильск, сейчас Санкт-петербург.
- Контактная информация:
Re: BeaRLib
Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
Re: BeaRLib
Да ей и тут неплохо, думаю, будетJesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Да мы тут так решили вместе, что в этом форуме ей будет как раз. HoD будет использовать все возможности BeaRLibJesus05 писал(а):Блин долго искал тему... а почему тема попала в форум "Heart of Darkness RL" а не в "Разработка рогаликов" где как мне кажется ей место.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Наконец удалось запихнуть все генераторы карт в одну DLL размером 14 кб Осталось оттестировать и будем выкладывать либу Чертовски нравится генератор "Логово Муравьев", испытал на HoD'е и чуть не ужаснулся, как все запутано + понял, что нужно добавить движение на 8 сторон срочно, не откладывая =)
П. С.: Предлагайте еще варианты местностей для генератора...
П. С.: Предлагайте еще варианты местностей для генератора...
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Удалось наконец добится надежности библиотеки при генерации карт и, я думаю, можно тестировать всеми силами. Исходники присутствуют.
Следует знать:
1. Что установлены разумный лимит для ширины и высоты генерируемой карты: от 25 до 511 тайлов. Могут быть ошибки, если кому-то захочется получить карту 20 на 20 или 700 на 900
2. Карта получается в динамической матрице из символов (на паскале: array of array of char), могут быть ошибки, если динамически не выделять память под матрицу перед генерацией.
Просьба:
1. Потестировать на С++ и С# и выложить исходники демок и exe. Ну и интересует сам результат тестирования =)
Выкладываю фреймворк BeaRLib для тестирования и обнаружения ошибок: http://rghost.ru/20190561
Следует знать:
1. Что установлены разумный лимит для ширины и высоты генерируемой карты: от 25 до 511 тайлов. Могут быть ошибки, если кому-то захочется получить карту 20 на 20 или 700 на 900
2. Карта получается в динамической матрице из символов (на паскале: array of array of char), могут быть ошибки, если динамически не выделять память под матрицу перед генерацией.
Просьба:
1. Потестировать на С++ и С# и выложить исходники демок и exe. Ну и интересует сам результат тестирования =)
Выкладываю фреймворк BeaRLib для тестирования и обнаружения ошибок: http://rghost.ru/20190561
Re: BeaRLib
Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Re: BeaRLib
array[1..n]of array[1..m] of char эквивалентен array[1..m*n] of char
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
А это разве структура (record по пасу)? Нет. Это простая матрица из динамических массивовalexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Только в дин. массивах от 0 до n - 1.kipar писал(а):array[1..n]of array[1..m] of char эквивалентен array[1..m*n] of char
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Я тут подумал, а если передавать в статический массив из массивов?alexbard писал(а):Не могу заставить библиотеку работать на C#. Точнее она работает, но данные из CreateMap я принять не могу, т.к. маршалинг вложенных массивов не поддерживается. Т.е., если я ничего не путаю, то структуру array of array of char не получится передать.
Re: BeaRLib
Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).Apromix писал(а): Только в дин. массивах от 0 до n - 1.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Ну вот код импорта из dll на паскале:kipar писал(а):Я имел в виду именно статические массивы. А если в либе используются динамические, то это да - проблема. Динамический array of array of char - это указатель на массив указателей на массивы Сhar (или указателей на Char, надо уточнить).Apromix писал(а): Только в дин. массивах от 0 до n - 1.
Код: Выделить всё
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;
Re: BeaRLib
Вы просили потестить вызов из С# и я это сделал. Более того msdn также согласен со мной в том, что вложенные массивы не поддерживаются. Вполне может быть можно было бы решить все, взяв array of string, но, насколько я помню из первого семестра универа, в паскале string сам по-себе - это array of char.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
То есть лучше передавать как массив из строк: array of string ?alexbard писал(а):Вы просили потестить вызов из С# и я это сделал. Более того msdn также согласен со мной в том, что вложенные массивы не поддерживаются. Вполне может быть можно было бы решить все, взяв array of string, но, насколько я помню из первого семестра универа, в паскале string сам по-себе - это array of char.
Re: BeaRLib
Честно сказать, я первый раз подгружаю dll из delphi в C#, поэтому не могу сказать, как сделать так, чтобы работало как надо.
Обещаю со своей стороны посмотреть примеры подобной реализации.
Ну а вы можете пока воткнуть в следующую версию библиотеки перегруженную функцию CreateMap, которая выводит array of string;
Добавлено: совсем забыл паскаль. А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?
Обещаю со своей стороны посмотреть примеры подобной реализации.
Ну а вы можете пока воткнуть в следующую версию библиотеки перегруженную функцию CreateMap, которая выводит array of string;
Добавлено: совсем забыл паскаль. А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BeaRLib
Массив из массивов или матрица - это и есть обыкновенный двумерный массив, индексы которого начинаются с нуляalexbard писал(а):А нельзя вместо массива массивов сделать обыкновенный двухмерный массив? Или так он не будет динамическим ?
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 22 гостя