# Multiplayer Spiel - Schere Stein Papier



## Fireche (1. Nov 2014)

Hi, ich möchte gerne ein MP Version des Spieles Schere-Stein-Papier schreiben. Ich habe keine Probleme einen Echo Server zu schreiben und das Spiel für einen Spieler ist auch kein Problem, doch wie verbinde ich das Spiel mit dem Server u. Client. Ich möchte, dass bis zu 10 Spieler "joinen" können und sich dann einen Gameroom aussuchen.

Ein paar Tipps wären nett. mfg


----------



## JavaMeister (1. Nov 2014)

Dann mach dir mal gedanken.

Du brauchst einen Server, der das managed.

Auf diesem Server brauchst du "Spieler" das wäre eine Klasse, die am besten serialisierbar ist, zum übertragen über das Netzwerk. 

Und dann braucht man einen Container für die Spieler "Gameroom".

Nun bebötigt man ein Protokoll, dass es erlaubt eine Liste abzurufen oder einem Raum zu joinen.


----------



## Fireche (1. Nov 2014)

was genau soll der Server managen? Welche Methoden hat der Server, Client usw ?!


----------



## JavaMeister (1. Nov 2014)

Ja, habe dir dazu einen Anfang geliefert.


----------



## Fireche (1. Nov 2014)

du hast geschrieben was ich bereits weiß, trotzdem danke.


----------



## JavaMeister (1. Nov 2014)

Dann haben wir hier das Problem, dass ich bereits beim posten gesehen habe, mir aber gedacht habe, dass ich es dennoch probiere: Am besten vor dem Posten "Wie man Fragen richtig stellt" googeln. Dann hat man solche Probleme nicht ;D


----------



## Fireche (1. Nov 2014)

Was ich gerne sehen würde sind pseudo Code Snippets die mich erleuchten und zeigen wie ich an die Sache herangehen soll. Wenn du mir dabei nicht weiterhelfen kannst, dann ist das kein Problem  Schönen Abend noch.


----------



## Gucky (1. Nov 2014)

Hast du überhaupt keine Idee? Irgendeine Idee musst du doch haben. Überleg dir, wie du es tun würdest und poste deine Überlegungen hier. Vielleicht auch schon in Code umgesetzt.


----------



## Fireche (2. Nov 2014)

Eine Frage die sich mir zum Beispiel stellt ist, ob ich überhaupt eine Player class brauche wenn ich doch die Client class habe. 1 Client ist ja = 1 Player.

Desweiteren habe ich folgende Klassen schon geschrieben: Ideone.com - Vj5YQ9 - Online Java Compiler & Debugging Tool , Ideone.com - rzhaV0 - Online Java Compiler & Debugging Tool

Meine Überlegungen:
-Ich brauche eine .Game class die jeweils 2 Clients "aufnehmen" kann, sprich die Klasse hat eine Instanzvariable vom Typ Client [2].

Dann stellen sich mir noch andere etliche Fragen aber damit warte ich noch :rtfm:


----------



## JavaMeister (2. Nov 2014)

Ja das geht schon, aber wo willst du dann die Businesslogik unterbringen oder komplexe Informationen übertragen.

Du solltest dein Problem zunächst auf logische Komponenten (Spieler, Raum, Spiel etc.) unterteilen. Das wäre das Modell. 

Auf dem Modell arbeitet dann die Business - Schicht.
Die BOs sollten im Server sein ;D


 Die Clients präsentieren es und leiten Aufgaben an die Business Schicht.


----------



## Fireche (2. Nov 2014)

Hm, ist es geschickter, dass der Server ALLE Informationen die er empfängt weiterleitet an ALLE Clients und dann filtert wer, welche Nachricht für welchen Client gedacht ist oder soll der Server vorher schon filtern und dann die Nachrichten den Clients zuschicken die es auch erhalten sollen?

Lösung 1 scheint mir einfacher zu sein aber bin gespannt auf eure Meinungen.


----------



## JavaMeister (2. Nov 2014)

Zwei ist definitiv nicht viel schwerer  

Hängt aber von deinem datenmodell ab.


----------



## taro (2. Nov 2014)

Fireche hat gesagt.:


> Hm, ist es geschickter, dass der Server ALLE Informationen die er empfängt weiterleitet an ALLE Clients und dann filtert wer, welche Nachricht für welchen Client gedacht ist oder soll der Server vorher schon filtern und dann die Nachrichten den Clients zuschicken die es auch erhalten sollen?
> 
> Lösung 1 scheint mir einfacher zu sein aber bin gespannt auf eure Meinungen.



Generell sollte der Client nur die Informationen erhalten, die er auch benötigt. Die richtige Informationsverteilung ist Sache des Servers.


----------



## Fireche (2. Nov 2014)

wozu braucht es eigentlich einen Client Handler der meistens in der Klasse Server steht? Warum es nicht gleich in die Serverklasse schreiben?


----------



## Fireche (3. Nov 2014)

So, es funktioniert soweit alles ganz gut ^^ 
Server Klasse: Ideone.com - 6uMQWe - Online Java Compiler & Debugging Tool
Client Klasse: Ideone.com - wObOY5 - Online Java Compiler & Debugging Tool

Das einzige Problem ist, dass in der Server Klasse bei Zeile 177. Es sollten eigentlich beide Clients diese Nachricht erhalten aber es erhält nur der Client, der Runde 1 beendet und ich kann mir nicht erklären weshalb, denn ich habe 2 Player für jeden Client und beide rufen die setScore() Methode auf, welche eine Zeile darüber steht.

Vielleicht kann mir jemand weiterhelfen. Sorry falls es etwas unverständlich klingt oder ich meine Frage nicht perfekt formuliert habe aber es ist 3 Uhr ^^ und ich bin den ganzen Tag daran gesessen und ein bisschen ausgepowert 

Danke für eure Geduld. mfg


----------



## smer4 (3. Nov 2014)

1) mach erstmal ein lokales Spiel, mit mehreren "spielern", guck da was jeder Spieler macht
2) Dann kannst du ein kleiner Protokoll formulieren, z.B. beim jeden Request sendet ein Client login, password, und verschiedede Kommandos, und Endsymbol, weiter kann Nachricht verschlüsselt sein.
3) mach mal auf jedem Klien eine Schleife, die Daten von Server abliest als array von Bytes und mit Endsymbolen trennts du die voneinander. Dann kann jeder Klient zu jeder Zeit plötzlich eine Nachricht bekommen, da nicht immer ein Klient weisst dass am Server was aktualisiert wurde.


----------

