Генерация мира(2d)
| |
jorji | Дата: Воскресенье, 10 Марта 2013, 15:32 | Сообщение # 1 |
участник
Сейчас нет на сайте
| ... Добавлено (10.03.2013, 15:32) --------------------------------------------- Забыл написать описание...Так вот,мне нужно чтобы генерировался мир(желательно кодом)если можно исходник-ну ,а если исходник то лучше с комментариями...
|
|
| |
qazer | Дата: Воскресенье, 10 Марта 2013, 16:18 | Сообщение # 2 |
Borey Games
Сейчас нет на сайте
| Понимаешь, никто просто так код давать тебе не будет, так как генерация мира - не одна процедура. Хорошая генерация может стоит нескольких дней труда. А теперь вопрос: как хорошо ты владеешь гм? Если 6-8 из 10, то надежда есть. Подумай сначала, генерация чего именно тебе нужна и опиши здесь, затем тебя наведут, дадут алгоритм, который ты сам должен будешь реализовать в коде. Если меньше, то даже не пытайся. Если не можешь нормально разобраться даже в гм, то о каких алгоритмах с тобой вообще можно разговаривать?
|
|
| |
noname | Дата: Воскресенье, 10 Марта 2013, 17:21 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Цитата (jorji) мне нужно чтобы генерировался мир Мне интересна эта тема. А что за мир? Что в нём может быть и на каких местах оно может/не может находиться изначально?
В гамаке я не шарю, но могу подсказать алгоритм. А алгоритм может кому-нибудь пригодиться. Может быть, даже тебе- спросишь у людей, если сам что не сможешь реализовать.
Я когда-то делал генерацию простого плоского лабиринта из пустых полей и стен.
Но, может быть, автору нужен не лабиринт.
Может быть, автору нужна генерация биомов, как в Майнкрафте.
Цитата (qazer) Подумай сначала, генерация чего именно тебе нужна и опиши здесь, Да-да.
Цитата (qazer) атем тебя наведут, дадут алгоритм Да, алгоритм- это самое интересное. Можно поупражняться в разработке алгоритмов генерации миров.Добавлено (10.03.2013, 17:21) ---------------------------------------------
Цитата (noname) но могу подсказать алгоритм. но вряд ли подскажу. вряд ли я вообще загляну в эту тему ещё раз. редко в этот раздел заглядываю))
все правила форумной игры Дуэль Программистов
|
|
| |
Fargost | Дата: Воскресенье, 10 Марта 2013, 17:34 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Скажу только одно, используй циклы с массивами Ничего сложного в в простенькой генерации нет, ее то и начинающий прогер напишет
Сообщение отредактировал Fargost - Воскресенье, 10 Марта 2013, 17:35 |
|
| |
noname | Дата: Воскресенье, 10 Марта 2013, 18:24 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Цитата (Fargost) Скажу только одно, используй циклы с массивами ну, лабиринт так не получится, то есть мы говорим о биомах? тогда как определять границы биомов? в варианте "циклы с массивами", я так понимаю, что все биомы делаются прямоугольными. а как заполнять биомы? в варианте "циклы с массивами" это будет просто размещение элементов с разной вероятностью. впрочем- почему бы и нет? главное- чтобы работало! и для игры с видом с боку будет работать неплохо.
если же мы хотим иметь биомы разных форм и размеров, то хорошо бы сделать так:
то есть, мы берём карту, заполняем её нулями и ляпаем несколько (ну там- десяток, например) начальных координат биомов, от которых потом эти биомы будут расползаться рандомно во все стороны, как кляксы.
когда останавливать цикл- это надо подбирать опытным путём. смотря насколько большие кляксы вы хотите получить.
в данном случае кляксы получились растущими одновременно и противоборствующими. это не всегда хорошо. может быть, лучше будет генерить их по очереди.
ещё можно генерить в несколько этапов: например, в биоме пустыни могут встречаться маленькие биомы оазисов. тогда после генерации большого пятна пустыни ляпаем в любую точку пустыни начальное поле кляксы оазиса(несколько их), и выращиваем их немножко, но не слишком сильно.
а биом леса лучше располагать не где попало, а тоже внутри другого биома, который в-основном заполнен травой.
но опять же- эти все фичи нужны, если мы генерим карту, на которую смотрим сверху(как в dwarf fortress), или если мы генерим 3d карту. тогда там и не только такие фичи понадобятся.
а если мы смотрим сбоку, то запросто прокатят и "циклы с массивами". более того- можно сильно извратиться и сделать супер-пупер генерацию, а в итоге, игроки, при игре с видом сбоку, даже и не заметят разницы между алгоритмами генерации. ---
и, да- чуть не забыл: потом проходим весь массив в цикле и заменяем номера биомов номерами конкретно того, что должно в массиве на этом месте быть. для каждого биома должен быть свой набор элементов с вероятностью выбора каждого элемента. так, в лесу, допустим, с вероятностью 1/6 это будет дерево, с вероятностью 1/3 куст и с вероятностью 1/2- трава. как-то так. Но! опять же- это подходит для генерации с видом сверху. в игре с видом сбоку деревья надо ставить так, чтобы они всегда стояли на земле. но это тоже просто проверить же. ну и вообще для генерации карт с видом сбоку надо хорошо подумать, как вообще лес будет выглядеть. может ли он быть многоэтажным?(деревья на камнях которые над деревьями). вообще, мне не очень понятно, как по-хорошему, должны выглядеть биомы в игре с видом сбоку.
все правила форумной игры Дуэль Программистов
Сообщение отредактировал noname - Воскресенье, 10 Марта 2013, 19:21 |
|
| |
jorji | Дата: Понедельник, 11 Марта 2013, 12:56 | Сообщение # 6 |
участник
Сейчас нет на сайте
| noname,спасибо за цикл.Наверное не только мне ,но и другим пользователям он пригодится) Добавлено (11.03.2013, 12:56) --------------------------------------------- Хочу задать ещё вопрос... По русский так,если ниже нету пикселя,то мы создаём объект на этом пикселе который свободен.P.S.Свободен именно нижний пиксель!
|
|
| |
noname | Дата: Понедельник, 11 Марта 2013, 13:57 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Цитата (jorji) спасибо за цикл на гамаке главной сложностью может стать организовать список. если его язык не поддерживает указателей, то придётся делать через массивы, а это не эффективно.. тогда выход: или подключение dll, написанной на нормальном ЯП, или слушай, что Fargost говорит.
Цитата (jorji) По русский так,если ниже нету пикселя,то мы создаём объект на этом пикселе который свободен.P.S.Свободен именно нижний пиксель! пиксель- это одна точечка на экране. проще проверять не пикселы а ячейки массива. причём сначала генерим всю землю и пустоты, потом добавляем воду. а потом ставим объекты. тогда земля уже будет расставлена и можно будет проверить нашу ячейку и нижнюю, прежде чем добавлять в нашу ячейку объект. объект может занимать несколько ячеек(например- высокое дерево). перед тем как ставить объект в выбранную ячейку, проверяем, достаточно ли места со всех сторон, есть ли земля под ним(если этому объекту она нужна) и т.п., исходя из того, что выбранная ячейка это- левый низ объекта. а потом размещаешь в разных ячейках коды: верх дерева, середина дерева и т.п. а потом по этому коду будешь узнавать, что это такое и выводить соотв спрайт.
и вообще- чего это меня понесло в тему, которой я никогда не занимался? поищи в этом разделе- здесь была тема о том, как создать 2d майнкрафт.
все правила форумной игры Дуэль Программистов
|
|
| |
Gammeza | Дата: Понедельник, 11 Марта 2013, 14:04 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Цитата (Fargost) Ничего сложного в в простенькой генерации нет, ее то и начинающий прогер напишет Если ты так уверен, поделись примитивной генерацией для SC. А то сколько не думал, за 5 минут не придумал.
|
|
| |
noname | Дата: Понедельник, 11 Марта 2013, 15:28 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| не знаю, что такое SC, но я сейчас пытаюсь сделать примитивную генерацию для NeoAxis.
дело будет идти долго, ибо я ленив. но об этом тему надо где-нибудь в другом месте создать.
все правила форумной игры Дуэль Программистов
|
|
| |
GameMix | Дата: Понедельник, 11 Марта 2013, 15:48 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| jorji, посмотри рандомную генерацию здесь.
Steel Standoff - 2D аркада. Мои статьи
|
|
| | |
stalker5889 | Дата: Понедельник, 11 Марта 2013, 16:50 | Сообщение # 12 |
Свободный игродел
Сейчас нет на сайте
| Fargost, лол, неважно, сомое главное правильный алгоритм, а пределать под другой код будут те кому это надо. Я вот думаю алгоритм создание подземелий, обнюхал все рогалик-форумы, ничего интересного.
|
|
| |
noname | Дата: Понедельник, 11 Марта 2013, 17:10 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Цитата (stalker5889) Fargost, лол, неважно, сомое главное правильный алгоритм, а пределать под другой код будут те кому это надо. Я вот думаю алгоритм создание подземелий, обнюхал все рогалик-форумы, ничего интересного. я правильно понимаю, что нужна генерация рогаликовой 2d-карты с видом сверху?
все правила форумной игры Дуэль Программистов
Сообщение отредактировал noname - Понедельник, 11 Марта 2013, 17:10 |
|
| |
stalker5889 | Дата: Понедельник, 11 Марта 2013, 17:48 | Сообщение # 14 |
Свободный игродел
Сейчас нет на сайте
| noname, ага.
|
|
| |
noname | Дата: Понедельник, 11 Марта 2013, 22:04 | Сообщение # 15 |
заслуженный участник
Сейчас нет на сайте
| вместо алгоритма я могу написать прогу на C++ с подробными комментами.
выложу и код и экзешник(осторожно: у меня могут быть вирусы).
прога будет генерить лабиринт в текстовый файл.
первая версия будет совсем плохой, дальше- буду постепенно улучшать.
время исполнения- несколько дней на каждую версию. (нормальный программист делал бы за час, но я ленив и у меня есть другие дела, ну и какое-то время займёт дождаться твоих отзывов, чтобы их учитывать).
время пошло))Добавлено (11.03.2013, 22:04) --------------------------------------------- как должна по-хорошему выглядеть генерация лабиринтов для рогалика, можно глянуть здесь: http://donjon.bin.sh/d20/dungeon/ это- недостижимый идеал. недостижимый, потому что реализовывать все эти фичи- это долбиться и долбиться.
а сейчас я пока пилю прогу, которая будет выводить простой но хороший лабиринт без просторных комнат.
все правила форумной игры Дуэль Программистов
|
|
| |
forhl | Дата: Вторник, 12 Марта 2013, 01:04 | Сообщение # 16 |
частый гость
Сейчас нет на сайте
| Возникла такая проблема, схожая с проблемой автора темы. Имеется автоматически генерируемое подземелье. Но как сделать спавн врагов? Пробовал разные варианты - но все они спавнятся в одном месте, причём за пределами карты. Кто знает как сделать хорошую генерацию врагов - подскажите.
|
|
| |
noname | Дата: Вторник, 12 Марта 2013, 01:47 | Сообщение # 17 |
заслуженный участник
Сейчас нет на сайте
| Цитата (forhl) Имеется автоматически генерируемое подземелье. Но как сделать спавн врагов? Пробовал разные варианты - но все они спавнятся в одном месте, причём за пределами карты. Кто знает как сделать хорошую генерацию врагов - подскажите. не понятно, что за игра и как там что вообще должно происходить. к примеру, в рогаликах враги обычно не спавнятся, а уже заранее расставлены на карте и движутся к игроку, если игрок их увидел. (нельзя же стоять столбом, если игрок уже увидел монстра- надо делать вид живого мира))
ничего не зная ни про игру ни про желаемое количество монстров, могу наугад порекомендовать следующее: каждый ход выбирайте наугад какое-то поле лабиринта. если это поле свободно И игрок не видит, что на нём происходит, то ставьте туда врага.
Цитата (forhl) Пробовал разные варианты - но все они спавнятся в одном месте, причём за пределами карты. это какая-то странная проблема. может быть, ты пробовал правильные алгоритмы, но реализовывал их с ошибкой? то есть, может быть, проблема в каких-то особенностях GameMaker(или на чём ты там делаешь?) в таком случае помочь может только одно: открывай тему, выкладывай исходники игрухи(или хотя бы- опиши подробно, как спавнишь врагов) и описывай, что должно быть, и что происходит не так. то есть нужно исследовать то, как ты сделал и найти там ошибку.
Цитата (forhl) Кто знает как сделать хорошую генерацию врагов - подскажите. если есть подробное описание игры, то можно будет подумать и над хорошей генерацией врагов.. впрочем я сейчас немного занят- пилю генерацию лабиринтов. но как освобожусь, так буду готов помочь.
Добавлено (12.03.2013, 01:47) --------------------------------------------- Цитата (noname) каждый ход выбирайте наугад какое-то поле лабиринта. если это поле свободно И игрок не видит, что на нём происходит, то ставьте туда врага. только что пришло в голову, что если игрок будет много ходить туда-сюда на одном месте, то в лабиринте скопится толпища монстров. тогда лучше делать так: если после хода игрока открываются поля лабиринта, которые раньше были не видны, то с вероятностью 1/3 мы ставим одного монстра на любое из этих полей. эффект будет такой, как будто игрок сам находит монстров. вероятность появления монстра подберёшь чтобы лучше подходило для твоей игры.
ещё круче будет, если ты сможешь ещё отслеживать и пустые просматриваемые поля, которые рядом с пустыми не видными сейчас полями. и вот, чтобы, если игрок никаких новых пустых полей не увидел, то с вероятностью 1/3 монстра можно поставить на одно из тех просматриваемых пустых полей, которые находятся рядом с пустыми не видными сейчас полями. эффект будет такой, как будто монстр вышел из темноты лабиринта.
а вообще- не зря в рогаликах монстров заранее на карте расставляют..
и, да- повторюсь, сложно что-то советовать, не зная ничего об игре.
все правила форумной игры Дуэль Программистов
Сообщение отредактировал noname - Вторник, 12 Марта 2013, 01:48 |
|
| |
stalker5889 | Дата: Вторник, 12 Марта 2013, 12:30 | Сообщение # 18 |
Свободный игродел
Сейчас нет на сайте
| Цитата (noname) это какая-то странная проблема. может быть, ты пробовал правильные алгоритмы, но реализовывал их с ошибкой У гамака давольно случайный разброс рандомных значений. Скорее всего он накосячил в коде. forhl, можно программно расставлять монстров заранее (рандомно), можно заранее расставить (программно -кэп) несколько невидимых обьектов "спаунеров" которые каждые n секунд создают по монстру. Ко второму способу легче доработать разные фишки вроде: спавнер волков будет в хранилище мясца и проч. жрачки (что логично ибо они тоже жрать хотят. Всегда), спавнер "орков-стражников" в гостинной-первой комнате-специальной комнате для стражи и тд, вариантов куча.
|
|
| |
forhl | Дата: Вторник, 12 Марта 2013, 13:15 | Сообщение # 19 |
частый гость
Сейчас нет на сайте
| Цитата каждый ход выбирайте наугад какое-то поле лабиринта. если это поле свободно И игрок не видит, что на нём происходит, то ставьте туда врага.
Цитата ещё круче будет, если ты сможешь ещё отслеживать и пустые просматриваемые поля, которые рядом с пустыми не видными сейчас полями. и вот, чтобы, если игрок никаких новых пустых полей не увидел, то с вероятностью 1/3 монстра можно поставить на одно из тех просматриваемых пустых полей, которые находятся рядом с пустыми не видными сейчас полями. эффект будет такой, как будто монстр вышел из темноты лабиринта.
Да, можно. Есть какой-нибудь пример на эту тему, noname?
Цитата а вообще- не зря в рогаликах монстров заранее на карте расставляют..
Разве? Главное ведь в играх такого типа - случайность и, соответственно, реиграбельность. Да и как их можно расставить программно, если мир игры генерируется случайно?
Цитата можно программно расставлять монстров заранее (рандомно)
stalker5889, пробовал. Они оказываются за пределами карты. Может есть какой-нибудь пример хороший у тебя?
Цитата можно заранее расставить (программно -кэп)
Как на генерируемой карте можно расставить заранее программно? Разве только что при столкновении с объектом объект удаляется. (например со стеной, чтобы они не оказывались в стенах). Или есть другой вариант?
Цитата спавнер волков будет в хранилище мясца и проч. жрачки (что логично ибо они тоже жрать хотят. Всегда), спавнер "орков-стражников" в гостинной-первой комнате-специальной комнате для стражи и тд, вариантов куча.
Вот это интересная идея.
Сообщение отредактировал forhl - Вторник, 12 Марта 2013, 13:16 |
|
| |
jorji | Дата: Вторник, 12 Марта 2013, 13:27 | Сообщение # 20 |
участник
Сейчас нет на сайте
| Цитата (forhl) спавнер "орков-стражников" в гостинной-первой комнате-специальной комнате для стражи и тд, вариантов куча. ТАК,Это уже немайнкрафт?
|
|
| |
|