mmofacts.com

Map "der 2te Versuch"...

gepostet vor 16 Jahre, 10 Monate von ThaDafinser
*Kurzversion*
Tabelle:
Quadranten
quaID | vonX | vonY | nachX | nachY
Map
mapID | burgID | mapX | mapY | quaID | mapType
Quadranten werden vorgeneriert.
Neue Burg/Dorf/Planet -> im 1. Quadranten wird geschaut ob nicht schon genug Burgen da drinnen sind, wenn noch Platz frei ist, wird X / Y Zufällig mit rand() in diesem Bereich generiert und geschaut ob die Koordinate frei ist -> wenn ja, positioneren; wenn nein -> nochmal probieren
Problem:
Angst das alles in einem Eck landet
Lösung?
Wie macht ihr das? Schaut ihr wenn ihr die Koordinate generiert habt, ob im Umkreis von einem Feld mehr als x Dinge sind?
Oder generiert ihr die Map komplett vor mit freien Feldern, Terrain und platziert zufällig auf die freien Felder auf einem Quadranten?
[offtopic]
Wenn man auf "Neues Thema Erstellen" klickt, sollte eine Warnung kommen -> "Ihr Thema könnte eventuell verloren gehen! Bitte sichern sie den Beitrag!"
gepostet vor 16 Jahre, 10 Monate von hotzplotz
Also im Grunde brauchst du X- und Y-Koordinate nich in der Tabelle, da du anhand der Anzahl der Felder und der ID die Position des Feldes bestimmen kannst.
Zu deiner Frage - Ich würde je nachdem wie oft der Versuch gescheitert ist ein Gebäude zu platzieren den Radius, in dem Gebäude platziert werden, von der Mitte aus vergrößern.
gepostet vor 16 Jahre, 10 Monate von Kallisti
Du kannst den Quadranten ja reihenweise füllen (so läuft es bei uns), also nur innerhalb einer Reihe random und dann chronologisch weiter nach Süden mit jeder vollen Reihe.
Das garantiert zumindest eine gewisse Distanz zwischen älteren und jüngeren Spielern, da letztere zwangsläuft weiter südlich landen und es Einschränkungen geben kann, wie weit nach Süden man operieren kann. Wenn das bei dir wirklich egal ist, ist deine Lösung ja in Ordnung. Ansonsten kannst du dem random Faktor ja auch einfach auf die Sprünge helfe, indem du z.B. Userid % X rechnest (X beliebig wählbar, z.B. 4) und die Karte in dementspechend viele Segmente unterteilst, in denen die Platzierung erfolgen kann.
Hat dein Quad beispielsweise 100x100 Koords und User 10 meldet sich an, so errechnest du 10%4 -> 2 (folgend Y). Dann gibst du ihm als x-Koord 100/X*2 * ((Y)%2)+rand(100/X*2) und als y-Koord 100/X*2 * floor(Y/2)+rand(100/X*2) und schon hast du deinen Quadranten in vier Teile unterteilt und der jeweils vierte User landet in einem der vier Segmente... Gibt da ja tausend Wege das zu lösen...
Wenn man dann nicht je Koordinate eine Base haben möchte, sondern z.B. Segmente mit je 50x50 Koords pro Base haben möchte, in denen die Base selbst random platziert wird, muss man eben zwischenspeichern, was schon wie vergeben wurde. Ob das nun durch eine id oder durch Koordinatenangaben erfolgt ist er einmal beliebig, ist halt die Frage, was mehr oder weniger Aufwand ist und wo insgesamt mehr berechnet wird bzw. ob Speicherplatz oder Rechenleistung relevanter sind.
Bei uns gibt es beispielsweise regelmäßig Seebeben, die die Position aller Basen neu anordnen, wegen möglicherweise freigewordener Lücken. Hier müsste man dann jedem User eine neue ID zuweisen, wenn man nicht die bereits belegten Gebiete gesondert abspeichert.
gepostet vor 16 Jahre, 10 Monate von ThaDafinser
Das klingt sehr pausibel @Kallisti!
Eben so eine Berechnung, wo du den Quadranten nochmal unterteilst, wie in deiner Formel hat mir gefehlt!
Nur rand() in einem Quadranten ist mir zu "zufällig"....
Ich will ja einen kontrollierten Zufall
Danke für diesen Gedankenstoß!
gepostet vor 16 Jahre, 10 Monate von Xeridar
(hm die idee war kein wirklicher fortschritt laut meinen nachträglichen tests, hörte sich in dem moment wo ich es geschrieben habe besser an als es wirklich war)
gepostet vor 16 Jahre, 10 Monate von Kallisti
Kommt halt drauf an, was genau man moechte und wie man es implementiert. ^^
gepostet vor 16 Jahre, 10 Monate von ThaDafinser
Wie genau ist der Satz von Xeridar gemeint?
Mir fehlt irgendwie der Zusammenhang zu einem Objekt...
gepostet vor 16 Jahre, 10 Monate von Nuky
Wenn du einen "kontrollierten Zufall" willst, dann musst du deinen Zufallsgenerator selbst seeden - in php wär das z.B. mt_srand (1000).
Dann geht er immer die selbe Zufallsreihenfolge durch. Weiß aber nicht ob es das ist, was du wolltest..?
gepostet vor 16 Jahre, 10 Monate von ThaDafinser
Ne das ist klar mit den rand() Grenzen!
Durch den Vorschlag von Kallisti hab ich ja nochmal mehr "kontrolle"....
Ich komm nur nicht ganz drauf was Xeridar genau meint?!
gepostet vor 16 Jahre, 10 Monate von Fornax
Original von ThaDafinser
Ich komm nur nicht ganz drauf was Xeridar genau meint?!

Ich denke, dass er eine super Idee hatte, und das gepostet hat. Dann hat er das getestet, und festgestellt dass es doch nicht so sinnvoll war Dann hat er seinen Post bearbeitet
gepostet vor 16 Jahre, 10 Monate von ThaDafinser
ah klar der edit
ok danke

Auf diese Diskussion antworten