Pytanie:
Ile nasion świata znajduje się w grze Minecraft?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

Zastanawiałem się, ile nasion jest w grze Minecraft (1.8.7) i jak zajmuje tak mało miejsca na dysku? Myślę, że istnieje wiele nasion na typ świata, obliczając to również dla KAŻDEJ niestandardowej kombinacji. Jestem pewien, że jest ich ponad ziliony. Czy możesz podać liczbę nasion?

Pytam tylko o liczbę nasion.Na przykład, jeśli ktoś gra każdy typ świata z każdym ziarnem i każdą dostosowaną możliwością (przykład: suwaki przesunięte o 1 w innym kierunku, jestem pewien, że ktoś tak naprawdę tego nie zrobi).Na ilu nasionach ta osoba by zagrała?@Ionic
@5pike znaki, które wprowadzasz, są w rzeczywistości nieistotne.Cały tekst jest haszowany w jedną wartość.
Minecraft nie przechowuje wszystkich możliwych światów.Światy są generowane losowo, a ziarno jest używane do wpływania na generator liczb losowych (w przewidywalny sposób, więc jeśli używasz tego samego ziarna, tworzy te same „losowe” liczby)
Nieporozumienie, które wydajesz się mieć, polega na tym, że nasiona są czymś w rodzaju haseł poziomów w niektórych oldschoolowych grach - tak nie jest.Zamiast tego, każde ziarno reprezentuje po prostu punkt wyjścia do stworzenia całego świata, kawałek po kawałku, w razie potrzeby.Nie ma więc żadnych „specjalnych”, „ukrytych” nasion - głównym celem korzystania z niestandardowych nasion (poza wartością rozrywkową) jest to, że możesz grać na tej samej mapie co Twoi znajomi - oboje zgadzacie się grać w świecie, w którymziarno, powiedzmy `HumblePhoenix`, a obaj będziecie mieć ten sam teren początkowy, zasoby itp.
Możesz chcieć dowiedzieć się więcej o [generatorach liczb pseudolosowych] (https://en.wikipedia.org/wiki/Pseudo_random_number_generator).
Wiedziałem, co to jest ziarno.Zrestartowałem wiele światów, używając tego.@Luaan
Siedem odpowiedzi:
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

Istnieje 18 446 744 073 709 551 616 (2 64 ) nasion. Wszystkie nasiona są liczbami, jeśli litery zostaną wprowadzone do pola początkowego, funkcja hashCode () Javy jest używana, aby zamienić je na liczbę.

Nasiona nie zajmują dużo miejsca na dysku przestrzeń (przechowywana jako długa liczba całkowita, co oznacza tylko 8 bajtów na świat), ponieważ przechowywane jest tylko ziarno wybrane dla świata; nie wszystkie 18 trylionów. Kiedy ziarno jest potrzebne do wygenerowania świata, losowy jest generowany z zegara systemowego (lub wprowadzany ręcznie przez użytkownika), a następnie jest przechowywany i używany do generowania świata.

Ile możliwych światów może wygenerować , w tym opcje dostosowywania ? Prawdopodobnie więcej niż jakikolwiek komputer może obliczyć, biorąc pod uwagę wszystkie suwaki typu float dostępne w dostosowanym świecie.


Oto obraz przedstawiający losowo wygenerowane ziarno:

enter image description here

-3,010,441,696,458,036,422 jest znacznie niższa niż zarówno -2,147,483,648, jak i -140,737,488,355,328. Oznacza to, że nasiona używają zakresów liczb całkowitych ze znakiem wyższych niż 32-bitowe i 48-bitowe.

Twoja zmiana nie dodaje niczego przydatnego do Twojej odpowiedzi.Przywróć go i dodaj jako komentarz do odpowiedzi, która Twoim zdaniem jest nieprawidłowa.
@Lilienthal Edycja pokazuje, że zakres nasion wynosi (co najmniej) 2 ^ 64, wymuszając moją odpowiedź.Myślę, że warto wiedzieć, kiedy odpowiedź jest poprawna.
@ratchetfreak Ziarno pokazane na obrazku zostało wygenerowane losowo i znajduje się poza zakresem liczby 48-bitowej.
@colorfusion to musieli zmienić RNG od czasu ostatniego sprawdzenia
Czy masz pojęcie, ile faktycznie istnieje światowych możliwości?Czy generacja proceduralna faktycznie ma entropię 64 bitów, czy też jest bliższa 32 bitom?
@colorfusion Obraz może być przydatny (nawet jeśli pojedyncza wartość nie mówi wiele o zakresie), ale odpowiedzi powinny być zasadniczo niezależne.Wydaje się również, że wyodrębnianie innych odpowiedzi za niepoprawne jest raczej bierną agresją, zwłaszcza jeśli nie dajesz drugiemu autorowi szansy na poprawienie lub wycofanie odpowiedzi, pozostawiając komentarz.
@Lilienthal Inną odpowiedzią była odpowiedź zaakceptowana w momencie tej edycji, więc poczułem potrzebę powiadomienia OP, że odpowiedź, którą zaakceptowali, jest błędna i dlaczego jest błędna.Nie staram się być biernie agresywny, po prostu upewnij się, że ludzie mają właściwe informacje.Jeśli moja odpowiedź jest nieprawidłowa, byłbym szczęśliwy, gdyby ktoś napisał inną odpowiedź z poprawną odpowiedzią, wspominając, dlaczego moja jest niepoprawna.
Mówisz, że pokazana liczba jest „znacznie niższa niż -2 147 483 648, które według Kevina van der Veldena jest wartością minimalną”, ale mówisz również, że „funkcja hashCode () Javy służy do przekształcenia jej w liczbę”.co oznacza, że jest to po prostu inny sposób na powiedzenie „-140449792”, czyli nie mniej niż „-2147483648”.Co jest prawdą?
@JonHanna Uważam, że hashCode () jest używane tylko wtedy, gdy wprowadzone ziarno zawiera litery.Jeśli wpiszesz „1” w polu seedbox, nasionko poziomu wynosi tylko 1. -140449792 nie stworzy tego samego świata co -3010441696458036422.
@JonHanna `hashCode ()` jest używane tylko wtedy, gdy wprowadzone ziarno zawiera litery.Nie będzie używany na -3010441696458036422.
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

Początkowo stwierdziłem, że Minecraft używa domyślnej klasy Java Random do generowania liczb pseudolosowych. Random używa 48-bitowych nasion.

Jednak oznaczałoby to, że nasiona 1 i 2 48 +1 wynik w tym samym świecie, który inni wskazywali, nie jest prawdą. Więc poszedłem trochę dalej.


Wydaje się, że Minecraft używa Random wszędzie oprócz kodu generującego biom. Tam używa własnego, samodziałowego generatora losowego. Z GenLayer.java:

protected int nextInt (int upperBound) {int randVal = (int) ((this.chunkSeed >> 24)% (long) upperBound); if (randVal < 0) {randVal + = upperBound; } this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = this.worldGenSeed; return randVal;}  

To jest generator kongruencji liniowej z wartościami a = 6364136223846793005 i m = 1442695040888963407 . To rzeczywiście da 2 64 odrębne strumienie wyjściowe, a zatem istnieją 2 64 odrębne światy.

Oświadczenie dotyczące wiki Minecrafta, które „nasiona trybu wieloosobowego mogą mieć tylko 2 48 możliwych wartości [..] z powodu użycia Random.nextLong () jest niepoprawne . Generatory świata dla jednego gracza i dla wielu graczy nie różnią się od siebie.


Użycie Random wszędzie indziej oznacza , że niektóre rzeczy będą to samo między nasionami mniejszymi o 2 48 , na przykład nasiona 1 i 2 48 +1. Na przykład lokalizacja rud powinna być prawie taka sama między nimi (z wyjątkiem rud usuwanych przez systemy jaskiniowe) .

Ponadto użycie nasion na kawałek ma kilka interesujących konsekwencji. Na przykład, biorąc pod uwagę małą liczbę biomów i dużą liczbę fragmentów, w każdym danym świecie istnieje bardzo duże prawdopodobieństwo, że są dwa takie same fragmenty. Jednak znalezienie tych kawałków wymaga matematyki, która jest poza mną. Jeśli ktoś chciałby się tego dowiedzieć, kod inicjujący chunkSeed to

  public void initChunkSeed (long chunkX, long chunkY) {this.chunkSeed = this. worldGenSeed; for (int i = 0; i < 2; i ++) {this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = chunkX; this.chunkSeed * = this.chunkSeed * 6364136223846793005L + 1442695040888963407L; this.chunkSeed + = chunkY; }}  
@Texenox: Nie. Wartość wejściowa musi być zaszyfrowana, jeśli nie jest liczbowa _ (ponieważ ziarno musi być liczbą) _, ale gdyby dane wejściowe numeryczne były również zaszyfrowane, nie byłbyś w stanie odtworzyć światów o losowych źródłach, ponieważ skróty sąjednokierunkowa.Więc cała dyskusja na temat haszowania to czerwony śledź.
Moja zaakceptowana odpowiedź (i pierwotne pytanie) dotyczy tylko możliwych nasion, a nie możliwych światów;obie nasze odpowiedzi mogą być poprawne.Jeśli twoja odpowiedź brzmi tak, czy światy wygenerowane z nasion takich jak 281474976710657 i 1 nie powinny być takie same?Mogę się co do tego mylić.
Pozostałe bity 64-bitowego ziarna mogą być jednak użyte do zainicjowania RNG na fragment lub jakiegoś innego parametru.Minecraft używa algorytmu generowania terenu opartego na współrzędnych (więc generowany świat jest niezależny od tego, w którą stronę podróżujesz jako pierwszy), zamiast pojedynczego algorytmu, który działa raz na podstawie pojedynczej losowej sekwencji.
poza tym, że `Random.nextLong ()` używa dwóch iteracji tego 48-bitowego ziarna.Zasadniczo robi to dwukrotnie `Random.nextInt ()` i umieszcza je razem w 64-bitowej liczbie.Jest więc całkowicie możliwe, aby 64-bitowe ziarno pochodziło z obiektu Random.
@corsiKa: Mylisz 64-bitowe wyjście z 64-bitowym materiałem wyjściowym.PRNG wygeneruje wiele miliardów bitów przed powtórzeniem się, więc w pewnym sensie wynik to „miliardy bitów”, znacznie więcej niż 64. Ale wejście (ziarno) jest nadal 48-bitowe;te 48-bitowe całkowicie określają, jaki będzie wynik.
@BlueRaja-DannyPflughoeft Więc, jeśli dobrze rozumiem, co mówisz, czy nasiona z tymi samymi 48 końcowymi bitami powinny dawać identyczne światy?A zatem nasiona takie jak 281474976710657 i 1 powinny wytwarzać dokładnie te same światy?
@BlueRaja-DannyPflughoeft Nie mylę niczego z niczym.To, że istnieją tylko 2 ^ 48 sposobów na rozpoczęcie losowego obiektu, nie oznacza, że istnieją tylko 2 ^ 48 sposobów na użycie losowego obiektu.Jest bardzo prawdopodobne, że obiekt Random nie jest tworzony wyłącznie w celu określenia materiału siewnego, a nawet gdyby było to trudne, aby wywnioskować, co powiedziałeś z tego stwierdzenia.Twoje dowody po prostu się nie sprawdzają.
@colorfusion: Miałeś rację;zobacz edytuj.
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

Tak więc odpowiedź znajduje się tutaj: http://minecraft.gamepedia.com/Seed_(level_generation)

Które, mimo że jest już połączone na tej stronie, nikt nie wydaje się przeczytać wszystko.

Podsumowując:

Jeśli używasz słowa lub frazy , to String.hashCode () jest wywoływana i ogranicza twoją maksymalną ilość nasion do 2 ^ 32 z powodu jego implementacji.

Jeśli wpiszesz swój własny numer lub pozwolisz systemowi określić ziarno, wtedy twój limit nasion wynosi 2 ^ 64 nasion.

JEDNAK:

Jeśli jest to świat dla wielu graczy , implementują funkcję nextLong () java, a jej ograniczeniami są 2 ^ 48 możliwych opcji seed.

Ostatnie zdanie nie ma sensu.Łączysz wiele problemów _ (ziarno do `new Random (seed)` ma tylko 48 bitów, co nie ma nic wspólnego z "przeciążaniem` nextLong () `) _
To `String # hashCode ()`, a nie `Java.hashCode ()`.Nie ma klasy „Java” ze statyczną metodą „hashCode”.(Tak, możesz uciec, zamieniając funt na kropkę, ale lubię być pedantyczny)
@BlueRaja-DannyPflughoeft Nie mylę niczego, po prostu powtarzam to, co mówi ** DEVELOPER ** na ich własnej stronie wiki.I nigdy nie powiedziałem nic o „przeciążaniu” „nextLong ()„.Więc kłóć się, ile chcesz, nie zmienia to tego, co mówi programista.Jeśli chodzi o rzecz `Java.hashCode`, po prostu wpisałem to źle, gdy próbowałem podsumować zamiast po prostu skopiować wklej.Deweloper podaje go jako `String.hashCode ()`.Mój błąd.
Deweloper nie utrzymuje tej strony wiki, robią to przypadkowi użytkownicy.Nie jest to oficjalne źródło informacji, podobnie jak ta strona.
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

Nasiona są mieszane w 32-bitową liczbę całkowitą ze znakiem. Czyli programista mówi za liczbę, która może być dodatnia lub ujemna i składa się z 32 wartości w podstawie 2.

Daje to liczby od -2 147 483 648 do 2 147 483 647.

W zależności od implementacji Minecrafta niektóre z nich mogą skutkować tym samym światem w niektórych aspektach, takich jak posiadanie 2 nasion z różnymi biomami, ale tą samą mapą wysokości.

(Częściowa) korekta: Jeśli nie ustawisz materiału siewnego tekstu, zamiast weź aktualny czas jako jego wartość, która jest liczbą 64-bitową, więc jest tam więcej opcji.

Źródło: http://minecraft.gamepedia.com/Seed_(level_generation)

Jeśli Minecraft zastąpi ziarno sznurka aktualnym czasem, dlaczego zawsze otrzymuję ten sam świat dla nasion „SEED”?
Czy istnieje określona logika, która zabrania wprowadzania liczb dłuższych niż 32 bity?Mówisz, że gra obsługuje 64-bitowe wartości czasu, ale ręcznie można wprowadzić tylko liczby 32-bitowe, prawda?
@OrcJMR nie zastępuje ziarna ciągu z aktualnym czasem, jeśli * nie * ustawisz go, użyje aktualnego czasu.Dlatego też nie można wstawić wartości 64-bitowej w polu tekstowym.Konwertuje ten tekst (za pomocą jednokierunkowego skrótu) na liczbę 32-bitową.Jeśli chcesz określić dowolną liczbę, możesz edytować plik mapy i usunąć wygenerowane fragmenty, a następnie, jak sądzę, uruchomić grę.
@KevinvanderVelden, jeśli wprowadzony ciąg jest numeryczny, jest przetwarzany na długi i używany jako ziarno, jeśli nie jest, używany jest String.hashCode.
Och, mój błąd, nie udało się odczytać tego wydania czasu.Ale już dotarłem do gry i przetestowałem: http://i.imgur.com/x0fMiR3.png Z pewnością można wprowadzić 64-bitowe liczby całkowite, takie jak PONAD 9 MILIARDÓW.
Ooh fajnie, nie wiedziałem tego.Tak powiedział @ratchetfreak
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

Liczba nasion nie jest ograniczona przez samą aplikację. Tylko przez długość dozwolonej wartości samego ziarna.

Nasiona nie zostaną zapisane w Minecrafcie. Samo ziarno będzie po prostu pewnego rodzaju „wartością początkową”, w której pokolenie świata rozpocznie proces generowania. W samej grze nie ma ziarna dla każdego świata. Otrzymasz tylko ten sam świat, na którym działałby proces generowania, i wygenerujesz ten sam świat z powodu tych samych warunków początkowych.

Możesz go porównać, licząc kroki od drogi do domu do pracy. Jeśli ten sam warunek będzie obowiązywał każdego dnia, zostanie zastosowany ten sam sposób. Jeśli pewnego dnia pada śnieg lub jeśli nie śpisz nieco później, warunek początkowy jest inny i zamierzasz jechać inną drogą lub innym czasem do pracy. Ale jeśli ten sam inny warunek miałby zastosowanie innego dnia, skończy się to w ten sam sposób. Jako przykład, aby wyjaśnić to dla nie-techników. :-)

Jayden Miller
2015-07-15 08:32:19 UTC
view on stackexchange narkive permalink

Komputery tak naprawdę nie generują liczb losowych. Podczas pobierania liczby losowej po prostu podaje następną liczbę w sekwencji liczb pozornie losowych (nie mają one żadnego wzoru ani połączenia ze sobą).

Ziarno jest tym, co naprawdę losuje tę listę liczb, w większości przypadków jako ziarno zostanie użyty bieżący czas systemowy. Ziarno można sobie wyobrazić jako sposób na wielokrotne uzyskiwanie tego samego losowego wyniku.
Świat Minecrafta jest generowany przez algorytm, który wielokrotnie pobiera losowe liczby, np. Kiedy należy zwiększyć wysokość powierzchni itp ...

Używając nasion, te losowe liczby będą za każdym razem takie same, co powoduje, że świat jest taki sam, gdy używane jest to samo ziarno.
To powiedziawszy, nasiona nie zajmują miejsca na dysku, ponieważ są po prostu sposób na wymieszanie / losowanie listy pozornie losowych liczb.

Cóż, w rzeczywistości wybiera jedno z nasion na podstawie czasu, w którym ustawiony jest twój komputer.
Co ważniejsze, nie odpowiadało to na zadane pytanie.
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

najwyraźniej to to bardzo duża liczba, ale 48x!byłaby odpowiedzią

Ta odpowiedź byłaby o wiele lepsza, gdybyś wyjaśnił, skąd pochodzą te liczby - co to jest 48!ma reprezentować?W tej chwili wygląda na to, że jest to całkowicie błędne.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...