# Fragen zu Netzwerkspiel, ArrayList verschicken



## frostbyte (25. Dez 2010)

Hallo,

ich bastle momentan an einem Spiel, das momentan lokal gut funktioniert. Es gibt ein Simulations-Backend und ein Anzeige-Frontend, die fast unabhängig voneinander laufen. Der Simulator hält eine Liste mit allen im Spiel aktiven Lebensformen, dort ruft er dann entsprechende Methoden auf, die den Lebensformen Leben einhauchen. Auf der anderen Seite hat man das Interface, das diese Lebensformen anzeigt und den Spieler interagieren lässt.

Momentan ist es so aufgebaut, dass das Interface einen Spieler hat, der letztlich die Aktionen erledigt. Auf diese Weise könnte man das Spiel auch auf 3D oder CLI umstellen, ohne dass die Mechanik anders wäre. Dieser Spieler hat wiederum eine Liste mit den Lebewesen, die er kontrolliert und sagt den Lebensformen, was sie tun sollen.

Mehrere Spieler auf einem Rechner wäre nicht so so das Problem, da ich dann ja einfach mehrere Spieler an gleichen Simulator andocken könnte und auch die ganzen Listen und Lebensformen da wären.

Wie mache ich das denn, wenn ich das ganze übers Netzwerk machen möchte? Wenn ich jedes Mal die Objekte vom Server-Simulator abfrage und gar keinen eigenen Simulator laufen habe, entsteht zwar eine Menge Traffic, allerdings gibt es keine Zweideutigkeiten, wie wenn ich zwei Simulatoren eventuell auseinander laufen habe.

Aber wie kann ich konkret auf die ArrayList zugreifen, die auf einem anderen Rechner läuft? Wenn ich das ganze in Text serialisiere und auf der anderen Seite zusammen baue müsste ich mir ja erst mal ein Protokoll ausdenken und hätte jede Menge Arbeit mit Konstruktoren und Serialisierunsfunktionen. Und wie würde ich das mit Funktionen der Lebensform-Klasse mache, die als Parameter eine zweite Lebensform entgegen nehmen?

Grüße,

frostbyte


----------



## mjdv (25. Dez 2010)

Könntest dir mal RMI und SIMON ansehen, damit kann man Methoden übers Netzwerk aufrufen


----------



## frostbyte (26. Dez 2010)

Das klingt doch sehr cool, dann funktioniert das quasi wie ein großes Programm übers Netzwerk verteilt?


----------



## Gast2 (27. Dez 2010)

Du kannst auch z.B. das ganze als Webservice (z.B. SOAP/XML) implementieren - wenn du Interesse hast dich da einzuarbeiten.


----------



## tuxedo (30. Dez 2010)

Je nachdem was da für ein Datenafkommen da ist, ist XML und Co. für ein Spiel schon ein performance-fresser.

Bei RMI und SIMON gibt's zwar auch Overhead, aber der ist im bytes-bereich anzusiedeln. Der Overhead durch die notwendige Serialisierung: Dem kann man entgegen wirken indem man einfache und flache Objekte benutzt.

Wenn's wirklich um Millisekunden und sparen von bytes bei der Kommunikation geht, bleibt nur eins: 

Selbst auf dem nackten Socket (oder Datagram/UDP) aufsetzen und ein eigenes, angepasstes Protokoll schreiben.

- Alex


----------



## Landei (30. Dez 2010)

Es gibt speziell auf Spiele zugeschnittene Netzwerk-Bibliotheken/Frameworks, z.B. JGN und Project DarkStar (letzteres wird allerdings nach meinem Kenntnisstand nicht weiterentwickelt)

Könnte allerdings sein, dass das für dich mit Kanonen auf Spatzen ist.


----------

