Domanda:
Quanti semi del mondo ci sono in Minecraft?
John
2015-07-14 14:25:59 UTC
view on stackexchange narkive permalink

Mi chiedevo quanti semi ci sono in Minecraft (1.8.7) e come occupa così poco spazio su disco? Penso che ci siano molti semi per tipo di mondo, calcolando questo anche per OGNI combinazioni personalizzate. Sono sicuro che sono più di un'infinità di miliardi. Puoi dirmi il numero di semi?

Sto solo chiedendo il numero di semi.Ad esempio, se qualcuno suona ogni tipo di mondo con ogni seme e ogni possibilità personalizzata (esempio: i cursori spostati di 1 in un'altra direzione, sono sicuro che qualcuno non lo farà davvero).Su quanti semi quella persona avrebbe [email protected]
@5pike i caratteri immessi sono in realtà irrilevanti.L'intero testo viene sottoposto ad hashing in un unico valore.
Minecraft non memorizza tutti i mondi possibili.I mondi vengono generati casualmente e il seme viene utilizzato per influenzare il generatore di numeri casuali (in modo prevedibile, in modo che se si utilizza lo stesso seme si ottengono gli stessi numeri "casuali")
L'incomprensione che sembri avere è che i semi sono qualcosa come le password di livello in alcuni giochi della vecchia scuola - non lo sono.Invece, ogni seme rappresenta semplicemente un punto di partenza per generare il mondo intero, pezzo per pezzo secondo necessità.Quindi non ci sono semi "speciali", "nascosti": il punto principale dell'utilizzo di un seme personalizzato (a parte il valore di intrattenimento) è che tu possa giocare sulla stessa mappa dei tuoi amici - entrambi acconsentite a giocare in un mondo con unseme di dire "HumblePhoenix", ed entrambi avrete lo stesso terreno di partenza, risorse ecc.
Potresti voler saperne di più sui [generatori di numeri pseudo casuali] (https://en.wikipedia.org/wiki/Pseudo_random_number_generator).
Sapevo cos'è un seme.Ho riavviato molti mondi usando [email protected]
Sette risposte:
#1
+52
SirBenet
2015-07-14 15:05:31 UTC
view on stackexchange narkive permalink

Ci sono 18.446.744.073.709.551.616 (2 64 ) semi possibili. Tutti i semi sono un numero, se le lettere vengono inserite nella casella del seme, la funzione hashCode () di Java viene utilizzata per trasformarlo in un numero.

I semi non utilizzano molto disco spazio (memorizzato come un intero lungo, che significa solo 8 byte per mondo) perché viene memorizzato solo un seme che è stato scelto per un mondo; non tutti i 18 quintilioni. Quando è necessario un seme per la generazione del mondo, uno casuale viene generato dall'orologio di sistema (o inserito manualmente dall'utente) e viene quindi memorizzato e utilizzato per generare il mondo.

Quanti mondi possibili possono generare , comprese le opzioni di personalizzazione ? Probabilmente più di quanto qualsiasi computer possa calcolare tutti i dispositivi di scorrimento mobili disponibili in un mondo personalizzato.


Ecco un'immagine che mostra un seme generato casualmente:

enter image description here

-3.010.441.696.458.036.422 è di gran lunga inferiore sia a -2.147.483.648 che a -140.737.488.355.328. Ciò significa che i seed utilizzano intervalli di interi con segno superiori a 32 bit e 48 bit.

La tua modifica non aggiunge nulla di utile alla tua risposta.Ripristinalo e aggiungilo come commento alla risposta che ritieni non corretta.
@Lilienthal La modifica mostra che la gamma di semi è (almeno) 2 ^ 64, rafforzando la mia risposta.Penso che sia molto utile sapere quando una risposta è corretta.
@ratchetfreak Il seme mostrato nell'immagine è stato generato in modo casuale ed è al di fuori dell'intervallo di un numero di 48 bit.
@colorfusion allora devono aver cambiato RNG dall'ultima volta che ho controllato
Hai idea di quante possibilità mondiali ci siano effettivamente?La generazione procedurale ha effettivamente un'entropia di 64 bit o è più vicina a dire 32 bit?
@colorfusion L'immagine potrebbe essere utile (anche se un singolo valore non dice molto sull'intervallo), ma le risposte dovrebbero generalmente essere autonome.Risulta anche piuttosto passivo aggressivo individuare altre risposte perché non corrette, soprattutto se non offri all'altro poster la possibilità di migliorare o ritirare la sua risposta lasciando un commento.
@Lilienthal L'altra risposta era la risposta accettata al momento di quella modifica, quindi ho sentito il bisogno di notificare a OP che la risposta che hanno accettato è sbagliata e perché è sbagliata.Non sto cercando di essere passivo aggressivo, ma solo assicurarmi che le persone abbiano le giuste informazioni.Se la mia risposta non è corretta, sarei felice che qualcuno scriva un'altra risposta con la risposta corretta, menzionando perché la mia non è corretta.
Dici che il numero che stai mostrando è "di gran lunga inferiore a -2,147,483,648 che Kevin van der Velden afferma essere il valore minimo" ma dici anche "La funzione hashCode () di Java viene utilizzata per trasformarlo in un numero".significa che è solo un altro modo per dire "-140449792", che non è inferiore a "-2147483648".Che è vero?
@JonHanna Credo che "hashCode ()" sia usato solo se il seme immesso contiene lettere.Se inserisci "1" nel seedbox, il seed di livello è solo 1. -140449792 non crea lo stesso mondo di -3010441696458036422.
@JonHanna `hashCode ()` viene utilizzato solo se il seme immesso contiene lettere.Non verrebbe utilizzato su -3010441696458036422.
#2
+19
BlueRaja - Danny Pflughoeft
2015-07-14 20:55:54 UTC
view on stackexchange narkive permalink

Inizialmente ho affermato che Minecraft utilizza la classe Random predefinita di Java per la generazione di numeri pseudo-casuali. Random utilizza seed a 48 bit.

Tuttavia, ciò implicherebbe che i seed 1 e 2 48 +1 risultino nello stesso mondo, che altri hanno sottolineato non è vero. Così ho approfondito ancora.


Minecraft sembra utilizzare Random ovunque tranne per il codice di generazione del bioma. Lì, utilizza il proprio generatore casuale fatto in casa. Da 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;}  

Questo è un generatore congruenziale lineare con valori a = 6364136223846793005 e m = 1442695040888963407 . Questo produrrà effettivamente 2 64 flussi di output distinti, e quindi ci sono 2 64 mondi distinti.

L'affermazione su il wiki di Minecraft secondo cui "I semi multiplayer possono avere solo 2 48 valori possibili [..] a causa dell'utilizzo di Random.nextLong () " non è corretto . I generatori di mondi per giocatore singolo e multiplayer non sono diversi.


L'uso di Random ovunque significa che alcune cose saranno lo stesso tra i semi che sono spenti di 2 48 , come i semi 1 e 2 48 +1. Ad esempio, la posizione dei minerali dovrebbe essere quasi la stessa tra i due (ad eccezione dei minerali rimossi dai sistemi di caverne) .

Inoltre, l'uso di semi per pezzo ha alcune conseguenze interessanti. Ad esempio, dato il piccolo numero di biomi e il gran numero di blocchi, in un dato mondo c'è un'altissima probabilità che ci siano due blocchi esattamente uguali. Trovare quei pezzi, tuttavia, implica la matematica che è al di là di me. Se qualcuno è interessato a capirlo, il codice per inizializzare il chunkSeed è

  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: No. Il valore di input deve essere sottoposto a hashing se non è numerico _ (poiché il seed deve essere un numero) _, ma se anche gli input numerici fossero sottoposti a hashing, non sarebbe possibile ricreare mondi di seed casuali, poiché gli hash sonosenso unico.Quindi l'intera discussione sull'hashing è una falsa pista.
La mia risposta accettata (e la domanda originale) riguarda solo i semi possibili, non i mondi possibili;entrambe le nostre risposte potrebbero essere corrette.Se la tua risposta è il caso, i mondi generati con semi come 281474976710657 e 1 non dovrebbero essere gli stessi?Potrei sbagliarmi su questo.
Gli altri bit del seme a 64 bit possono essere utilizzati per inizializzare un RNG per blocco o qualche altro parametro, tuttavia.Minecraft utilizza un algoritmo di generazione del terreno procedurale basato su coordinate (quindi il mondo generato è indipendente dal modo in cui viaggi per primo), piuttosto che un singolo algoritmo che viene eseguito una volta in base a una singola sequenza casuale.
tranne per il fatto che `Random.nextLong ()` usa due iterazioni di quel seme a 48 bit.Fondamentalmente va "Random.nextInt ()" due volte e li unisce in un numero a 64 bit.Quindi è del tutto possibile che un seme a 64 bit provenga da un oggetto `Random`.
@corsiKa: Stai confondendo l'output a 64 bit con il seme a 64 bit.Il PRNG genererà molti miliardi di bit prima di ripetersi, quindi in un certo senso l'output è "miliardi di bit", molto più di 64. Ma l'input (seed) è ancora di 48 bit;quei 48 bit determinano completamente quale sarà l'output.
@BlueRaja-DannyPflughoeft Quindi, se capisco cosa stai dicendo correttamente, i semi con gli stessi 48 bit finali dovrebbero produrre mondi identici?E quindi, semi come 281474976710657 e 1 dovrebbero produrre esattamente gli stessi mondi?
@BlueRaja-DannyPflughoeft Non sto confondendo niente con niente.Solo perché ci sono solo 2 ^ 48 modi per avviare un oggetto casuale non significa che ci siano solo 2 ^ 48 modi per usare un oggetto casuale.È molto probabile che l'oggetto Random non sia stato creato al solo scopo di determinare il seme, e anche se fosse ancora difficile dedurre ciò che hai detto da quella dichiarazione.Le tue prove semplicemente non reggono.
@colorfusion: Avevi ragione;vedi modifica.
#3
+6
Ryan
2015-07-15 01:56:27 UTC
view on stackexchange narkive permalink

Quindi la risposta si trova qui: http://minecraft.gamepedia.com/Seed_(level_generation)

Che anche se è già collegato in questa pagina nessuno sembra di aver letto tutto.

Per riassumere:

Se usi una parola o frase , allora String.hashCode () viene chiamato e limita la quantità massima di seed a 2 ^ 32 a causa della sua implementazione.

Se inserisci il tuo numero o lasci che il sistema determini il seme, il limite del seme è 2 ^ 64 semi.

TUTTAVIA:

Se si tratta di un mondo multiplayer implementano la funzione java nextLong () e le limitazioni sono 2 ^ 48 possibili opzioni seed.

L'ultima frase non ha senso.Stai fondendo più problemi _ (il seme di `new Random (seed)` è di soli 48 bit, il che non ha nulla a che fare con il "sovraccarico di nextLong ()`) _
È `String # hashCode ()` non `Java.hashCode ()`.Non esiste una classe `Java` con un metodo statico` hashCode`.(Sì, potresti farla franca sostituendo la sterlina con un punto, ma mi piace essere pedante)
@BlueRaja-DannyPflughoeft Non sto confondendo nulla, sto semplicemente ripetendo ciò che lo ** SVILUPPATORE ** dice sulla propria pagina wiki.E non ho mai detto nulla sul "sovraccarico" di `nextLong ()`.Quindi discuti quanto vuoi, non cambia ciò che lo sviluppatore dice di fare.Per quanto riguarda la cosa `Java.hashCode`, l'ho appena digitato in modo sbagliato quando stavo cercando di riassumere invece di copiare e incollare.Lo sviluppatore lo elenca come `String.hashCode ()`.Errore mio.
Lo sviluppatore non mantiene quella pagina wiki, gli utenti casuali lo fanno.Non è una fonte ufficiale di informazioni più di quanto lo sia questa pagina.
#4
+2
Elva
2015-07-14 14:59:52 UTC
view on stackexchange narkive permalink

I semi vengono sottoposti ad hashing in un intero con segno a 32 bit. Il programmatore indica un numero che può essere positivo o negativo ed è 32 valori in base 2.

Questo dà i numeri da -2.147.483.648 a 2.147.483.647.

A seconda dell'implementazione di Minecraft alcuni di questi potrebbero risultare nello stesso mondo in certi aspetti come avere 2 semi con biomi diversi ma la stessa mappa di altezza.

Correzione (parziale): se non si imposta un seme di testo, Minecraft lo farà invece prendi l'ora corrente come valore, che è un numero a 64 bit quindi ci sono più opzioni lì.

Fonte: http://minecraft.gamepedia.com/Seed_(level_generation)

Se Minecraft sostituisce un seme di stringa con l'ora corrente, come mai ottengo sempre lo stesso mondo per il seme "SEED"?
Esiste una logica specifica che vieti l'immissione di numeri più lunghi di 32 bit?Stai dicendo che il gioco può gestire 64 bit di valori temporali, ma si possono inserire solo numeri a 32 bit manualmente, giusto?
@OrcJMR non sostituisce il seme della stringa con l'ora corrente, se * non * lo imposti, utilizzerà l'ora corrente.Questo è anche il motivo per cui non è possibile inserire un valore a 64 bit tramite il campo di testo.Convertirà quel testo (tramite hash unidirezionale) in un numero a 32 bit.Se si desidera specificare un numero arbitrario, è possibile modificare il file della mappa ed eliminare i blocchi generati e quindi avviare il gioco suppongo.
@KevinvanderVelden se la stringa inserita è numerica, viene analizzata in un long e utilizzata come seed, in caso contrario viene utilizzato String.hashCode.
Oh, mio male, lettura fallita su quel problema del tempo.Ma sono già arrivato al gioco e ho provato: http://i.imgur.com/x0fMiR3.png È sicuramente possibile inserire numeri interi a 64 bit, come quelli OLTRE 9 MILIARDI.
Ooh fantasia, non lo sapevo.Questo è ciò che ha detto @ratchetfreak
#5
+1
Ionic
2015-07-14 14:37:26 UTC
view on stackexchange narkive permalink

Il numero di seed non è limitato dall'applicazione stessa. Solo per la lunghezza del valore consentito per il seme stesso.

I semi non verranno memorizzati in Minecraft. Il seme stesso sarà solo una sorta di "valore iniziale" in cui la generazione del mondo avvia il processo di generazione. Non c'è un seme per ogni mondo all'interno del gioco stesso. Otterrai solo lo stesso mondo in cui verrebbe eseguito il processo di generazione e genererebbe lo stesso mondo a causa delle stesse condizioni di inizio.

Puoi confrontarlo contando i passaggi dalla strada di casa al tuo lavoro. Se la stessa condizione si applica ogni giorno, verrà utilizzata la stessa procedura. Se un giorno nevica o se rimani sveglio un po 'più tardi il giorno stesso, le condizioni di partenza sono diverse e prendi un altro modo o un altro momento per il tuo lavoro. Ma se la stessa condizione diversa si applicasse in un altro giorno, finirà allo stesso modo. Solo come esempio per chiarirlo per i non tecnici. :-)

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

I computer non generano veramente numeri casuali. Quando si recupera un numero casuale, ti dà solo il numero successivo in una sequenza di numeri apparentemente casuali (non hanno schemi o connessioni tra loro).

Un seme è ciò che veramente randomizza questo elenco di numeri, nella maggior parte dei casi, l'ora di sistema corrente verrà utilizzata come seme. Potresti pensare a un seme come a un modo per ottenere ripetutamente lo stesso risultato casuale.
Il modo in cui un mondo di Minecraft viene generato è tramite un algoritmo che recupera ripetutamente numeri casuali, ad esempio quando aumentare l'altezza della superficie, ecc ...

Utilizzando i semi, questi numeri casuali saranno gli stessi ogni volta, il che si traduce in un mondo uguale quando viene utilizzato lo stesso seme.
Detto questo, i semi non occupano spazio su disco perché sono semplicemente un modo per rimescolare / randomizzare l'elenco di numeri apparentemente casuali.

Bene, in realtà sceglie uno dei semi in base all'ora in cui è impostato il tuo computer.
Ancora più importante, questo non ha risposto alla domanda che è stata posta.
#7
-1
MyTreeko78255
2016-09-02 19:23:38 UTC
view on stackexchange narkive permalink

1.2413916e + 61

a quanto pare questo è un numero molto grande ma 48x!sarebbe la risposta

Questa risposta sarebbe molto meglio se spiegassi da dove provengono quei numeri - quanto è 48!dovrebbe rappresentare?A partire da ora sembra che questo sia completamente sbagliato.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...