wie funktioniert der minecraft-world-generator?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hi,

naja also ganz zufällig ist es ja nicht ;) Der World Generator arbeitet ähnlich wie ein Zufallsgenerator (rand() Funktion) "nur" das bestimmte Blöcke nur in bestimmten Tiefen spawnen. Ausgangspunkt ist der Spielerstart. Anhand des Seeds wird in der Umgebung ein bestimmter Block erzeugt. Je nachdem was für ein Block erzeugt wurde, werden in dessen unmittelbarer Umgebung weitere Blöcke erzeugt. Z.B. spawnen Erze nur in einer bestimmten Tiefe und die Wahrscheinlichkeit, dass neben einem Erdblock ein weiterer Erdblock spawnt ist recht hoch.

Also mit Zufall hat es eigentlich nichts zu tun, nur mit unterschiedlichen Seeds (wenn du keinen Eingibst wird ein "zufälliger", z.B. die Systemzeit, gewählt). Gleiche Seeds -> identische Welt.

Hier noch zwei Links:

http://notch.tumblr.com/post/3746989361/terrain-generation-part-1

(Edit: Such mal bei Wikipedia nach "Linearer_Kongruenzgenerator", ich darf nur einen Link einfügen :( )

P.S. die Welt ist auch nur so groß wie das Array oder die Liste die es speichert. Nach unten ist eine Begrenzung der Bedrock und nach oben hast du eine unsichtbare Himmelsgrenze.

Viel Spaß damit :)

idaser444 
Fragesteller
 06.10.2011, 18:35

nochmal danke für die antwort

das heisst wenn man keinen seed eingibt und dann z.b. die zeit genommen wird, kann es sein das ich immer die gleiche welt habe, wenn ich die welt immer um 15 uhr mache?

0
MaHof86  06.10.2011, 18:41
@idaser444

Gerne,

theoretisch kann es das bedeuten wobei ich natürlich nicht weiß was für Werte für einen Zufallsseed benutzt werden. Aber sobald du den Seed "Test123" eingibst und ich ebenfalls, dann habe wir die gleiche Welt. Wenn wir beide in die gleiche Richtug laufen bzw. an der gleichen Stelle buddeln, dann erscheinen bei uns beiden die gleichen Blöcke.

Vergleichbar ist das ganze mit einer Pflanze. Die Ursprungspflanze (also der Seed) verstreut in ihrer Umgebung die Samen aus denen wiederum neue Pflanzen wachsen die ebenfalls ihre Pflanzensamen im Umkreis verstreuen...naja und so weiter :) Es ist also jeder Block vom vorherigen abhängig und um das daraus resultierende Henne-Ei-Problem zu lösen gibts den Seed um einen Anfang zu haben.

0
idaser444 
Fragesteller
 06.10.2011, 19:05
@MaHof86

gut, kapiert :D

falls du das noch mitkriegst, hat der name der welt auch noch etwas damit zu tun? glaube nicht so wie du das erklärt hast

0
idaser444 
Fragesteller
 06.10.2011, 19:05
@MaHof86

gut, kapiert :D

falls du das noch mitkriegst, hat der name der welt auch noch etwas damit zu tun? glaube nicht so wie du das erklärt hast

0
MaHof86  06.10.2011, 19:14
@idaser444

Ich kenne den Source zwar nicht aber der Weltname sollte damit nichts zu tun haben -> Wenn du zwei neue Welten erzeugt die unterschiedlich heißen aber den gleichen Seed nutzen sind die Welten identisch.

Wenn du eine bestehende Welt umbenennst ändert das auch nichts mehr weil der erste Block bereits gesetzt ist und die Welt auf den bereits gesetzten Blöcken aufbaut.

0

Wie funktioniert das?

Wenn man das in 5000 Zeichen erklären könnte, würdest du auch selber drauf kommen. Allerdings gibt es viele Elemente die in den Höhlensystem immer wieder mal auftauchen. Unter anderem eine serh markante kreisrunde Höhle die ungefähr die Form eines Käselaibes hat oder ein Gang der im 45° Winkel nach oben geht und etwa 6-7 Stein breit ist.

Das mit Bedrock etc. ist relativ einfach mit Zufallsgeneratoren die einfach in den Schichten 0-5 oder so Bedrock "sähen" darüber dann Stein und ab und zu seltene Erze etc. funktioniert alles mit Listen die das Vorkommen in Häufigkeiten angeben.

Wie das ganze abgespeichert wird weiss ich nicht, allerdings sind solche Daten meist nicht so riesig, weil z.B wiederkehrende Elemente wie z.B Bäume relativ einfach abgespeichert werden können, und für die Blöcke nur Informationen wie z.B Blockart, ausrichtung, Koordinaten abgespeichert werden müssen.

Minecraft ist in Java geschrieben, wenn du es in C++ machen willst solltest C++ beherrschen was wie ich denke nicht der Fall ist.

Und ja es ist verdammt kompliziert, man sollte OOProgrammieren können sonst ist man eh aufgeschmissen und für das ganze braucht es neben einer gründlichen Planung mit ERM, ERD etc. auch eine umfassende Dokumentation an der man sich orientieren kann ansonsten verläuft man sich in einem Sump auf Objekten und hat irgendwann einen riesigen Knoten.

Hoffe du kannst mit der Antwort etwas anfangen, freundliche Grüsse aufGeregt =)

idaser444 
Fragesteller
 06.10.2011, 18:25

danke für die lange antwort :D habs jetzt kapiert man muss also schon etwas besser programmieren können :(

aber wie kann man pong oder so programmieren? ganz einfaches spiel (gerade selbst erfunden): es gibt ein feld aus 10x10 vierecken,jedes ungefähr 10-100 pixel groß(was eben gut aussieht) und kleinee schwarze striche die dann nur dazu dienen die vierecke abzutrennen,d die alle weiss sind ausser eins. das ist schwarz und man kann es mit pfeiltasten in dem 10x10feld bewegen

ganz einfach oder ? :-) nur wie geht das?

0
aufgeregt  07.10.2011, 08:56
@idaser444

Die Frage ist natürlich womit du das Programmieren willst, C# ist dazu z.B besser geeignet als z.B C++. Zudem Pong ist wohl eines der beliebtesten Spiele zum selber programmieren, dazu gibt es für jede Programmiersprache X-tausend Tutorials. Wenn du ernsthaft Programmieren lernen willst musst du häufig googlen darum geb ich dir jetzt auch keinen Hinweis zu Tutorials ;)

0