# Spielfelderstellung im MultiplayerPong



## Gelöschtes Mitglied 12486 (15. Jan 2008)

Ich programmiere derzeit ein Pongspiel, welches für mehr als 2 Spieler über ein Netzwerk (per Socketverbindung) spielbar sein soll. Ein Konzept, wie die einzelnen Spielfelder der einzelnen Applets miteinander verbunden werden sollen, habe ich in diesem Bild dargestellt.

Die Roten Balken sollen "Wände" darstellen, an denen der Ball abprallt. Die grau-gestrichelten Linien sind die Übergangslinien zwischen den spielfeldern. Hier soll der Server einen Ball quasi von einem Spielfeld(Applet) übernehmen und dem anderen Applet übergeben. Jedes Spielfeld hat somit 3 Übergangsfelder(Oben,Unten,Links/Rechts).

In diesem Spiel sollen mehrere Bälle vorkommen. Für jeweils 2 Spieler wird ein Ball hinzugefügt. Bei diesem Bild (8 Spieler) wären es also 4 Bälle. Es kann also vorkommen, dass ein Spieler mehrere Bälle im Bild hat.







Mein Problem ist nun, dass ich nicht weiß wie ich die einzelnen Felder nun verknüpfen soll. Ich habe für den Server eine Game Klasse geschrieben, welche die einzelnen Spieler abspeichert und dann eben eine Art Liste erstellen muss, in der diese Übergänge definiert sind.

Es muss also klar sein, dass wenn der Server über die Socketverbindung von Spieler 1 die Nachricht bekommt, dass der Ball die obere Grenze erreicht/passiert hat, dass der Server dann dem Spieler 3 sagt: "Hey, du bekommst nun den Ball von unten ins Bild und der Ball hat folgende X-und Y-Geschwindigkeiten".

Die Lösung muss dann aber auch noch so sein, dass ich quasi beliebig viele Spieler hinzufügen kann (wobei mehr als 8 unsinnig wäre). Aber auf jeden Fall muss sie nunmal auch für 3,4,5,6,7 Spieler funktionieren. Für 2 Spieler greift wiederum ein Sonderfall. Hier gibt es nur einen Übergang auf der rechten/linken Seite und die Grenzen oben und unten sind nicht passierbar.

Über ein paar Vorschläge zur Lösung würde ich mich sehr freuen!

so far
huetz


----------



## Quaxli (15. Jan 2008)

Ein Vorschlag zur Lösung:

Schau, daß Du die Grenzen des Spielfelds variable gestaltest, z. B. als Rectangle, so daß sie erweitert werden können, wenn Spieler hinzukommen.
Die einzelnen Spieler bekommen dann ein Segment des Spielfeldes zugewiesen. 
Denn Ball bewegst Du innerhalb des Spielfeldes und prüfst dann, ob er auch innerhalb eines Spielfeldsegmentes sichtbar ist und zeigst in ggf an. das spart Dir einen Haufen Logik.

Ein Vorschlag zum Spiel an sich:

Ich persönlich halt das Konzept für nicht gut. Theoretisch wäre es nämlich möglich, daß Spieler 1 und 2 mit 4 Bällen spielen, wärend die Spieler 3 - 8 nur in der Nase bohren können, weil sie nämlich nur das Spielfeld und ihren Schläger sehen, mehr nicht.


----------



## Gelöschtes Mitglied 12486 (15. Jan 2008)

leider kann ich am konzept nicht viel machen  multiplayer pong ist die Vorgabe und auf diesen Einwand, dass es nunmal langweilig sein kann wollte mein prof nicht wirklich eingehen. Es geht halt um die "Virtualisierung des Spielfeldes im Server"... 

zum vorschlag:

Das würde bedeuten, dass der Server die Berechnung des Balles und seiner Position übernimmt. Bisher hatte ich das so angedacht, dass dies die einzelnen Applets machen. So würde der Rechenaufwand auf alle verteilt werden und der Traffic wäre geringer, da man nur die Übergänge an die Applets weitergeben muss.

Ich kann aber leider gar nicht abschätzen wie hoch der Traffic ist, wenn ich min. 30-35 mal pro sekunde einem Applet mitteilen muss, dass es nun den Ball zeichnen soll. 


Ich hatte erst an eine Art "Zustandsübergangstabelle" gedacht. Jeder Spieler gleicht einem Zustand, welcher in 3 andere Zustände übergehen kann, wenn eine bestimmte Vorgabe erreicht ist (sprich der Ball kommt an die Spielfeldgrenzen). Wenn ein Übergang stattfindet, dann wird eine Nachricht an den nächsten Spieler geschickt, wo drin steht, dass er nun den Ball an Position xy mit geschwindigkeit (x,y) zeichnen soll.

Leider habe ich in java nichts gefunden, mit dem ich eine solche "zustandstabelle" definieren kann.


----------



## Quaxli (15. Jan 2008)

> Leider habe ich in java nichts gefunden, mit dem ich eine solche "zustandstabelle" definieren kann.


Natürlich im Pong-Package. :wink: 

Nee, Spaß beiseite. Sowas schnitzt man sich selber. Grundsätzlich solltest Du aber die Ballbewegung zentral steuern. 



> Leider kann ich am konzept nicht viel machen icon_smile.gif multiplayer pong ist die Vorgabe und auf diesen Einwand, dass es nunmal langweilig sein kann wollte mein prof nicht wirklich eingehen. Es geht halt um die "Virtualisierung des Spielfeldes im Server"...



Mit Deiner jetztigen Lösung triffst Du meiner Ansicht nach auch die Aufgabenstellung nicht, da Du ja bei Deinem Ansatz das Spielfeld eben nicht im Server virtualisierst, sondern diese Aufgabe an die Clients verteilen willst.

Ist die Aufgabenstellung wirklich so, daß jeder nur sein Spielfeld angezeigt werden soll? Wie ist denn die genaue Aufgabenstellung? Multiplayer-Pong ist ja jetzt erst mal ein weiter Begriff und ohne spezielle weitere Vorgaben, fallen mir da spannendere Szenarien ein, z. B. ein 4-Spieler-Pong auf einem quadratischen Spielfeld, wo jeder eine Seite "bewacht" oder ähnliches.


----------



## Gelöschtes Mitglied 12486 (15. Jan 2008)

zur tabelle:

in VHDL ist es leicht eine solche zu definieren, leider bringt mir da nichts 

Die Aufgabenstellung ist, dass jedes Applet nur seinen Bereich sehen kann. Der Ball soll dann eben aus den Spielfeldgrenzen herausfliegen können und beim anderen Applet sichtbar werden.

Somit ist es erforderlich, dass der Server das gesamte Spielfeld "kennt" und die Applets halt nur ihren Teil. Mit Spielfeld ist in diesem Fall ja tatsächlich nur das Feld gemeint, nicht aber der Ball oder die Schläger.

Ausserdem soll es so sein, dass die Rechenarbeit möglichst verteilt sein soll, sprich jedes Applet kümmert sich selbst um seinen Teil und meldet sich wenn etwas besonderes passiert.

Wie genau das gesamte Spielfeld nun aufgeteilt wird bleibt uns überlassen, aber dieser Ansatz wie oben im Bild scheint mir noch am besten, wenn  man ja "n" Spieler unterbringen können soll.


----------

