Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.10.2008, 13:17

Multiplayer über Netzwerk für kleines Spiel

Hey Leute,

ich hab mich mal wieder ans Programmieren gemacht, hab jetzt ein kleines 4Gewinnt mit der SDL programmiert. Ich wollte jetzt einen kleinen Multiplayer einbauen und damits mal was neues ist, es möglich machen das Spiel über LAN zu spielen.
Da ich aber noch nie was mit Netzwerk gemacht habe, bräuchte ich da etwas Rat.

1. Würdet ihr das selber umsetzen mit Sockets oder eine Lib wie z.b. RakNet verwenden. Wenn Lib, ist RakNet für so etwas geeignet oder schon wieder zu groß?
2. Was muss ich beim Design verändern bzw. beachten?

Danke im voraus ;)

2

27.10.2008, 13:27

Re: Multiplayer über Netzwerk für kleines Spiel

Zitat von »"TwoThirds"«

Hey Leute,

ich hab mich mal wieder ans Programmieren gemacht, hab jetzt ein kleines 4Gewinnt mit der SDL programmiert. Ich wollte jetzt einen kleinen Multiplayer einbauen und damits mal was neues ist, es möglich machen das Spiel über LAN zu spielen.
Da ich aber noch nie was mit Netzwerk gemacht habe, bräuchte ich da etwas Rat.

1. Würdet ihr das selber umsetzen mit Sockets oder eine Lib wie z.b. RakNet verwenden. Wenn Lib, ist RakNet für so etwas geeignet oder schon wieder zu groß?
2. Was muss ich beim Design verändern bzw. beachten?

Danke im voraus ;)
1. Für soetwas kleines kann man sich zwar auch ne eigene Lib schreiben, aber du kannst es auch als Projekt sehen dich in RakNet einzuarbeiten um künftig komplexeres darüber zu realisieren. Oder du sagst, dass du wissen möchtest, wie das alles unten drunter funktioniert und aufgebaut ist und schreibst deine eigene Lib für Netzwerkübertragung.

2. Synchronisation. Du musst drauf achten, dass wichtige Daten ankommen bzw. damit rechnen, dass manchmal etwas nicht ankommt. Bei 4-Gewinnt dürfte es sich mit dem Paketloss noch nicht so auswirken, aber trotzdem besser man rechnet von anfang an damit und gewöhnt sich dran... oder nutzt eine lib für TCP. Der Rest sollte eigentlich mehr oder minder offensichtlich sein. Halt die KI durch den Netzwerkspieler austauschen (falls gegen KI gespielt wurde) bzw. Steuerung des inaktiven Spielers zu blockieren (falls Hot-Seat gespielt wurde) und so nen Kram halt... ;)

3

27.10.2008, 14:54

Auch wenn dieser Beitrag vielleicht nicht ganz so fördernd ist: Extra für die SDL gibt es auch eine Lib die sich SDLnet nennt und wohl auch ganz brauchbar ist (es gibt eine kleine einführung bei den WikiBooks: http://de.wikibooks.org/wiki/SDL:_Sdlnet)

Leider habe ich mich damit bis jetzt noch nicht beschäftigt und weiß daher sonst nichts weiteres. Vielleicht hilft es ja trotzdem ;)

mfg Viscil

Gon

Treue Seele

Beiträge: 262

Wohnort: Nahe München

Beruf: Schüler (9. Klasse Gymnasium)

  • Private Nachricht senden

4

27.10.2008, 15:04

Ich mal eine Frage:
Gibt es hier eigentlich schon ein Tutorial zur Netzwerkentwicklung über LAN?
Wenn jemand in dem Bereich schoneinmal etwas gemacht hat, könnte er sein Wissen vielleicht weitergeben.
Das würde bestimmt im Interesse vieler Nutzer (unter anderem mir) sein. :D

5

27.10.2008, 15:10

Zitat von »"Gon"«

Ich mal eine Frage:
Gibt es hier eigentlich schon ein Tutorial zur Netzwerkentwicklung über LAN?
Wenn jemand in dem Bereich schoneinmal etwas gemacht hat, könnte er sein Wissen vielleicht weitergeben.
Das würde bestimmt im Interesse vieler Nutzer (unter anderem mir) sein. :D
najo... hab schonmal nen kleines programm geschrieben, dass ne verbindung zum router herstellt und ein paar befehle sendet zum neustarten... die ganzen telnetmakro programme haben nicht funktioniert, da keiner einfach nen return senden konnte :/

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

27.10.2008, 15:37

Ich habe genug Erfahrung um zu sagen, dass der Unterschied zwischen Socket-Tutorial und fertiger Highlevel-Lib gewaltig ist.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

7

27.10.2008, 16:00

Nox
Och es geht eigentlich. Für Anwendungsprotokolle oder einfache Game-Kommunikation benötigt man nicht direkt eine "Netzwerk-Engine" (Allein der Name ist mehr als *würg*). Da reichen tiefste sockets etwas, gekapselt aus, vollkommen aus.

Wenn ich Renovatio Part III veröffentlicht habe, könnte ich mal einen Mehrteiler über Sockets und die Referenz-Modelle schreiben.

8

27.10.2008, 20:08

Der Vorteil an 4 gewinnt ist, dass es Rundenbasiert ist, somit ist ein Netzwerkmodus sehr einfach möglich und sollte auch später leicht einzubauen sein.
Das eigentliche Verschicken von Daten ist recht leicht, mit Socket Tutorials oder irgendwelche Libs kann man sich sehr schnell n kleinen Chat oder so basteln.

Lustig wird es erst bei zeitkritischen Sachen, wenn du dir genau überlegen musst, wie du Traffic minimierst und Synchronisation gewährleistest. Wobei man Synchronität eh nie perfekt erreichen kann, aber man kann dicht genug drankommen, dass es keiner mehr merkt.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

9

27.10.2008, 20:17

Jonathan_Klein
WTF? Mal ganz im Ernst: WTF? Glaubst du das wirklich was du da sagst, oder nimmst du es nur an?

Ob nun etwas Rundenbasiert ist oder in Echtzeit läuft ist gleichermaßen popelig zu Implementieren, da gibt es keinen Unterschied. In beiden Fällen muss einmal Listen und einmal Send vorhanden sein - in beiden Fällen sogar ggf. mit Threads (je nachdem wie man es machen möchte).

Sync Probleme muss man nicht nur in zeitkritischen Dingen haben, selbst ein "popeliger" HTTP-Server kann mal die Anfrage/Socket verlieren und das beim Aufbau einer 2KByte HTML-Page. Also bitte... Dazu, zeitkritisch im Netzwerk, in einer Welt wo 2 MBit + DSL-Leitungen schon an jedem Haus sind, ist das ja auch kein großes Thema mehr und kann immer mehr etwas "links liegen" gelassen werden. Ausnahmen sind natürlich Server wo 32+ Clients sind und mehrere KByte die Sekunde gesendet werden - was denke ich mal hier wieder nicht der Fall sein wird.

Drum die Bitte, die ich nun denke ich zum 13. male ausspreche: Hör endlich auf Halbwissen oder "Angenommenes Wissen" zu posten, in einer Form die mehr Fragen aufwirft als klärt. Das ist richtige Politiker-Redeweise und die hat noch keinem geholfen.

TwoThirds
Google mal ganz einfach nach "Socket Server Tutorial C++" und freu dich über viele viele hilfreiche Links. ;) Das Thema gibt es fast überall. Also keine Sorge, da ist keine "Black Magic" hinter ;)

10

27.10.2008, 20:26

Ich glaube es nicht nur ich weiß es sogar :P
Tatsache ist doch, dass ein Paket über Netzwerk eine gewisse Zeit benötigt. Bei 4 gewinnt macht einer einen Zug und es ist im Prinzip egal, ob der 2 Sekunden bis zum Gegner braucht und er ihn dann sieht.

Wenn du bei einem Egoshooter aber einfach auf einen Gegner schießt, und das Paket mit dieser Information braucht eine Sekunde bis zum Gegner, kann sich die Spielsituation innerhalb dieser Sekunde stark geändert haben. Hier fangen also die Probleme an, wie man auf allen beteiligten Rechnern dafür sorgt, dass quasi die selben Spielzustände vorhanden sind und außerdem alle Spieler das Gefühl haben, in Echtzeit zu spielen.

Es würde übrigens nicht schaden, wenn du sachlich bleiben würdest, und nicht immer alle Leute beschimpfst, nur damit du dich etwas besser fühlen kannst. Dann wäre die Atmosphäre hier gleich viel angenehmer.
Ein einfaches "das sehe ich anders" oder "das ist leider nicht ganz richtig" klingt doch gleich viel netter.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige