Network Pong

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Network Pong

Beitrag von ZeHa »

Hallo...

wollt mal mein Network Pong vorstellen, nicht weil es so extrem geil ist, sondern eher, weil ich hoffe, daß doch noch irgendeiner auf 'ne Idee kommt, wie man es Internet-tauglich machen kann ;) momentan läuft es unter LAN ganz gut, aber übers Internet kann man's getrost vergessen - zu langsam...
Also wenn jemand was weiß, bitte Bescheid sagen ;) ansonsten ist es für 'ne kleine spaßige Runde im LAN ja dennoch ganz gut zu gebrauchen...

www.christian-gleinser.de/prog/Network%20Pong%206.exe

Kann auch demnächst mal den Source posten, vielleicht weiß ja einer Rat... bin hier aber momentan in der Schule, daher nur mal die EXE.

Bedienung: einer macht Server, einer macht Client, der Server startet das Spiel dann mit der Leertaste. Schläger wird mit Pfeil hoch und Pfeil runter bedient. Leider muß der Client bei Spielstart sehr flott reagieren, aber ich hab grad leider nicht die Möglichkeit, das zu ändern (werde wohl die Geschwindigkeit der Schläger noch erhöhen).

Viel Spaß ;)
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Gleich mal ein Hinweis... hab mich vorhin mit 'nem Kumpel unterhalten, der mir ein paar Tips für Synchronisierung gegeben hat... werd das mal ausprobieren und dann wieder bescheid sagen ;) kann aber 'ne Weile dauern...
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Ich finds ganz lustig, besonders, wenn man die Space-Taste gedrückt hält... :allright:
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

LOL geil ;) hab ich noch gar nicht bemerkt :)

Übrigens kann es auch sein, daß die obige Version ein wenig buggy ist, ist wohl schon zu sehr vom Netzwerkoptimierenprobieren verseucht ;)
RaVeN99
Beiträge: 310
Registriert: 29.08.2004 15:26
Wohnort: Weiden i.d.OPF
Kontaktdaten:

Beitrag von RaVeN99 »

Hmmm, habs mir jetz ned angeguggt, aber was ne möglichkeit sein könnte um das ganze über i-net spielbar hinzubekommen:
Anstatt die Koords des Balles zu senden, sende einfach die richtung + geschwindigkeit des balles. Das ganze nach jeder kollision. Der Rest wird jeweils local berechnet.
Also Quasi so:
Der Server registriert eine kollision des balles mit dem schläger des players. Er sendet an den client die neue richtung des balles + die aktuelle geschwindigkeit. Der Client erhält die Daten, berechnet die Bewegung des Balles und checkt gleich mal, ob in naher zukunft eine Kollision mit ner Wand stattfindet. Wenn dem so ist, berechnet er das natürlich gleich mit. Ansonsten wird gewartet, bis der ball wieder eine Richtungsänderung erfährt. Dann beginnt das ganze wieder von vorne.
Sollte eine kollision mit ner Wand stattfinden, kannste ja auch die daten sicherheitshalber nochmal wechselweise kontrollieren, ob auch jeder die selben hat.
Aber im Prinzip brauchste ned viel mehr hin oder her schicken solange das spiel läuft. Klar kannste ab und an sicherheitshalber wie gesagt die koords bzw richtung etc. überprüfen, aber mehr jetz auch ned (zumindest was den ball angeht). Genauso verfährste effektiv mit den schlägern:
Wird die bewegungsrichtung des schlägers geändert, wird an den anderen Spieler eben die richtung + Geschwindigkeit übergeben und eben auch nur dann, wenn eine Änderung stattgefunden hat.
Bei Pong sollte es noch recht einfach sein das ganze zu synchronisieren, da man die meisten Daten einfach local berechnen kann, bzw. recht wenige Infos von der anderen Seite benötigt.
Was du auf jedenfall machen solltest (falls nicht schon geschehen): Das ganze Zeitkritisch programmieren. Sprich so, dass das ganze auf jedem rechner, egal wie schnell oder langsam immer gleich schnell läuft. Bei zu langsamen rechnern ruckelts halt dann, aber die Zeitgleichheit ist mehr als wichtig.

Wie gesagt, ich habs mir ned angesehen, weiss ned was du bereits drin hast, wie du die pakete übermittelst etc. Nur ich denke mal, dass mit dieser Methode das ganze durchaus spielbar sein dürfte, solange die Pings nicht zu hoch sind. Notfalls kannste ja auch die Fluggeschwindigkeit des Balls herabsetzen, dann biste auch nimmer so krass an die Pings gebunden. Prinzipiell solltest du halt schauen dass du die anzahl der Pakete die für einen flüssigen Ablauf benötigt werden möglichst gering hältst. Das schaffste mit der oben beschriebenen Methode imho eigentlich ganz gut.
Kann dir allerdings keinen Erfolg garantieren, aber nachdem in der PB-Lounge ein ähnliches Thema diskutiert wird, habe ich mir einfach mal die Tipps angeschaut und auf dein Projekt umgelegt. Bin aber zuversichtlich dass es klappen wird :)

Würd mich freuen wenns hinhaut =)
Viel Erfolg!


RaVeN
AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Genauso hab ichs erstmal vor - daß nicht ständig Datenpakete gesendet werden, sondern wirklich nur dann, wenn es tatsächlich nötig ist. Ich glaub, mit der momentanen Lösung ist die Leitung mehr oder weniger verstopft ;)

Es muß dann aber auch noch dafür gesorgt werden, daß es auch wirklich synchron läuft. Daher muß vor dem Spiel ein kurzer Verbindungstest gemacht werden. Gibt es eine Möglichkeit, über PB den Ping zu ermitteln?
Nik
Beiträge: 132
Registriert: 04.02.2005 19:57

Beitrag von Nik »

Bei spielen denke ich ist es seeehhhr wichtig UDP statt TCP zu verwenden, leider kann das Purebasic nicht von alleine aber auch hier für gibt es eine Userlib, damit geht es bestimmt. Mfg Niklas
www.KoMaNi.de
Eine kleine Gruppe von Hobby Programmierern, die gerade einen Instant Messenger natürlich in PureBasic schreiben.
Robert Wünsche
Beiträge: 243
Registriert: 29.08.2004 12:46
Wohnort: Irgendwo im nirgendwo
Kontaktdaten:

Beitrag von Robert Wünsche »

Nik hat geschrieben:Bei spielen denke ich ist es seeehhhr wichtig UDP statt TCP zu verwenden
Da gebe ich dir nicht recht, denn die spezifikation für UDP besagt, das die datenpackete in umgekerter reihenfolge, garnicht oder mehrfach ankommen können und das manuel zu managen halte ich nur wegen des geringeren Pinges für Spiele nicht so ideal.
Nik hat geschrieben:...aber auch hier für gibt es eine Userlib, damit geht es bestimmt.
Ja, giebt es (siehe purearea.net in den Userlibs->UDPNetwork) und es funktioniert auch.

Man kann in seiner eigenen Aplikation ein PING Datenpacket zum Clienten schicken, der schickt so schnell wie möglich ein PONG Datenpacket zum Server zurück und so kennt der Server den Ping des Spielers und kann ihm seine Ping zeit senden.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> der schickt so schnell wie möglich ein PONG Datenpacket zum Server zurück
So ist also der Spielname entstanden :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Richtung/Speed übertragen ist schon ganz gut, allerdings sollte man als Cheating-Schutz noch 2 Dinge einbauen:
1.) Das Senden der Daten erfolgt auch nach dem "Ping-Pong"-Prinzip, d.h. wenn PC A Richtung und Speed gesendet hat, dann muss er mit dem Senden warten bis PC B seinerseits die entsprechenden Daten geschickt hat. Sonst könnte ja jemand, der cheaten will, das ganze einfach nachbauen, und während des Fluges die Richtung nochmal ändern. Die Berechnung von "Abprallern" oben und unten an den Grenzen des Spielfelds übernimmt der PC, der den Ball geschossen hat. Ausserdem werden, falls der PC, der den Ball "empfangen" soll, meldet, er habe den Ball gekriegt, die Berechnungen von beiden PCs verglichen, und bei Nichtüberstimmung eine Fehlermeldung ausgegeben und das Spiel neu gestartet. (Punkte können jedoch erhalten bleiben)
2.) ein maximaler Speed-Wert. Wird dieser überschritten, so wird der Spieler, der den Ball weggeschossen hat, automatisch als Cheater identifiziert.

nur mal mein unqualifizierter Senf... :mrgreen:
PS: wenn was nicht stimmen sollte (falsch oder unlogisch ist eurer Meinung nach), dann sagts mir bitte. Ich bin auf dem Gebiet nämlich noch weniger als ein Greenhorn, und stecke meine Nase nur mal wieder in Dinge rein, von denen ich gar keine Ahnung hab... Ich böser Theoretiker... :wink: :freak:
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Antworten