# MultiPlayerFlashgame über Socketserver



## Marti (7. Nov 2009)

Hi.

Ich habe mal eine prinzipielle Frage zu dieser Thematik.

Wenn ich über einen JavaSocketserver den Datenaustausch zwischen zwei Flashclients organisiere für ein kleines Shootergame, wo sollte dann eures Erachtens die Spielkontrolle liegen. 
Ich sehe da 2 Varianten:

1. Spieler A schießt, der Schuss wird initiiert.  Diese Info wird gleichzeitig an den Server gesendet, der sie an Spieler B übermittelt. Dort wird der Schuss initiiert, und der weitere Verlauf der Flugbahn berechnet. Möglicherweise kommt es zu einem Treffer, dass würde Spieler A aber auch sehen ohne die entsprechende Rückmeldung, weil beide Clients identisch sind und der gleichen Spiellogik folgen.

2. Spieler A schießt. Info wird an Server gesendet. Server initiiert Schuss bei Spieler A und Spieler B und berechnet auch die Flugbahn. Der Server streamt an die Clients nur noch die Koordianten des Geschosses, die Clients bilden nur noch ab, machen selbst keine eigenen Berechnungen.


Der Vorteil bei der Variante 2 ist m.E. dass die erforderliche Synchronität gegeben wäre. Bei Variante 1 könnte es passieren, dass z.B. der flashplayer durch das auftreten eines externen Programms gebremst wird in seinem Ablauf. Das kann geringfügig sein, aber evt. einen gültigen Treffer in einen Streischuss verwandeln. Andererseits müßte dann sehr viel mehr Information ausgetauscht werden.


----------



## Illuvatar (7. Nov 2009)

Grundsätzlich: Variante 2. Spiellogik sollte niemals von einem Client berechnet werden, weil sich erstens die Clients uneinig sein könnten und weil zweitens Cheater es dann sehr einfach hätten.
Du hast aber natürlich recht: Wenn der Server zu viel berechnet, muss viel zu viel Information asgetauscht werden. Ein Geschoss zu "streamen" würde vermutlich nicht gut funktionieren, spätestens wenn es viele Geschosse gleichzeitig gibt.

So denke ich, könnte es funktionieren:
Spieler A schießt. Diese Information geht an den Server, der Server überprüft ob das möglich ist (d.h. ob genug Munition vorhanden ist oder was auch immer). Wenn es möglich ist, schickt der Server allen Spielern eine Nachricht, dass es ein neues Geschoss gibt, mit Position x und Geschwindigkeit v. Die Clients können dieses Geschoss dann grundsätzlich selbst zeichnen - aber nicht entscheiden ob jemand getroffen wurde! Solange die Clients nichts vom Server hören fliegt das Geschoss stur weiter - auch wenn es für den Client so aussieht als wäre es ein Treffer. Nur wenn der Server entscheidet dass jemand getroffen wurde, kann er alle Clients benachrichtigen und die können das dementsprechend darstellen.


----------



## Marti (7. Nov 2009)

Ok, das klingt nach einer guten Methode.
Ich müßte dann allerdings die Kollisionserkennung den Server überlassen, bzw ihm auch die Formen und Größen der Objekte übermitteln. Das wird recht mathematisch. In Flash ist eine Kollisionserkennung ja recht einfach. Wobei da möglicherweise auch kooperiert werden kann. Wenn beide Clients einen Treffer registrieren, legt der Server kein Veto ein und läßt den Treffer zählen z.B.


----------

