User auf Landkarte von innen nach außen platzieren

Kipperlenny

Erfahrenes Mitglied
Moin

Momentan ist es bei meinem Browsergame so:

User meldet sich an, Tabelle mit freien Ländern wird per random abgerufen, erstes Land in der mit random erzeugten Liste wird duch den neuen User belegt.

Dadurch sind die User dann über die gesamte Karte verstreut.

Bei die-staemme.de ist es ja so, dass die User vom Mittelpunkt der Karte angefangen platziert werden, also umso später man sich anmeldet um so weiter außen auf der Karte ist man.

So hätte ich das jetzt auch gerne, nur mir fehlt ein wenig die Logik.
Die Datenbank mit den Ländern:

| id | x | y | used |

Die User sollen ja weiterhin per Zufall angeordnet werden, allerdings nur per Zufall in einem bestimmten Rahmen der sich mit jedem angemeldeten User ein wenig erweitert. Zwischen den schon angemeldeten Usern sollen natürlich auch in alle Richtungen ein paar Länder frei sein - und das auch per Zufall, so das z.B. auch mal welche genau nebeneinander liegen etc.

Jemand ne Idee?

lenny
 
Mhhh wennn du einen maximalen x und y Wert hast der vorkommen kann, dann kannste beide durch 2 teilen und hast somit die Mitte der Karte!

Sobald du diese hast ist es doch einfach die Grenzen für einen Bereich in der Mitte zu erstellen und dort die User zufällig zu setzen.
 
Also so wie ich das jetzt machen würde!

Erstmal wie gesagt den Rahmen festlegen in dem die User zufällig platziert werden.

1. Möglichkeit: Immer so pro X user den Rahmen erhöhen und dann wieder zufällig den User setzen, damit ist es nicht gesgat das der neu anfangende User weiter weg von der Mitte ist, aber es kann halt passieren, dass User nebeneinanderliegen usw. Dadurch dass du den Rahmen ständig erhöst, kommt es auch vor das neu anfangende User weiter von der Mitte weg sind.
$x sollte dann einen Wert annehmen zwischen Rahmen_X, also dem beginn des Rahmens und Rahmen_X+Rahmen_Breite.
bei $y ist es genauso, nur halt mit Rahmen_Y und Rahmen_y+Rahmen_Hoehe. Nun schaust du noch ob dieses Feld bereits besetzt ist, sollte es nicht besetzt sein, dann platzierst du den Spieler dort, sollte es besetzt sein, musste nochmal zufällig $x und $y zuweisen. Allerdings solltest du keine Endlosschleife durchlaufen sondern nur eine bestimmte Anzahl an Durchläufen, sollte nach diesen Durchläufen der Spieler noch nicht gesetzt sein, dann würde ich den Rahmen vergrößern und es dann nochmal versuchen, zwar kann es sein dass dein Random zufällig nur besetzte Felder getroffen hat, aber man sollte immer vorsichtig sein.

2. Möglichkeit: Du legst zuerst einen Mindestabstand zur Mitte fest, dieser sollte natürlich kleiner als dein Rahmen sein. Nun müssen die User platziert werden und dadurch sind neue User weiter von der Mitte weg als ältere User, da bei neueren Usern der Mindestabstand höher ist als bei älteren Usern.
Zum Beispiel habe ich einen Rahmen von 10 mal 10 Feldern. Wenn ich hier nun einen User setze und sag er hat einen Mindestabstand von 2, dann dürfen von der Mitte aus in jede Richtung 2 Felder nicht besetzt werden, also insgesamt ein Feld von 4 mal 4 wenn ich mich nicht irre, in diesem Feld können schon andere User sein und auch freie Felder, trotzdem schließe ich es aus meinem Random aus, indem ich entweder nachher überprüfe ob der Random Wert irgendwo in dem Feld liegt oder versuche das Random schon so zu erzeugen, dass der Wert nicht im Feld liegen kann. Natürlich muss ich wie bei Möglichkeit 1 darauf achten, dass ich ein Feld nicht doppelt belege usw.


Ich weiß ist viel Text und auch kein Code aber vielleicht hilft es dir ja ein wenig bei deinem Problem. Wenn du mir sagst welche Möglichkeit du wählst dann kann ich dir ja ein wenig beim PHP Code helfen.
 
Danke erst mal für deine ausführliche Antwort!

Das Coden kriege ich schon hin :)

Also ich glaube ich werde jetzt zwei Rahmen festlegen, einen äußeren und einen inneren, beide erhöhen sich mit jedem neuen User ein wenig. Neue User werden per random zwischen diesen beiden Rahmen platziert.
 
Genau so meinte ich das ja mit meiner 2. Möglichkeit! Musst nur aufpassen dass du nicht irgendwann mal ne Endlosschleife hast, habe mir ausversehen schonmal ne Tabelle zugeballert
 
Zurück