Dieses Projekt entstand im Modul "Programmierung II". Es ist ein Pong-Spiel mit Multiplayer Funktionalität. Der Server unterstützt mehrere Spieler und gleichzeitige Spiele.
Gehe in den Ordner bin
und doppelklicke die Datei winfpong-client.jar
.
Unter Mac/Linux führe vorher noch das kommando chmod +x winfpong-client.jar
aus
Alternativ kannst du die Jar auch direkt im Termial starten:
java -jar ./bin/winfpong-client.jar
Alternativ öffne das Projekt mit IntelliJ und starte die konfiguration Client
oben rechts.
Gebe den hostname eines Servers ein und drücke Join
.
Der Port ist standardmäßig der Port 2347
.
Auch deinen Spielernamen kannst du spezifizieren. Dieser wird persistent in der .winfpong
Datei in deinem Nutzerordner gespeichert und wieder geladen wenn du das Spiel neu startest.
Drücke Create Game
und warte bis ein anderer Spieler beitritt oder klicke Join
neben einem Spielernamen um einem Spiel beizutreten.
Gehe in den Ordner bin
und doppelklicke die Datei winfpong-server.jar
.
Unter Mac/Linux führe vorher noch das kommando chmod +x winfpong-server.jar
aus
Alternativ kannst du die Jar auch direkt im Termial starten:
java -jar ./bin/winfpong-server.jar
Wähle die Run Configuration Server
aus und starte das Programm.
Ein Docker Image kann mit folgendem Befehl erstellt werden:
docker build . --tag winfpong-server
Das Docker Image kann mit folgendem Befehl gestartet werden:
docker run -p 2347:2347 -p 2347:2347/udp -d winfpong-server
Dies ist eine öffentliche Server Instanz die im Client voreingestellt ist.
Leider hat dieser Server einen Fehler wodurch das Spielfeld auf dem Client nicht aktualisiert wird.
Der Server schickt aus unerklärlichen Gründen und trotz gleicher Codebase zu einem lokalen Server immer die SpieleID 0?x
.
Um das Spiel zu testen muss leider ein lokaler Server gestartet werden.
Nach dem Beitritt zu einem Spiel musst du einmal das Fenster de-fokussieren und durch einen Klick wieder fokussieren.
Die Reflexionswinkel werden physikalisch berechnet und enthalten eine Zufallskomponente. Die Zufallskomponente führt bei steilen Kollisionen manchmal zu einer unnatürlichen Reflexionsrichtung. Dieses Verhalten wir außerdem verstärkt da die Reflexionswinkel ±10° zur Lotrechten des Hindernisses gesperrt wurden.
Falls ein Spielserver unter dem eingegebenem Host+Port nicht erreichbar ist, stürzt der Client beim Verbindungsaufbau ab.
Wenn der Server gestoppt wird, erkennt dies ein verbundener Client nicht. Die GUI wird nicht mehr aktualisiert. Der Client kann sich jedoch neu verbinden und alles ist wieder normal.
In der Berechnung bewegt sich der Ball in einem Feld von x -1 bis +1 und y -1 bis +1. Das Spielfeld wird als breites Rechteck dargestellt, weshalb die Geschwindigkeit verzerrt wird.
Wenn das Spiel bereits läuft und ein Spieler das Spiel verlässt, wird das Spiel weiterlaufen. Wenn der zweite Spieler das Spiel nun auch verlässt, wird es vollständig gestoppt