ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!
So, du willst also ein Multiplayer-Spiel programmieren, wie? Nun, dann
bist ja hier richtig. DirectPlay macht uns die Sache so leicht wie es nur
geht.Serielle Verbindung, Modem, IPX (LAN) und TCP/IP (Internet) - DirectPlay
beherrscht alle Protokolle, und du wirst kaum Unterschiede in ihrer Handhabung
feststellen. Schnall dich an, es geht los!
Der Weg zu DPlay führt über acht Stationen: Initialisierung,
Auflisten der Verbindungstypen, Verbindung herstellen, Spiel starten bzw.
einem Spiel beitreten, Spieler erstellen, Spiel beginnen, Nachrichten über
den Spielverlauf verschicken/empfangen und Terminieren der Verbindung.
Eine kurze Beschreibung der aufgeführten Bereiche:
Initialisierung - Wie bei allen anderen Funktionen von DirectX müssen
auch hier einige verschiedene Objekte initialisiert werden. Wie du sehen
wirst ist das recht einfach.
Auflisten der Verbindungstypen - Ein "Verbindungstyp" ist so etwas wie
ein Treiber der es DPlay erlaubt mit anderen Instanzen von sich selbst
auf Remote-Systemen (anderen Computern mit DPlay) zu kommunizieren und
interagieren. Die vier Standardtypen sind Serielles Kabel, Modem, IPX und
TCP/IP. Es ist möglich eigene Verbindungstypen zu erstellen, aber
das würde den Rahmen dieses Tutorials sprengen. :-)
Im übrigen sollten diese vier Standardtypen gut genug für
jeden Multiplayer-Programmierer sein!!!
Wenn die Verbindungstypen aufgelistet wurden können sie dem Benutzer
in verschiedenen Wegen angezeigt werden (z.B. in einem Listenfeld oder
durch schöne hübsche Bildchen - der Übersetzer) um das Erkennen
des gewünschten Typs zu erleichtern.
Herstellen einer Verbindung - Nur weil ein Verbindungstyp aufgelistet
wird heißt es noch lange nicht dass dir Verbindung auch hergestellt
werden kann! Vielmehr wissen wir dann nur, dass der Treiber für diesen
Typ installiert ist. Auch wenn du nicht an einem LAN angeschlossen bist,
kann dir der Verbindungstyp IPX angezeigt werden! Wenn der Benutzer also
einen Verbindungstyp auswählt mußt du versuchen, ob die Verbindung
hergestellt werden kann und den Benutzer das Ergebnis (Erfolg/Misserfolg)
mitteilen.
Ein Spiel starten/Einem Spiel beitreten - Angenommen, die Verbindung
konnte hergestellt werden, können wir nun fortfahren ein Spiel zu
"Hosten" oder einem laufendem Spiel beitreten ("Join" - 'Join' heißt
auf Englisch so viel wie beitreten, 'Host' bedeuted so viel wie 'Gastgeber'
oder 'bereitstellen').
Jede Möglichkeit muss einen eigenen Weg nehmen. Wenn wir ein Spiel
hosten, müssen wir ein s.g. "Session Objekt" ('Session' = Sitzung,
Spiel) erstellen, verschiedene Parameter festlegen wie z.B. die maximale
Anzahl der Spieler und den Namen der Session. Um einem Spiel beizutreten,
müssen wir erst alle verfügbaren Sessions, die mit unseren ausgwählten
Verbindungstyp laufen, auflisten und dem Spieler die Möglichkeit zur
Auswahl geben.
Spieler erstellen - Nachdem wir ein Spiel gestartet haben oder einem
beigetreten sind, müssen wir einen Spieler (auch "Player") erstellen,
den wir als unsere Identität im bevorstehendem Spiel benutzen werden.
Wir müssen wieder einige Parameter festlegen, wenn wir den Spieler
initialisieren, und das Ergebnis im Programm auffangen und verarbeiten.
Spiel starten - Wenn genug Spieler mit dem Spiel verbunden sind, kann
das Spiel gestartet werden. Das ist mehr eine Formalität als eine
Bedingung von DPlay. Wenn der Spieler erst einmal mit dem Spiel verbunden
ist, kann er schon Nachrichten von/an jeden anderen Spieler senden/empfangen.
In Spielen mit einer festgelegten Anzahl von Spielern ist es wichtig, das
"Joinen" von anderen Spielern zu unterbinden, um zu verhindern das irgendwelche
Spieler mitten in ein laufendes Spiel platzen.
Nachrichten während des Spieles - Wurde das Spiel gestartet, können
Nachrichten ("messages") an alle oder einem Teil der beteiligten Spieler
gesendet werden. Das Format dieser Nachrichten kann selbst festgelegt werden
und an alle Gegenheiten des speziellen Programms angepasst werden. Außerdem
beeinflußt eine Vielzahl von Optionen die Geschwindigkeit und Verlässlichkeit
der Nachrichten.
Terminierung - Wenn ein Spieler aus einem DPlay-Spiel aussteigt, ist
es wichtig die verknüpften Objekte richtig aufzulösen, sonst
wird die Spielinterne Terminierungsnachricht nicht gesendet. Vielleicht
nimmt dir DirectX selbst diese Arbeit ab, aber vertrau lieber nicht darauf!
Denk daran, dies ist nur eine Erklärungsversuch für den Aufbau
von DPlay, aber es sollte als Basis genügen, auf der du dein Wissen
aufbauen kannst. Achte darauf wie Verbindungstypen, Spiele und Spieler
interagieren - dann ist es gar nicht so schwer.