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

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

Модератор: Apromix

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

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

Сообщение Jesus05 » 14 фев 2013, 06:46

kipar писал(а): ...
Cfyz писал(а):По поводу менеджеров памяти это вы зря. Вся адекватная работа с памятью как раз и строится на возможности косвенно расшарить данные между модулями. Иначе было бы невозможно создать объект (выделить память) в одном модуле, а удалить его (освободить память) в другом. Но поскольку malloc/free и все необходимые им структуры данных существуют в единственном экземпляре на процесс, все прекрасно работает.
Но паскаль то использует собственный менеджер памяти поверх malloc, и он как раз разный. Поэтому в старых версиях дельфи нельзя было передавать в библиотеку и назад AnsiString. Только когда начиная с 2007 перешли на менеджер FastMem эта проблема исчезла.
...
Насколько я помню в Борландовской реализации С++ тоже были какие-то заморочки с памятью между dll и exe.

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

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

Сообщение kipar » 14 фев 2013, 08:11

Ну да, в билдере все тоже самое.

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

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

Сообщение Cfyz » 14 фев 2013, 09:23

kipar писал(а):Но если посмотреть на таблицу экспорта, то там никаких левых переменных нет, только то что указали в директиве export.
kipar писал(а):Но паскаль то использует собственный менеджер памяти поверх malloc, и он как раз разный.
kipar писал(а):Но в паскале он не используется.
Да ладно, вот даже kernel32.dll не используется? =) Любая программа на FPC (из собранных ранее мной и скачанных рандомно с ваших веток) предсказуемо импортирует десятки функций, включая HeapAlloc/HeapFree, LocalAlloc/Free, TlsAlloc/Set/Get. Я примерно догадываюсь как в паскале реализован "собственный" менеджер памяти. И это только напрямую, а там еще kernelbase.dll, ntdll.dll, etc.
kipar писал(а):Но с A.exe она будет не связана.
В частности, A.exe и B.dll могли быть собраны разными версиями паскаля и fpc, а т.к. в них даже алгоритм рандома разный, то странно было бы ожидать что зерно может быть общим.
Кем и где именно реализован рандом, действительно он разный или только варианты реализации, зависит ли реализация (косвенно) от кучи или TLS... согласен, в конкретном случае и при конкретных факторах поведение может отличаться. Я просто хотел заметить, что общие данные между модулями -- это совершенно нормально и не стоит сходу отметать такую возможность, практически весь софт именно так и работает.
Пытается раскуклиться

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

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

Сообщение kipar » 14 фев 2013, 10:14

Cfyz писал(а):Да ладно, вот даже kernel32.dll не используется? =)
Стандартные виндовые - используются. рантайм msvs - не используется, он и у fpc и у дельфи свой.
И рандом часть этого рантайма, исходники рандома можно посмотреть что в дельфи, что в fpc.
Менеджер памяти, во всяком случае дельфевский fastmem - победившая на конкурсе хзитроумная штука с пулами для маленьких объектов размером кажется до 256 байт и отдельным выделением средних и больших блоков. Но естественно он использует виндузовый Alloc для выделения собственно памяти.

Я не спорю что в принципе модули могут общаться, просто в случае с паскалевским рандомом это кажется мне невозможным, потому что не использует никаких виндузовых механизмов или компиляторной магии. В частности, fpc использует в функции random вихрь Мерсенна, а дельфи - обычный линейный генератор.

Аватара пользователя
KeeperVX
Сообщения: 117
Зарегистрирован: 29 ноя 2010, 12:21
Откуда: Санкт-Петербург

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

Сообщение KeeperVX » 14 фев 2013, 21:05

Парни, я вот так понимаю, что данную библиотеку смогу использовать в своём проекте на с++. Так?
А каким образом? Доки я не нашёл.
Накормим планету сдобным рогаликом!
Изображение

phomm
Сообщения: 40
Зарегистрирован: 13 сен 2012, 07:14
Контактная информация:

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

Сообщение phomm » 15 фев 2013, 03:12

Вроде как Jolly Roger внедрил к себе в FFHtR либу и у него с++ , значит заводил хедеры к либе - там всего то пара типов да функция. Либо у него попросить, либо быстро написать свои. Я, если честно, затрудняюсь, ибо на плюсах не пишу, только читаю чужое.

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 917
Зарегистрирован: 27 ноя 2006, 12:16

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

Сообщение BreakMT » 15 фев 2013, 05:18

А он разве не на дельфи пишет? :)

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

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

Сообщение Jolly Roger » 15 фев 2013, 05:29

На делфи. Только:
а) я и C++ знаю, другое дело, что Делфи привычнее.
б) BearLib прекрасно подключается к дельфину, другое дело, что генерит не совсем то, что мне нужно. Потому сейчас я его для тестов использую.
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

phomm
Сообщения: 40
Зарегистрирован: 13 сен 2012, 07:14
Контактная информация:

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

Сообщение phomm » 15 фев 2013, 05:32

Извиняюсь за дезу, где-то когда-то запало сие, а ничего конкретного быстрый поиск не подтвердил...

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

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

Сообщение Jolly Roger » 15 фев 2013, 05:44

Нет, нет! Всё правильно! Я Медведя подключил и он хорошо работал, но сейчас не использую.
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

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

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

Сообщение Apromix » 15 фев 2013, 14:05

KeeperVX писал(а):Парни, я вот так понимаю, что данную библиотеку смогу использовать в своём проекте на с++. Так?
А каким образом? Доки я не нашёл.
Там нужно одну функу только - GenMap. И все :)
Jolly Roger писал(а):BearLib прекрасно подключается к дельфину, другое дело, что генерит не совсем то, что мне нужно. Потому сейчас я его для тестов использую.
Либа для всех. Сделай вклад - включи в либу недостающие функции :)

Аватара пользователя
MADMAN
Сообщения: 39
Зарегистрирован: 27 дек 2013, 05:44
Контактная информация:

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

Сообщение MADMAN » 01 янв 2014, 11:54

А что за тип карты G_RED_ROOMS?
Какой-то коридорчик генерит, ну и там кусман кода, который делает комнату совсем в другом месте, закомментарен еще.
Изображение
Почему собака виляет хвостом?
Потому что она умнее хвоста.
Если бы хвост был умнее, то он вилял бы собакой.

phomm
Сообщения: 40
Зарегистрирован: 13 сен 2012, 07:14
Контактная информация:

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

Сообщение phomm » 02 янв 2014, 04:27

Хм, затрудняюсь ответить. Этот генератор Сергей Apromix писал последним, и он, возможно, не доработан. Сейчас тестанул и нынешний вариант и с раскомментированием куска кода - выдаёт неиграбельные карты, посему пока, наверное, использовать не стоит. Подождём Сергея, что он ещё скажет.

А ещё, не помню, писал ли, но все мои попытки контролировать зерно рандома для генерации пока не дали успеха.

Аватара пользователя
MADMAN
Сообщения: 39
Зарегистрирован: 27 дек 2013, 05:44
Контактная информация:

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

Сообщение MADMAN » 02 янв 2014, 11:40

Вот еще вариант. Линиями условно обозначены места начала и конца коридора.
Изображение

Алгоритм такой:
1. Размещаем комнаты, чтоб они не накладывались друг на друга;
2. Из центра каждой комнаты пускаем воображаемый луч (у меня угол луча меняется с шагом 4 градуса), пока не наткнемся на первую комнату в опеделенном радиусе;
3. Если комнаты между собой не соединены воображаемым коридором - создаем его, иначе - пропускаем комнату.

Коридоры надо рассчитывать алгоритмом поиска кратчайшего пути (с обходом препятствий), чтоб обходить комнаты и уже существующие коридоры.

З.Ы. Это попытка заменить алгоритм G_DOOM_ROOMS. :)
Добавлено позже
Скрытый текст: ПОКАЗАТЬ

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

####################################################################################################
####################################################################################################
####################################################################################################
################################...........#########################################################
################################...........###############........##################################
################################...........###############........#######............###############
################################..................................#######............##...........##
#################..........................###############........#######............##...........##
#################...........####...........###############...........................##...........##
####.....########...........####...........##############################............##...........##
####.....########...........####...........##############################............##...........##
####.....########...........####...........##..........########################.#######...........##
####.....####################################.....................................................##
####...................................................################################...........##
####.....####################...........#####..........################################...........##
####.....####################...........#####..........################################...........##
####.....####################...........###############################################...........##
####.....####################...........###############################################...........##
#############################...........###############################################...........##
#############################...........####################################################.#######
#.....#####.........#########...........##############################...........###########.#######
#.......................................###########.............######...........###########.#######
#.....#####.........#########...........###########.............######...........###########.#######
#.....#####.........#########...........###########.............######...........###########.#######
#.....#####.........#########...........###########.............######...........###########.#######
#.....#####.........#########...........###########.............######...........###########.#######
#.....#######################...................................###########.################.#######
#.....#######################...........###########.............###########.################.#######
#.....#############################################.............###########.################.#######
#.....#############################################.............###########.####...............#####
#.....########################............#########.............###########.####...............#####
#.....########################............###############.#################.####...............#####
#.....####......##############............###############......................................#####
#.....####......##############............######################################...............#####
#.....####......##############............######################################...............#####
##########......####################.###########################################...............#####
##########......####################.##################################################.############
##########......####################.##################################################.############
##########......####......##########.########...........###############################.############
#.......#####.######......##########.########...........############################.........#######
#.......#####................................................................................#######
#.........................###################...........############################.........#######
#.......############......###################...........############################.........#######
#.......############......########################...........................................#######
####################################################################################.........#######
####################################################################################.........#######
####################################################################################.........#######
####################################################################################################
####################################################################################################
####################################################################################################
Скрытый текст: ПОКАЗАТЬ

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

####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........################################################################
#########################...........###########################.............########################
#########################...........###########################.............########################
#########################...........###########################.............########################
#########################...........###########################.............########################
##############################.################################.............########################
##############################..............................................########################
###############################################################.............########################
###############################################################.............########################
###############################################################.............########################
###############################################################.............########################
###############################################################.............########################
#####################################################################.##############################
#####################################################################.##############################
##############################......#################################.##############################
##############################......#################################.##############################
##############################......#################################.##############........########
##############################......#####.......#####################.##############........########
##############################......#####.......#####################.##############........########
##############################......#####.......#####################.##############........########
##############################......#####.......#####################.##############........########
##############################......#####.......#############...............................########
##############################..................#############........###############........########
##############################......#####.......#############........###############........########
##############################......#####.......#############........###############........########
##############################......#####...................................................########
##############################......#####.......#############........###############........########
##############################......#########################........###############################
##############################......#########################........###############################
#############################################################........###############################
####################################################################################################
####################################################################################################
Скрытый текст: ПОКАЗАТЬ

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

####################################################################################################
####################################################################################################
####################################################################################################
###############......#####........##################################################################
##...........##......#####........##################################################################
##...........##......#####........#################################################.............####
##...........##...................#################################################.............####
##...................#####........#################################################.............####
##...........##......#####........#########################.....#####............##.............####
##...........##......#####........#########################.....#####............##.............####
##...........##......#########.############################.....#####............##.............####
##...........##......#########.############################.....#####............##.............####
##...........#################.############################.....#####............########.##########
##...........#################...................................................########.##########
##...........#######################.............##########.....#####............########.##########
##...........#######################.............##########.....#####............########.##########
##...........#######################.............##########.....#####............########.##########
##...........#######################.............##########.....#####............########.##########
####################################.............##########.....#####............########.##########
####################################.............##########################.#############.##########
####################################.............##########################.#############.##########
######.....#########################.............##########################............##.##########
######.....#########################.............##########################............##.##########
######.....################################################################............##.##########
######.....################################################################............##.##########
######.....#####............###############################################............##........###
######.....#####............###############################################............##........###
########.#######............###############################################......................###
########.#######............################################...........................###.......###
########.#######............################################.##############............###.......###
########....................################################.##############............######.######
################............###########################..........##########............######.######
################............###########################..........##########............######.######
################............###########################..........##########............######.######
################............###########################..........##########............######.######
######........##.................................................##########............######.######
######........##################..............#########..........############################.######
######........##################..............#########..........############################.######
######........#######......#####..............#########..........##...............###########.######
######........#######......#####..............#########..........##...............###########.######
######........#######......#####..............................................................######
######.....................#####..............#####################...............###########.######
######........#######.........................#####################...............###########.######
######........#######......#####..............############################.###############......####
######........#######......#####..............############################.###############......####
################################..............############################.###############......####
################################..............############################......................####
################################..............############################################......####
################################..............############################################......####
####################################################################################################
Секретная комната
Скрытый текст: ПОКАЗАТЬ

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

####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
#############################################################################......#################
#############################################################################......#################
#############################################################################......#################
#############################################################################......#################
##########################################################.........##########......#################
##########################################################.........##########......#################
##########################################################.........................#################
##########################################################.........##########......#################
##########################################################.........##########......#################
##########################################################.........##########......#################
#############################################################################......#################
#############################################################################......#################
################################################################################.###################
################################################################################.###################
################################################################################.###################
################################################################################..............######
################################################################################..............######
################################################............####################..............######
################################################............####################..............######
################################################............####################..............######
################################################............####################..............######
################################################..............................................######
################################################............##########.#########..............######
################################################............##########.#########..............######
################################################............##########.#########..............######
################################################............##########.#########..............######
##..........#######################################################.......######..............######
##..........#######################################################.......#############.############
##..........#######################################################.......#############.############
##..........#######################################################.......#############.############
##..........#######################################################.......#############.############
##..........#######################################################.....................############
##..........#######################################################.......##########################
##..........#######################################################.......##########################
##..........#######################################################.......##########################
##..........#######################################################.......##########################
##..........########################################################################################
####################################################################################################
####################################################################################################
Изображение
Почему собака виляет хвостом?
Потому что она умнее хвоста.
Если бы хвост был умнее, то он вилял бы собакой.

phomm
Сообщения: 40
Зарегистрирован: 13 сен 2012, 07:14
Контактная информация:

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

Сообщение phomm » 03 янв 2014, 08:22

Нормально в целом, но они сильно "regular", подобные уже есть и лично мне не очень импонирут, т.к. приедается их прямость. Для "обжитых" зон подойдёт нормально )
Ну, а последний случай, я считаю, недопустим, и если алгоритм может выдать такое, то его надо пересмотреть.

И, да, спасибо за интерес :)

Ответить

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

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