Сколько семян мира в Minecraft?

Мне было интересно узнать, сколько сидов в Minecraft (1.8.7) и как он занимает так мало места на диске? Я думаю, что есть много семян для каждого типа мира, рассчитывая это также для КАЖДОЙ индивидуальной комбинации. Я уверен, что их больше миллиона. Можете ли вы сказать мне количество семян?


Существует 18 446 744 073 709 551 616 (2 64 ) возможных семян . Все начальные числа представляют собой числа. Если буквы вводятся в поле начального числа, функция Java hashCode () используется для преобразования его в число.

Семена не делают. использовать много места на диске (хранится как длинное целое число, что означает всего 8 байт на мир), потому что сохраняется только начальное число, выбранное для мира; не все 18 квинтиллионов. Когда для генерации мира требуется семя, случайное значение генерируется из системных часов (или вводится пользователем вручную), а затем сохраняется и используется для генерации мира.

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


Вот изображение, показывающее случайно сгенерированное начальное число:

-3,010,441,696,458,036,422 намного ниже, чем -2,147,483,648 и -140,737,488,355,328. Это означает, что в семенах используются более 32-битные и 48-битные целые числа со знаком.


Первоначально я заявлял, что Minecraft использует класс Java по умолчанию Random для генерации псевдослучайных чисел. Random использует 48-битные начальные числа.

Однако это означало бы, что начальные числа 1 и 2 48 +1 приводят к тот же мир, на который указывали другие, не соответствует действительности. Так что я еще немного покопался.


Minecraft, похоже, использует Random везде кроме для биома. код генерации. Там он использует собственный домотканый генератор случайных чисел. Из GenLayer.java:

protected int nextInt (int upperBound) {int randVal = (int) ((this.chunkSeed >> 24)% (long) upperBound);  если (randVal  

Это линейный конгруэнтный генератор со значениями a = 6364136223846793005 и m = 1442695040888963407 . Это действительно создаст 2 64 отдельных выходных потока, и, таким образом, будет 2 64 разных мира.

Утверждение в вики Minecraft о том, что «многопользовательские сиды могут иметь только 2 48 возможных значений [..] из-за использования Random. nextLong () « неверно. Генераторы однопользовательского и многопользовательского мира не отличаются.


Использование Random везде действительно означает, что некоторые вещи будут одинаковыми между семенами, которые отключены на 2 48 , например, начальные числа 1 и 2 48 +1. Например, расположение руд между двумя должно быть почти одинаковым (за исключением руд, удаленных пещерными системами) .

Кроме того, использование per -chunk seed имеет несколько интересных последствий. Например, учитывая небольшое количество биомов и большое количество фрагментов, в любом данном мире очень высока вероятность того, что есть два абсолютно одинаковых фрагмента. Однако поиск этих кусков требует математики, которую я не понимаю. Если кому-то интересно в этом разобраться, код для инициализации chunkSeed — это

  public void initChunkSeed (long chunkX, long chunkY) {  this.chunkSeed = this.worldGenSeed;  for (int i = 0; i  

9


Итак, ответ находится здесь: http://minecraft.gamepedia.com/Seed_(level_generation)

Который, хотя он уже связан на этой странице, похоже, никто не прочитал все .

Подводя итог:

Если вы используете слово или фразу , то String.hashCode () , и он ограничивает ваше максимальное количество семян до 2 ^ 32 из-за его реализации.

Если вы введете ваше собственное число или разрешите системе определять начальное число, то ваш предел начального числа составляет 2 ^ 64 семян.

ОДНАКО:

Если это многопользовательский мир , они реализуют java nextLong () функция и ее ограничения — 2 ^ 48 возможных вариантов начального числа.

4


Начальные значения хешируются в 32-битное целое число со знаком. Программист говорит о числе, которое может быть положительным или отрицательным, и состоит из 32 значений в базе 2.

Это дает числа от -2 147 483 648 до 2 147 483 647.

В зависимости от реализации Minecraft некоторые из них могут привести к одному и тому же миру в определенных аспектах, например, наличие двух семян с разными биомами, но с одинаковой картой высот.

(Частичная) коррекция: если вы не установите вместо этого текстовое семя minecraft будет принимать текущее время в качестве значения, которое является 64-битным числом, поэтому там есть больше вариантов.

Источник: http://minecraft.gamepedia. com/Seed_ (level_generation)

6


Количество семян не ограничено самим приложением. Просто по длине допустимого значения для самого семени.

Семена не будут сохранены в Minecraft. Само семя будет просто своего рода «стартовой ценностью», с которой мировое поколение запускает процесс генерации. Внутри самой игры нет семени для каждого мира. Вы получите только тот же мир, что и процесс генерации, и сгенерируете тот же мир из-за одних и тех же начальных условий.

Вы можете сравнить это, посчитав шаги от вашего пути домой до работы . Если одно и то же условие применяется каждый день, будет использоваться один и тот же способ. Если в один прекрасный день пойдет снег, или если вы встанете немного позже в тот же день, условия старта будут другими, и вы выберете другой или другой путь к работе. Но если в другой день будет применено такое же другое условие, все закончится так же. Просто как пример, чтобы прояснить это для нетехнологов. 🙂


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

Семя — это то, что действительно рандомизирует этот список чисел, в большинстве случаев текущее системное время будет использоваться в качестве начального числа. Вы можете думать о семени как о способе многократного получения одного и того же случайного результата.
Способ создания мира Minecraft основан на алгоритме, который многократно выбирает случайные числа, например, когда увеличивать высоту поверхности и т. Д.

При использовании семян эти случайные числа будут каждый раз одинаковыми, в результате чего мир будет таким же, когда используется одно и то же семя.
При этом семена не принимают увеличивают дисковое пространство, потому что они просто способ скремблировать/рандомизировать список, казалось бы, случайных чисел.

2


1.2413916e + 61

видимо это очень большое число, но 48x! будет ответом

1

Оцените статью
Gamicon.ru
Добавить комментарий