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

15.01.2010, 12:41

LAN-Multiplayer in C++

Hallo Leuts,

kennt ihr das neue Super Mario Bros. für die Wii? Kann man mit 4 Spielern im Multiplayer zocken und das macht richtig fun. So was braucht mein Spiel natürlich auch.

Eine Implementierung dürfte keine großen Probleme aufwerfen, allerdings habe ich absolut garkeine Ahnung von Netzwerkprogrammierung.
Ich brauche nur ein paar ganz einfach scheinende Sachen:

-Jeder Member soll den Positionsvektor an Host senden.
-Host soll den dann von allen Membern empfangen..
-..und sie wiederum an an alle Member verteilen.
-Die Member sollen die dann wieder empfangen.

Also eine einfache Synchronisierung der Spielerpositionen, alles andere muss nicht übertragen werden; das kann jeder Member selber rechnen.

Kennt ihr gute Bücher, Tutorials oder Libs dazu?

Danke schonmal, Fred

2

15.01.2010, 12:54

Wenn du das auf TCP Sockets aufsetzen willst, würde ich die SFML nehmen.
http://www.sfml-dev.org/tutorials/1.5/network-packets.php

Gerade die Verwendung von Paketen macht es meiner Meinung nach sehr einfach.
Identifizieren kannst du die Pakee, wenn du am Anfang immer eine Id rein schreibst, welche für jeden Pakettyp eindeutig ist.

3

15.01.2010, 13:09

Ansonsten Stichwort Winsock.
Das Tutorial hab ich mal schnell gegoogelt:
http://www.c-worker.ch/tuts/wstut_op.php

Das benutze ich für mein Spiel derzeit auch. Ist eigentlich keine schwere Sache.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

15.01.2010, 13:18

RakNet (http://www.jenkinssoftware.com/raknet/index.html) ist eine recht umfassende Netzwerk Bibliothek, die sich auch automatisch darum kümmern kann das festgelegte Objekte mit allen Clients synchronisiert werden.

Kann natürlich sein das der Umfang viel zu groß ist. Zudem ist die Lizenz etwas ungewöhnlich.

5

15.01.2010, 13:26

Zitat von »"Tobiking"«

Kann natürlich sein das der Umfang viel zu groß ist. Zudem ist die Lizenz etwas ungewöhnlich.

Ungewöhnlich nicht, er müsste halt 100€ für die Nutzung bezahlen.
Daher würde ich für GooseGogs davon abraten.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

15.01.2010, 13:31

Also ich kenne noch folgende lib:
-ENet
-Zoidcom
-Irrnet (ein irrlicht Wrapper von ENet)
-ACE
-HawkNL
-syncsys

persönlich kann ich was zu RakNet, ENet und syncsys sagen:
http://networklibsbenc.sourceforge.net/ bzw. http://networklibsbenc.sourceforge.net/comparison.htm

Auf jedenfall unterstützen Irrnet, syncsys und RakNet sowas in der Richtung:

C-/C++-Quelltext

1
2
3
networkbuffer buffer;
buffer << position;
send(buffer);


Syncsys ist von mir und auf die Synchronisation von vielen Objekten spezialisiert. Für deinen Fall mit den 4 Spielern könnte da Syncsys ein wenig overkill sein (wobei RakNet deutlich größer ist), aber es ist halt ein anderer Ansatz als bei einem "normalen" System. Wenn du mehr als die 4 Objekte synchronisieren willst, könne jedoch Syncsys deutlich überlegen sein.
RakNet unterstützt auch das synchronisieren von Objekten aber der Ansatz ist meiner Meinung nach in keinster Weise wirklich perfomant.
Ansonsten würde ich dir empfehlen einfach mal in alle 3 libs reinzuschauen, oder du schaust dir direkt die Verwendung mal in http://networklibsbenc.sourceforge.net . Einfach den source vom SVN ziehen und einen Blick in die Impl_... Ordner werfen :) .

EDIT: Achja networklibsbenc nutzt nicht die aktuellsten versionen der libs. An Syncsys habe ich erst neulich einiges geändert und einige Beispiel hinzugefügt: http://syncsys.sourceforge.net/ bzw. http://syncsys.svn.sourceforge.net/svnroot/syncsys/test/example2.cpp (ein Beispiel wo der Client dem Server veranlässt ein Objekt zu ändern und der Server den geänderten Objektzustand weiterverteilt).
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.

7

15.01.2010, 15:30

ok, dankeschön an alle.

hab mir mal sfml angeschaut. ist wirklich ganz einfach, hab grad in 15min einen konsolenchat geschrieben =). Das einzige was nervt, ist dass ich dem clienten die serveradresse sagen muss. kann der client nicht irgendwie nach verfügbaren servern im lan suchen oder muss ich das per hand machen, wenn ja, wie?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

15.01.2010, 15:40

Per UDP Broadcast. Du schickst ein "Ich suche Server" und alle Server müssen dann antworten "Ich bin einer". Broadcast addresse ist immer *.*.*.255 (die sterne sind das aktuelle netzwerk). Für deinen Fall könnte ein Chat noch relativ nahe am Spiel sein, aber sobald das Spiel komplexer wird, unterscheidet es sich doch stark vom klassischen "eins hin-eins her".
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.

9

15.01.2010, 15:48

Zitat von »"Nox"«

Für deinen Fall könnte ein Chat noch relativ nahe am Spiel sein, aber sobald das Spiel komplexer wird, unterscheidet es sich doch stark vom klassischen "eins hin-eins her".


klar stelle ich mir das komplexer als ein chat vor. werde dann sowiso alles in einen extra-thread auslagern.

Zitat von »"Nox"«

Per UDP Broadcast.


ok, ich frage also per udp die adresse der server ab. ich denke das ist auch kein prob, wenn ich dann die erhaltenen aressen in einem tcp system weiter verwende.

10

15.01.2010, 16:01

Zitat von »"Nox"«

*.*.*.255 (die sterne sind das aktuelle netzwerk)


und wie kriege ich das aktuelle netzwerk raus? wenn ichs mit den sternen eingebe, klappts nicht.

Werbeanzeige