Guten Mittag,
ich weis nicht, ob das nun zur Spieleprogrammierung zählt oder Netzwerken. Wenn es nicht passt, dann kann man den Thread ja noch verschieben. Ich versuche mein Spiel über Socket netzfähig zu machen und hätte gerne ein paar Meinungen, Anregungen oder Verbesserungsvorschläge.
Zuersteinmal wird es ein 2D-Arcarde Game, das lediglich mit Rectangle und einfacher Kollisionsüberprüfung zurecht kommt. Es soll bis zu 8 Spieler unterstützen. Ich weis nicht wie sich das Verfahren nennt, aber da gibt es sicherlich schon einen Namen:
- Es gibt einen MainServer, der eine Liste<Socket> besitzten und über BufferedReader und BufferedWriter mit diesen kommunizieren kann.
- Der MainServer prüft alle Reader und Writer sequenziell ab (eine/keine Nachricht -> Nächster)
- Die Clients kennen sich untereinander nicht und senden den Änderungsbedarf an den MainServer, welche ohne Überprüfung auf Richtigkeit die Textzeile sofort an alle Clients übermittelt.
- Der MainServer überprüft alle paar Sekunden, ob der Client verbunden ist, indem er eine Nachricht versendet und schaut, ob eine IOExceptiong geworfen wird (Evtl. gibt es da eine bessere Möglichkeit)
- MainServer und Client kommunizieren mitteles einem Protokol ("\name Hiho", "\ip 127.0.0.1")
- Beim Verbindungsaufbau teilt der MainServer den Clients mit, wer alles mit diesem Verbunden ist Liste<String> ipAdressen.
- Fällt der MainServer aus, so versucht der erste Client in der Liste den Serverdienst zu übernehmen und alle anderen Clients, welche durch die IOException gemerkt haben, dass der MainServer weg ist, verbinden sich mit dem ersten Client in der ipAdressen Liste. So wird der erste Client zum MainServer.
Dadurch wird gewährleistet, dass das Spiel nach einem Serverabsturtz weiterläuft. Ich denke mal, das "größte Problem" an der Sache ist, dass die Nachrichten alle sequential eintuckern und dann verarbeitet werden. Bei den Clients macht es eigentlich nicht viel aus, aber beim Server weis ich nicht, ob er damit zurechkommen wird. Es könnte natürlich aus sein, dass 8 Threads für Input und 8 Threads für Output eine größers Problem ensteht. Immerhin muss nebenbei das Spiel auch noch auf dem selben Rechner laufen.
Evtl. nochmal kurz: Nachrichten sind dann "\playerInit X,Y,PLAYER_WALK,true,false " und die werden dann verarbeitet zu player.x = ..., player.y = ...; oder "\player walk_right,speed", \"player stop,speed"
ich weis nicht, ob das nun zur Spieleprogrammierung zählt oder Netzwerken. Wenn es nicht passt, dann kann man den Thread ja noch verschieben. Ich versuche mein Spiel über Socket netzfähig zu machen und hätte gerne ein paar Meinungen, Anregungen oder Verbesserungsvorschläge.
Zuersteinmal wird es ein 2D-Arcarde Game, das lediglich mit Rectangle und einfacher Kollisionsüberprüfung zurecht kommt. Es soll bis zu 8 Spieler unterstützen. Ich weis nicht wie sich das Verfahren nennt, aber da gibt es sicherlich schon einen Namen:
- Es gibt einen MainServer, der eine Liste<Socket> besitzten und über BufferedReader und BufferedWriter mit diesen kommunizieren kann.
- Der MainServer prüft alle Reader und Writer sequenziell ab (eine/keine Nachricht -> Nächster)
- Die Clients kennen sich untereinander nicht und senden den Änderungsbedarf an den MainServer, welche ohne Überprüfung auf Richtigkeit die Textzeile sofort an alle Clients übermittelt.
- Der MainServer überprüft alle paar Sekunden, ob der Client verbunden ist, indem er eine Nachricht versendet und schaut, ob eine IOExceptiong geworfen wird (Evtl. gibt es da eine bessere Möglichkeit)
- MainServer und Client kommunizieren mitteles einem Protokol ("\name Hiho", "\ip 127.0.0.1")
- Beim Verbindungsaufbau teilt der MainServer den Clients mit, wer alles mit diesem Verbunden ist Liste<String> ipAdressen.
- Fällt der MainServer aus, so versucht der erste Client in der Liste den Serverdienst zu übernehmen und alle anderen Clients, welche durch die IOException gemerkt haben, dass der MainServer weg ist, verbinden sich mit dem ersten Client in der ipAdressen Liste. So wird der erste Client zum MainServer.
Dadurch wird gewährleistet, dass das Spiel nach einem Serverabsturtz weiterläuft. Ich denke mal, das "größte Problem" an der Sache ist, dass die Nachrichten alle sequential eintuckern und dann verarbeitet werden. Bei den Clients macht es eigentlich nicht viel aus, aber beim Server weis ich nicht, ob er damit zurechkommen wird. Es könnte natürlich aus sein, dass 8 Threads für Input und 8 Threads für Output eine größers Problem ensteht. Immerhin muss nebenbei das Spiel auch noch auf dem selben Rechner laufen.
Evtl. nochmal kurz: Nachrichten sind dann "\playerInit X,Y,PLAYER_WALK,true,false " und die werden dann verarbeitet zu player.x = ..., player.y = ...; oder "\player walk_right,speed", \"player stop,speed"
hätte gerne ein paar Meinungen, Anregungen oder Verbesserungsvorschläge.![]()
Zuletzt bearbeitet: