2010-12-28 19 views
1

Ich bin neu in DB Design. Ich versuche ein Brettspiel zu schreiben (max. 4 Spieler) und habe versucht, einen Weg zu finden, Bewegungen untereinander zu kommunizieren. Ich verwende hierfür eine DB wie im Stackoverflow vorgeschlagen.DB Design Frage - Multiplayer Spiel

Mein Problem ist dies - Wenn Spieler A einen Zug macht, muss dieser Zug von B, C und D gelesen werden. Also muss die Tatsache, dass A den Zug gemacht hat, an B, C und D kommuniziert werden es ist der folgende Weg. Bitte sagen Sie mir, ob es einen besseren Weg gibt, es zu tun. Mir scheint es alles falsch und unglaublich flockig.

Ich habe eine Tabelle mit den folgenden Feldern -

GameID, userMove, Flaga, flagB, FlagC, FlagD

Also, wenn A die Bewegung, die ich unter anderem schreiben macht - (Flaga = 0, flagB = 1, flagC = 1, flagD = 1)

Wenn B, C oder D die Bewegung von A lesen, dekrementieren sie ihr entsprechendes Flag.

A wird die Tabelle nicht aktualisieren, wenn alle Flags 0

gleiche Sache geschieht, wenn andere ihre Bewegungen machen.

Kommentare? Es muss einen besseren Weg dafür geben. Die Dinge, die ich hier falsch bin zu sehen -

  • ich ein ausgesuchtes bin Looping, bis alle Flags sind 0 für A
  • ich ein ausgesuchtes bin Looping, bis das Flag für die entsprechenden Benutzer gesetzt, um den Zug zu lesen.

Das ist eine Menge Serverlast und Client-Timeouts, um die ich mich kümmern muss.

Ich hoffe, ich konnte mein Problem klar erklären. Bitte stellen Sie Fragen, wenn nötig.

Jede Hilfe wird geschätzt.

BEARBEITEN: Das Spiel ist webbasiert (läuft in einem Browser) und ich benutze PHP für die serverseitige Entwicklung und so kann ich keinen In-Memory-Cache verwenden, obwohl ich das liebend gerne tun würde, wenn möglich.

Danke, - Pav

+0

Looping Bedeutung Polling oder Looping Bedeutung Iteration? – Xailor

+0

ich verstehe nicht ganz, warum Sie überhaupt eine Datenbank benutzen würden? um die Bewegungen zwischen Spielern zu kommunizieren? Wie Daniel herausfand, ist eine DB nicht die beste Wahl für diesen Zweck, Sie wären viel besser dran mit lokalem Speicher – yurib

Antwort

1

Wenn die Spieler des Spiels mit einem Spiel-Server während einer einzigen Spielsitzung interagiert werden, sieht es aus wie Sie all diesen Zustand in Erinnerung behalten.

Datenbanken sind ideal für die dauerhafte Speicherung von Daten mit Garantien für Atomarität, Konsistenz und Integrität. Sie scheinen jedoch keine dieser Funktionen für den von Ihnen beschriebenen zeitlichen Zustand zu benötigen.

+1

Genau, warum wollte ich nicht eine DB für diese Art von Daten verwenden. Aber mein Spiel ist webbasiert (es läuft in einem Browser) und ich benutze PHP für die Implementierung. Ich habe keine Möglichkeit, einen In-Memory-Cache dafür zu unterhalten. Es wäre aber ideal. Kennen Sie die PHP-Entwicklung? – user220201

+0

@ user220201: Es gibt definitiv Möglichkeiten, Daten im Speicher zwischen verschiedenen Anfragen an PHP zu teilen. Sie können diese Frage überprüfen: http://stackoverflow.com/questions/4089361/how-can-i-store-data-in-ram-memory-using-php. Fühlen Sie sich frei, eine neue Frage zu stellen, wenn Sie weitere Informationen zu diesem Thema wünschen. Php-Experten werden bereit sein zu helfen. –

+0

Daniel, Der andere Vorteil bei der Verwendung einer Datenbank ermöglicht mir das Skalieren, ohne sich darum kümmern zu müssen, dass alle Spieler eines Spiels zur selben Serverinstanz wechseln. – user220201

0

Wenn FlagA, B, C und D alle Bits sind, können Sie sie alle in eine Spalte setzen und diese Spalte als Bitmaske behandeln.

Dadurch kann eine Spalte alle Flags steuern. Es kann Ihre Auswahl und Updates viel sauberer machen.

Informieren Sie sich über Bitmasken hier mit:

+0

Das ist richtig - und es würde auch erlauben, die Anzahl der anderen Spieler zu erhöhen - aber bedenken Sie, dass dies Ihre Fähigkeit, indexierte Lookups auf diesen Spalten durchzuführen, überflüssig macht. – TehShrike

+0

Es ist eine gute Idee, es zu einer Flagge zu machen. Das Problem ist, dass ich nicht viel an dem Looping-Teil verbessere, was ich wirklich entfernen möchte. – user220201

+0

tatsächlich mit bitweisen Operatoren sollten Sie Schleife vermeiden können. Können Sie ein Beispiel geben, wo Sie denken, dass Sie nicht in der Lage wären? –

0

Haben Sie darüber nachgedacht usng eine Datei, die Informationen zu speichern?