Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.01.2014, 14:06

Mysql und PHP Mitwachsende Map erstellen (Wo ist das Randgebiet)

Hallo, liebe Community!

Nach einigen Jahren hobbymäßiger Entwicklung von diversen Websites im privaten Bereich versuche ich gerade eine Demoversion meiner Browsergame-Idee umzusetzen.
Es sollte sich zunächst nur um eine "Vorzeige-Version" handeln, um sie ggf. als Projekt anderen Entwicklern vorzustellen und so u. U. Mitentwickler zu finden.

Ich habe grundlegende Erfahrung mit PHP und MySQL, die sich aber bisher überwiegend auf statische Seiten erstrecken und keinerlei Algorithmen beinhalten.

Für oben angesprochenes Projekt stehe ich nun vor folgendem Problem:

In meinem Welraum-Handels-Simmulationsspiel soll es eine Galaxie geben (Spielserver). Diese besteht aus Sektoren, die von den Spielern bereist werden können.
In diesen Sektoren gibt es diverse individuelle Möglichkeiten der Gestaltung. (Stationen, Asteroiden, Planeten - die vom Spieler angesteuert werden können)

Nun wäre es einfach eine Datenbank zu erzeugen und dort das "Spielfeld" vorzugeben. Von Koordinate 1|1 -> z.B.: 50|50.
Aber - da ich versuchen möchte mich weiter zu entwickeln - suche ich nach einer Möglichkeit, das Spielfeld im laufe der Zeit von den Spielern selbst zu gestalten.
So soll es zu Beginn eine kleine "Startzone" geben, in denen die ersten Spieler Handel treiben können um genug Geld zu verdienen, um anschließend eigene Sektoren am Rand der Karte kaufen zu können.

Angenommen die Startwelt besteht aus 9 Sektoren in Würfelform angeordnet (1|1 -> 1|3, 2|1 -> 2|3, 3|1 -> 3|3),
wie kann ich quasi über einen Cronjob (später evt. eine auf JAVA basierende Engine) selbstständig auslesen lassen, welche Koordinaten direkt neben einem vergebenen Sektor liegen, der aber selbst noch nicht "vergeben" ist, und somit von einem Spieler gekauft werden kann?
Wird ein Sektor gekauft, sollen entsprechend die daneben liegenden Sektoren wiederum zum Verkauf angeboten werden.

Mein sicher extrem Ressourcenlastiger Ansatz ist, alle Sektoren auszulesen, x +/-1 und y +/-1 zu rechnen und zu prüfen ob diese Koordinate bereits in der Datenbank vorhanden ist.
Bei 9 Sektoren noch kein großer Aufwand. Wenn aber viele Sektoren vorhanden sind, sicher eine Mammutaufgabe...

Habt ihr da eine einfache Lösung die mit PHP und MySQL umzusetzen ist?

LG und danke für eure Anregungen.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

05.01.2014, 14:18

Muss das Erzeugen der benachbarten Sektoren denn zeitversetzt geschehen? Das einfachste wäre doch direkt beim Kaufen eines Sektors die benachbarten zu erzeugen. Da weißt du auch genau um welche Sektoren es sich handelt und musst nicht suchen.

3

05.01.2014, 14:30

Hi!

Danke, für die schnelle Antwort.

Darüber habe ich mir auch schon Gedanken gemacht.

Aber mir wäre es ganz lieb neue Sektoren - im Grenzgebiet eines gerade erworbenen Sektors - erst Verfügbar zu machen, wenn einige Bedingungen an den benachbarten Sektor erreicht wurden.
Z.B. um Spieler nicht durch 6 zwar gekauft Sektoren zu jagen, die zwar mal gekauft, aber nie wirklich bevölkert wurden und somit dort keine Möglichkeiten für Interaktionen geboten wird.

Daher sollte geprüft werden, welcher am Rand liegende Sektor die Bedingungen erfüllt und dann geschaut werden, welcher Sektor eben daneben liegt und zum Verkauf angeboten werden.

Dabei sollte auch ausgeschlossen sein, dass ein Quasi diagonaler Sektor angeboten wird, der keine "Kante" zum Nachbarsektor hat.
Also quasi beim Schachbrett schwarz/weiß, darf nur dann ein weißer Sektor angeboten werden, wenn ein schwarzer angrenzt. Der diagonal liegende weißw Sektor aber NICHT!

4

05.01.2014, 23:27

Dann erzeuge sie doch, wenn die Bedingungen zutreffen. Ständig den aktuellen Zustand von Randsektoren mittels Cronjob zu prüfen und dann in seltenen Fällen neue Nachbarsektoren zu erzeugen ist doch überflüssige Arbeit.

Bis irgendeine dauerhafte Information über den Sektor bekannt sein muss, brauchst du ihn in der Datenbank ja nicht vorzuhalten. Folglich bleiben dir meiner Meinung nach folgende Optionen offen:

1) Der Ansatz von Tobiking: Erzeuge die umliegenden Sektoren für jeden gekauften Sektor. Nur weil diese dann existieren muss das ja nicht heißen, dass sie direkt auch zum Kauf verfügbar sind. Versucht der Spieler einen dieser Sektoren zu kaufen, so prüft die Software ob die Bedingungen erfüllt sind und ggf. geht der Sektor in den Besitz des Spielers über und Nachbarsektoren werden erzeugt.

2) Ein neuer Sektor wird erst erzeugt, wenn ein Benutzer in kauft. Also der Benutzer entschließt sich, in irgendeine Richtung zu expandieren. Die Koordinaten um bestehende Sektoren herum sind ja bekannt und in der Datenbank muss bis dahin nichts gespeichert sein. Das System prüft, ob die Bedingungen für den Kauf erfüllt sind und erstellt dann ggf. den neuen Sektor. Das hat allerdings den Nachteil, dass Details über die Sektoren erst bekannt werden, wenn der Spieler sie schon gekauft hat.

In beiden Ansätzen lässt sich auch leicht prüfen, ob Nachbarsektoren teilweise schon existieren und von (anderen) Spielern besetzt sind.

Das sind die Ideen, die mir gerade spontant kommen. Wahrscheinlich hat hier noch jemand bessere Vorschläge, aber ich glaube Cronjobs bedeuten hier einen unnötigen Mehraufwand.

5

06.01.2014, 00:07

Hi, und danke für deine Antwort!

Ja, nach dem ich nun auch noch einmal darüber nach gedacht habe, bin ich auch zu der Überzeugung gelangt, dass die 1. Variante wohl die Beste ist.

Beim Kauf des Sektors wird der jeweils benachbarte Sektor angelegt.
So können sich die Spieler schon mal den Sektor anschauen und wenn die Vorgaben erfüllt sind, kann er gekauft werden.

Weiß auch grad nicht, was mich da geritten hat, das so kompliziert aufzuziehen^^

Werd euch auf dem Laufenden halten, ob ich es hinbekommen habe.

Falls natürlich noch jemand eine superschlaue Lösung hat... immer her damit!

Werbeanzeige