Beste Lösung für Multiplayer-Echtzeit-Android-Spiel [geschlossen]

11

Ich habe vor, ein Multiplayer-Echtzeitspiel für Android (2-8 Spieler) zu entwickeln, und ich überlege, welche Lösung für die Multiplayer-Organisation die beste ist:

  1. Machen Sie den Server auf dem PC und den Client auf dem Handy, die gesamte Kommunikation erfolgt über den Server (ClientA -> PC-SERVER -> Alle Clients).

  2. Verwenden Sie Bluetooth, ich habe es noch nicht verwendet, und ich weiß nicht, ob es schwierig ist, Multiplayer auf Bluetooth zu erstellen

  3. Server auf einem der Geräte herstellen und andere Geräte verbinden (über das Netzwerk, aber ich weiß nicht, ob es schwierig ist, Probleme mit Geräten über NAT zu lösen?)

  4. Andere Lösung?

Piotrek
quelle
3
Planen Sie, dass dies nur ein lokales Spiel ist, oder möchten Sie, dass die Leute mit Leuten über das Internet spielen können? Hosten Sie Maschinen für Spiele?
Tetrad
Ich wähle ein kleines Multiplayer-Spiel, ich plane ein Spiel, bei dem sich Leute im Raum treffen, und kann das gleiche Spiel spielen (dies ist das Thema meiner These: Multiplayer auf einer mobilen Plattform). Aber wenn jemand eine interessante Lösung für das Spielen im Internet hat, bin ich auch interessiert.
Piotrek

Antworten:

2

Haftungsausschluss; Ich habe nicht viel mit Java und der Android-Plattform gemacht.

Meine umfangreichere Erfahrung mit den '.net'-Sprachen auf den Windows Mobile-Plattformen sowie der Windows-Plattform ist jedoch, dass gut 75-90% des gesamten Codes, der zum Erstellen und Verwalten einer Bluetooth- oder Netzwerkdatenverbindung erforderlich ist, beibehalten werden. unterstützt mit dem Betriebssystem oder den Bibliotheken, die für den Zugriff auf die Hardware erforderlich wären.

Bisher scheint dies auch für Android zu gelten, da das Betriebssystem Methoden zum Erstellen von Datenverbindungen über Bluetooth oder das Internet sowie zum Aktivieren / Deaktivieren der jeweiligen Hardware bereitstellt.

Ich würde mir vorstellen, dass Bluetooth die bevorzugte Verbindungsmethode ist, da dies am kostengünstigsten zu implementieren wäre (keine Server). Und ermöglichen Sie eine lokalere Versammlung / Spiel. Bluetooth ist recht einfach zu bedienen. Es funktioniert ähnlich wie normale Netzwerk-Sockets, sobald Sie wissen, mit welchem ​​Gerät Sie eine Verbindung herstellen möchten.

Die anderen sind insofern richtig, als Bluetooth v2.0 / v2.1 derzeit keine großen Datenlasten unterstützen kann. Dies wird sich mit der möglichen Verbreitung von Version 3.0 und höher ändern. und es gibt Möglichkeiten, diese Einschränkung zu umgehen.

Im Moment gibt es jedoch ein einfaches Konzept und dennoch eine komplexe Lösung, die Sie vielleicht ausprobieren möchten. Ich benutze es seit einer Weile. Es ist ähnlich wie Peer-to-Peer, aber es beinhaltet, dass das Spiel auf allen Geräten gleichzeitig gehostet wird. Auf diese Weise sind andere Spieler nicht betroffen, wenn eine Verbindung vorübergehend unterbrochen, verlangsamt oder ein Spieler aus irgendeinem Grund unterbrochen wird. Auf diese Weise können Benutzer, die gelöscht wurden, wieder am laufenden Spiel teilnehmen, ohne andere Spieler oder ihr eigenes Spiel zu stören.

CON: Jeder Spieler würde tatsächlich seine eigene, etwas einzigartige Instanz des Spiels spielen, die mit den anderen Spielern verknüpft wäre, um zu verhindern, dass die Spiele zu weit von der Synchronisation abweichen.

CON: Der unterstützende Code kann umfangreich / komplex sein und es ist schwierig, den Kopf herumzureißen, je nachdem, was Sie erreichen möchten.

PRO: Kein zentraler Server oder Gerät erforderlich! Kein $$$ Unterhalt erforderlich.

PRO: Ein starker Datenaustausch würde nur stattfinden, wenn ein Spieler (erneut) beigetreten ist oder ein Spiel initialisiert wurde. - Auch dies kann reduziert werden, indem sichergestellt wird, dass alle Spiele generiert werden und alle Spieler auf die gleiche Weise vorankommen. MÖGLICHERWEISE Reduzierung des Energieverbrauchs aufgrund starker Netzwerknutzung.

PRO: Daten werden weniger zeitkritisch, da die Geräte bereits über alle Daten verfügen, die sie benötigen, um ein Spiel ohne die anderen Spieler am Laufen zu halten. So können Sie sich mehr auf das tatsächliche Spielerlebnis für die einzelnen Benutzer als auf eine Gruppe von Spielern konzentrieren.

Mir hat die Zeit gefehlt, eine ausführliche Spiel-Engine zu implementieren, die dies nutzt. Die Spiele, die ich gemacht habe, beschränkten sich auf die Neuerstellung von Spielen ähnlich wie Monopoly und Uno, die anscheinend sehr gut funktionierten.

Am einfachsten war derjenige, der Uno emulierte. Ich habe im Wesentlichen die Decks der Verlierer gestapelt, nachdem ein Spieler gewonnen hat, um sicherzustellen, dass der Spieler alle Spiele gewonnen hat. In über 95% der Fälle konnte ich nicht sagen, dass ich nicht genau das gleiche Spiel wie alle anderen gespielt habe.

Ich habe angefangen, ein Spiel zu entwickeln, das Master of Orion II ähnelt, aber das Spiel selbst war für mich ein wenig zu viel.

Grothos
quelle
9

Es hängt stark vom Spiel ab, aber einige Freunde und ich haben erst vor ein paar Monaten über dieselben Themen nachgedacht, und hier ist, was wir festgestellt haben. Ich bin wieder in einer Vor- und Nachteile-Stimmung.

Computergestützter Server

Vorteile

  • Altbewährt
  • Skalierbar

Nachteile

  • Sie müssen einen "Multi-Server" schreiben, der mehrere Spiele gleichzeitig hosten kann. Dies wird wahrscheinlich etwas andere Technologie als Ihr Android-Handy verwenden. Sie können weiterhin Java verwenden, aber können Sie weiterhin die Android-Pakete verwenden?
  • Kann teuer in Betrieb und Wartung sein
  • Sie könnten es möglicherweise eines Tages aus einer Reihe von Gründen herunterziehen. Fans sind möglicherweise nicht glücklich, wenn der Server nur ein paar Monate nach dem Kauf des Spiels ausfällt.

Peer To Peer mit einem von ihnen unter Kontrolle

Vorteile

  • Ad-hoc-Server, auf denen Freunde sich anderen Freunden anschließen können, wenn sie möchten
  • Wenig bis gar keine laufenden Kosten von Ihrer Seite
  • Der Servercode wird mit dem Clientcode gemischt, ohne dass eine separate Serveranwendung geschrieben werden muss.

Nachteile

  • Sie müssen einen einfachen zentralen Peer-Finder schreiben. (Ich habe meine in PHP + MySQL in ein paar hundert einfachen Zeilen gemacht)
  • Die Server laufen auf Telefonen. Telefone können langsam sein. Können alle Zieltelefone ein Spiel hosten?
  • Was passiert, wenn das Servertelefon getrennt wird?
  • Einfacher als Client-Server für Hacker

Was Bluetooth betrifft, würde ich erwarten, dass dies der oben beschriebenen Peer-to-Peer-Methode ähnelt. Ich denke auch nicht, dass Sie irgendwelche Probleme mit NAT haben sollten.

EDIT : Es hängt auch stark von Ihrer Erfahrung ab. Ich würde damit beginnen, einige relativ kleine Client / Server-Spiele zu schreiben, um zuerst den Dreh raus zu bekommen. Es ist ein schwieriges Thema, das beim ersten Mal leicht falsch ist. Ich habe meine gleich beim dritten Versuch. Folgen Sie bekannten Mustern und versuchen Sie nicht, sich etwas auszudenken.

John McDonald
quelle
Ich glaube nicht, dass dies über Bluetooth möglich ist. Ich bezweifle, dass es Broadcasts unterstützt: AFAIK verbindet nur einen einzelnen Host mit einem anderen, hat eine sehr geringe maximale Verbindungsmenge und ist langsam.
o0 '.
4

Eine der wichtigsten Überlegungen, die Sie anstellen müssen, ist die Zuverlässigkeit. Telefone sind nicht sehr zuverlässig; In der Tat sollten Sie wahrscheinlich davon ausgehen, dass in einem 8-Spieler-Spiel wahrscheinlich jemand die Verbindung trennt (eingehender Anruf, schlechter Empfang, Beenden des Spielers ...).

Beachten Sie vor diesem Hintergrund, dass Sie die Auswirkungen eines nicht verbundenen Benutzers minimieren sollten. Bei Ihrer zweiten Option haben Sie im Wesentlichen ein Telefon zum Server gemacht. Wenn dieses Telefon MIA geht, ist das Spiel für alle Spieler effektiv beendet.

John behandelte die Vor- und Nachteile einer traditionellen Client-Server-Architektur. Dies ist wahrscheinlich der stabilste Weg, um jedem ein zuverlässiges Multiplayer-Erlebnis zu bieten.

Sie können auch eine Technik in Anlehnung an eine Lock-Step-Simulation in Betracht ziehen. Dies kann rein Peer-to-Peer implementiert werden. Die allgemeine Idee ist, dass von jedem Client erwartet wird, dass er bei jedem Simulationsschritt seine Aktualisierung (eine Reihe von Befehlen oder deren Fehlen) sendet. In einem nachfolgenden Simulationsschritt werden die Befehle jedes Spielers auf die Spiellogik angewendet. Viele RTS-Spiele verwenden diese Art von Netzwerkschema.

Die Technik kann schwierig zu implementieren und sehr schwer zu debuggen sein. Es ist sicherlich schwieriger als eine traditionellere Client-Server-Architektur. Dies impliziert auch eine Verzögerung zwischen der Eingabe eines Spielers und dem Zeitpunkt, an dem das Spiel auf die Eingabe reagiert. Wenn jedoch ein Spieler ausfällt, können die verbleibenden Spieler ihn einfach vom Spiel ausschließen und fortfahren. Es kann auch potenziell den Netzwerkverkehr im Vergleich zu anderen Schemata verringern.

Wenn Sie mehr über diese Technik erfahren möchten, beginnen Sie mit diesem ausgezeichneten Artikel zu diesem Thema. Andernfalls würde ich dringend von einem Netzwerkschema abraten, bei dem ein einzelnes Telefon für eine Mehrspielersitzung verantwortlich ist, und die einfachere Client- <-> Serverarchitektur vorschlagen.

notlesh
quelle