Hexaverse

Kommentare anzeigen Worklog abonnieren
Gehe zu Seite Zurück  1, 2

Worklogs Hexaverse

Von dem kleinsten Gefüge des Raums

Sonntag, 10. Oktober 2010 von Xeres
Nur wer sein Ziel kennt, findet den Weg. (Laozi)

So – was ist das erste Ziel?

  • Eine Galaxie soll zufällig generiert werden (mit Sternen und Planeten).
  • Man soll darin herumfliegen können.

Sieht einfach genug aus!

Fangen wir mit den Basics an...

Die Hextiles
„Normale“ Tiles sind Quadratisch (oder zumindest Rechteckig), haben 4 direkte Nachbarn und lassen sich supereinfach in einem 2D Array speichern. Und Hextiles? Prinzipiell muss man nur die Tiles ein wenig herum schieben und zusammendrücken (siehe auch: Affine Koordinatentransformation):

user posted image

Die Y-Koordinate liegt jetzt etwas schief. Durch die Verschiebung der Felder auf die Lücken der Folgezeilen folgt, dass man zwischen geraden und ungeraden Zeilen unterscheiden muss.
In meiner Bebilderung hier (und im letzen Eintrag) ist ein kleiner Fehler (besser: Ungenauigkeit) versteckt: ein reguläres Sechseck hat natürlich 6 gleichlange Seiten – und ist damit Horizontal etwas höher als breit.

user posted image

Da mir die horizontale, gestauchte Variante gut gefällt, werde ich erst einmal dabei bleiben.
Die Abmessungen sind recht simpel:

user posted image


Ein Sektor
Statt einem verzerrtem X mal Y großem Spielfeld, möchte ich ein R Ringe großes erstellen. Im All sollte man halt in jede Richtung den gleichen Platz haben. Hier z.B. ein 2 Ringe großer Sektor (das mittlere Feld ist obligatorisch und zählt fortan als Ring null):
user posted image
Die Breite des Sektors ist offensichtlich; 64*(2*R+1). Bei der Höhe wird es schon kniffeliger, die Tiles überlappen sich ja teilweise. Minimal haben wir das mittlere Tile: 64px Hoch. Ein Tile nach oben und unten sind 2*64 weniger 2*16px – die Spitzen der Sechsecke, die schon im mittleren Tile enthalten sind; macht 96px per Ring. Also gilt Höhe = 96*R+64.

Wie viele Felder sind in einem R Ringe großem Sektor?
1 (die Mitte mal wieder) + 6 Nachbarn + 12 im zweiten Ring = 19
Jeder Ring hat 6 Felder mehr als sein Vorgänger also:
Code: [AUSKLAPPEN]
1 + 6*1 + 6*2 + 6*3 + 6*4 + ... + 6*R

Dabei lässt sich die 6 Ausklammern:
Code: [AUSKLAPPEN]
1 + 6*(1 + 2 + 3 + 4 + ... + R)

In der Klammer haben wir jetzt die Gaußsche Summenformel stehen – woher man das weiß?
Das sieht man.
...Wie dem auch sei...
Code: [AUSKLAPPEN]
1+6*(R*(R+1))/2

oder auch
Code: [AUSKLAPPEN]
1+3*(R*(R+1))

2 Ringe haben damit 1+3*(2*(2+1)) = 19 Felder.
16 Ringe haben 817 Felder.
32 Ringe haben 3169 Felder...

Wie Groß ein Sektor tatsächlich mal wird, hängt auch von der übrigen Spielmechanik ab – wichtiger ist gerade erst mal, wie man so einen Sektor Zeichnet/Erstellt.
Zwei verschachtelte Schleifen um von oben nach unten und von links nach rechts zu zeichnen – so wie bei jeder anderen Tilemap auch – reichen prinzipiell aus. Die oberste Zeile ist R+1 Tiles lang, jede Folgezeile wird 1 Tile länger, bis man R+1 Zeilen gezeichnet hat – dann ist die Mitte überschritte, und die Zeilen werden wieder kleiner.
Jede ungerade Zeile wird um die Hälfte ihrer Breite nach links gerückt – et voilà!

user posted image

Von der Struktur des Universums

Freitag, 8. Oktober 2010 von Xeres
Ein Projekt muss her. Das nächste Langzeit-Projekt, an dem man herumfrickeln kann, wenn einem danach ist. „Worum soll es gehen?“ – die Frage stellt sich nicht wirklich. Ich wurde schon vor langer Zeit schwer geschädigt; Elite am Computer gespielt, Star Trek TNG im Fernsehen gesehen und Perry Rhodan gelesen.
Also erschafft man sich ein Universum, in dem der Spieler möglichst viele Freiheiten genießt – Handeln, den Weltraum erkunden und natürlich Alien Schiffe in glühende Schrotthaufen verwandeln.
Der Weltraum, unendliche Weiten… in wie viele Richtungen? 3D wäre natürlich irgendwie realistischer – aber ehrlich? Das wird so weit überschätzt. Menschen können zwar dreidimsional sehen, aber für richtiges 3D sind wir nicht geschaffen - meistens bewegen wir uns nur auf der Erdoberfläche. Dann braucht man noch Modelle, Texturen und schlimmstenfalls bewegt man das Universum um den Spieler, ganz abgesehen von einer intelligenten Skalierung von Größe und Entfernungen…
2D. Das ist okay. Die Planeten und Objekte einfach in den freien Raum hängen? Naaa… klingt nach einer StarTrade Adaption – ich hätte es sowieso lieber etwas strategischer. Also machen wir das ganze Rundenbasierend! Dafür wären Diskrete Entfernungen (sprich Tiles) nicht schlecht. Und schräge Bewegungen? Kreisbahnen?
Hextiles! Sechs Richtungen, jeder Nachbar ist gleich weit entfernt – was will man mehr? Als Bonus lässt sich diese Struktur über Galaxie-, System- und Sektor Karte fortführen.

Das ganze sieht dann also so aus:
user posted image
(NGC 1672, Hubble's Advanced Camera for Surveys, August 2005, Distance: 60 million light-years, nasaimages.org)

Okay, nicht ganz so:
user posted image
(natürlich nur als Beispiel, die paar Systeme bieten nicht viel Platz für Ruhm und Abenteuer)
Im Zentrum der Galaxie gibt es ein Schwarzes Loch, und vielleicht findet man auch welche auf den freien Feldern. Oder einen Dunkelplanet oder… das weiß man erst, wenn man nachschaut.

Zoomen wir noch auf ein Sternensystem heran:
user posted image
Nochmal verdeutlicht sind hier die Kreisbahnen, die die Planten verfolgen. Okay, „Kreisbahn“ – sie haben immer den exakt selben Abstand zu ihrer Sonne, also keine Beschwerden!
Jeder der obigen Sektoren wird nochmals unterteilt – und da befindet man sich dann mit seinem Raumschiff.

Nochmal für die Leute, die nur Bilder gucken:
Entwicklungssprache: BlitzMax
Spielerzahl: Singleplayer
Genre: Rundenbasierte Topdown Weltraum Simulation auf Hextiles.
(Arbeits)Titel:
user posted image

Gehe zu Seite Zurück  1, 2