Понедельник, 02 Декабря 2024, 17:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сделать генерацию мира?
grisha2000Дата: Среда, 19 Декабря 2012, 12:50 | Сообщение # 1
участник
Сейчас нет на сайте
Вот мне просто интересно как сделать генерацию мира как на пример в 2D Minecraft ? (Я не собираюсь делать клон или даже схожесть с minecrft ! )
DimOkДата: Среда, 19 Декабря 2012, 16:48 | Сообщение # 2
ONG studio
Сейчас нет на сайте
это довольно сложная система и мне лень всё это воссоздавать и выкладывать

Активно пользуюсь Godot Engine
grisha2000Дата: Среда, 19 Декабря 2012, 16:57 | Сообщение # 3
участник
Сейчас нет на сайте
Quote (DimOk)
это довольно сложная система и мне лень всё это воссоздавать и выкладывать


Понятно, а можно ли написать какой нибудь например скрип на python для генерации?
SanchesДата: Среда, 19 Декабря 2012, 18:05 | Сообщение # 4
участник
Сейчас нет на сайте
DimOk, а если бы не лень, то ты бы сделал?))
grisha, одним скриптом тут не обойдёшься.
Немного теории.
Если тебе нужны сиды как в майне, и чтобы для каждого сида своя карта, и чтобы не повторялись карты с разными сидами и т.п., то тебе нужен свой генератор псевдослучайных чисел. Это алгоритм, который на основе сида в 5-10 цифр выдаст последовательность чисел нужной тебе длины, причём для каждого сида она уникальна. Попробуй погуглить линейный конгруэнтный метод генерации псевдослучайных чисел, если хоть немного просвещён в математических делах, то особых проблем не должно возникнуть, т.к. всё довольно просто. Если не осилишь, пиши сюда))
Далее тебе нужно определиться, по какому принципу ты будешь создавать мир. Ну, случайно создавать большие области, делить их (опять случайно) на под-области, в местах пересечения создавать ещё что-то или создавать виртуальную модель, например, движения виртуальных литосферных плит в разные стороны, вычислять между ними виртуальное давление и виртуальную температуру, там, где она высокая, ставишь блоки руды и т.п., виртуально охлаждаешь всё и накидываешь на поверхность семян растений и спор, из которых потом нарожаешь виртуальных животных...
Вообще DimOk прав, штука сложная, отчасти потому, что те, кто не сталкивался с этим раньше, не понимают, с какой стороны к этому подойти, как из чисел сделать деревья, травку и т.п.
Тут мне всегда очень пригождались массивы, в них очень удобно хранить кучу информации, вычислять пересечения и границы разных областей и ещё много чего. В случае генерации мира и при желании его сохранить, без массива тебе точно не обойтись. Ну, если особо не извращаться. Так что если не знаешь, как работать с этими массивами, учи в первую очередь их.
Если с массивами порядок, попробуй создать простенький генератор. Безо всяких сидов, простым рандомом (Random(X) будет ключевым выражением). Например, сначала задать высоту каждой клетки мира, потом выбрать уровень моря, все клетки, что ниже его - заполнить "водой" до уровня моря, те, что выше - сгладить, используя вычисление среднего арифметического между тремя (можно пятью и более) соседними клетками.
Далее проверяешь высоту клеток: если 1-2 над уровнем моря - посадить траву, если рядом есть вода - сделать песок, если в радиусе 10 клеток нет воды - низкая травка. Если высота равна 3-5 - делаешь холмы - можно дополнительно сгладить клетки ещё раз и "засадить" совсем мелкой травкой. Выше 5 - горы, накидываешь камня. Выше 9 - ещё и снега поверх всего накладываешь.

Это для примера, я сам делал много подобного, нужно сказать, сильно помогло.
Если совсем ничего не понял, пиши, на чём встрял сначала, постараюсь объяснить получше (вот что-что, а объяснять мне не дано))


Сообщение отредактировал Sanches - Среда, 19 Декабря 2012, 18:09
DimOkДата: Среда, 19 Декабря 2012, 18:17 | Сообщение # 5
ONG studio
Сейчас нет на сайте
Quote (Sanches)
а если бы не лень, то ты бы сделал?))

да


Активно пользуюсь Godot Engine
grisha2000Дата: Четверг, 20 Декабря 2012, 12:25 | Сообщение # 6
участник
Сейчас нет на сайте
Quote (Sanches)
Немного теории.
Если тебе нужны сиды как в майне, и чтобы для каждого сида своя карта, и чтобы не повторялись карты с разными сидами и т.п., то тебе нужен свой генератор псевдослучайных чисел. Это алгоритм, который на основе сида в 5-10 цифр выдаст последовательность чисел нужной тебе длины, причём для каждого сида она уникальна. Попробуй погуглить линейный конгруэнтный метод генерации псевдослучайных чисел, если хоть немного просвещён в математических делах, то особых проблем не должно возникнуть, т.к. всё довольно просто. Если не осилишь, пиши сюда))
Далее тебе нужно определиться, по какому принципу ты будешь создавать мир. Ну, случайно создавать большие области, делить их (опять случайно) на под-области, в местах пересечения создавать ещё что-то или создавать виртуальную модель, например, движения виртуальных литосферных плит в разные стороны, вычислять между ними виртуальное давление и виртуальную температуру, там, где она высокая, ставишь блоки руды и т.п., виртуально охлаждаешь всё и накидываешь на поверхность семян растений и спор, из которых потом нарожаешь виртуальных животных...
Вообще DimOk прав, штука сложная, отчасти потому, что те, кто не сталкивался с этим раньше, не понимают, с какой стороны к этому подойти, как из чисел сделать деревья, травку и т.п.
Тут мне всегда очень пригождались массивы, в них очень удобно хранить кучу информации, вычислять пересечения и границы разных областей и ещё много чего. В случае генерации мира и при желании его сохранить, без массива тебе точно не обойтись. Ну, если особо не извращаться. Так что если не знаешь, как работать с этими массивами, учи в первую очередь их.
Если с массивами порядок, попробуй создать простенький генератор. Безо всяких сидов, простым рандомом (Random(X) будет ключевым выражением). Например, сначала задать высоту каждой клетки мира, потом выбрать уровень моря, все клетки, что ниже его - заполнить "водой" до уровня моря, те, что выше - сгладить, используя вычисление среднего арифметического между тремя (можно пятью и более) соседними клетками.
Далее проверяешь высоту клеток: если 1-2 над уровнем моря - посадить траву, если рядом есть вода - сделать песок, если в радиусе 10 клеток нет воды - низкая травка. Если высота равна 3-5 - делаешь холмы - можно дополнительно сгладить клетки ещё раз и "засадить" совсем мелкой травкой. Выше 5 - горы, накидываешь камня. Выше 9 - ещё и снега поверх всего накладываешь.

Это для примера, я сам делал много подобного, нужно сказать, сильно помогло.
Если совсем ничего не понял, пиши, на чём встрял сначала, постараюсь объяснить получше (вот что-что, а объяснять мне не дано))


Спасибо) я попробую ,что нибудь сделать)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг