Warning: Undefined array key 259 in /mnt/web218/a3/28/510129628/htdocs/xmlhelp.php on line 522 GLBasic Benutzerhandbuch

GLBasic Benutzerhandbuch

Main sections

07 Netzwerk für Spiele

<B>veraltetes Material</B>
Bitte die Referenz von NET... Befehlen nachschlagen bis dieser Artikel nachgeführt wurde.

Netzwerk Spiele



Diese Sektion ist für die Programmierung von Multiplayer Netzwerkspielen mit GLBasic gedacht.

Allgemeines



Netzwerkspiele sind ein echter Spass. Aber Vorsicht, sie zu programmieren ist nicht einfach. Die von GLBasic zur Verfügung gestellten Befehle sind zwar sehr einfach, sie zu benutzen bedeutet etwas Übung. Bevor Du ein Multiplayerspiel schreibst, überlege lieber, ob man das Ganze nicht auch zu zweit an einem Computer spielen kann. Nicht jeder hat ein Netzwerk zuhause und Multiplayer-Spiele an einem Computer sind wesentlich leichter zu programmieren.

Das folgende Beispiel ist eine Client/Server Applikation, aber GLBasic kann noch viel mehr. Ein Beispiel der Flexibilität ist z.B. dass man eine Bestenliste aus dem Internet lädt und verwaltet (dazu das Scramble Beispiel auf der GLBasic Webseite ansehen).

Initialisieren



Um ein Netzerkspiel zu starten, gibt es immer einen Host und mehrere Clients, die dem Spiel beiwohnen (joinen). Um ein Spiel zu 'hosten', benutze folgenden Befehl:
ok=NETHOSTGAME(prt, sn$, p1$, p2$) 

Wobei 'prt' das Protokoll ist, das verwendet werden soll.
0=TCP/IP (Internet, oder lokales Netzwerk)
1=IPX (Lokales Netwerk)
sn$ ist der Name der Sitzung (z.B. "Mein_Spiel")
p1$ und p2$ sind Verbindungsparameter. Bei NETHOSTGAME müssen Sie leer sein ("").

Wenn das geklappt hat, ist ok=TRUE, sonst FALSE.

Um einer aktiven Sitzung als Teilnehmer (Client) beizutreten, verwende den Befehl:
ok=NETJOINGAME(prt, sn$, p1$, p2$)

Die Parameter sind wie oben. Jedoch braucht NETJOINGAME natürlich eine Information, wo denn nun der Host ist. Bei TCP/IP kann in p1$ die IP-Adresse des Hosts angegeben werden. Dabei ist leer oder "0.0.0.0" irgend ein Computer im lokalen Netzwerk. Alle weiteren Adressen können entweder so:"149.232.23.2" oder so "www.Dream-D-Sign.de" angegeben werden. Für IPX muss p1$ und p2$ leer sein.
Hat das geklappt, ist ok=TRUE, sonst FALSE.

Spieler bitte



Jetzt ist es an der Zeit, einen Spieler ins Netz zu bringen. Jedes Programm (jeder User) kann mehrere Spieler (Player) verwalten. Darum hat jeder Player einen Namen und eine eindeutige Player-ID. Man erstellt einen Spieler mit:
id$=NETCREATEPLAYER$(name$)

Dabei ist name$ ein alphanumerischer Name ("Max"). id$ enthält nun eine globale ID für diesen Player. Ein Spieler wird aus dem Spiel genommen, wenn das Programm beendet wird, oder mit dem Befehl
NETDESTROYPLAYER id$.

Der Postbote kommt



Ein erstellter Player kann nun Nachrichten verschicken und empfangen. Nachrichten die verschickt werden, erreichen alle Player in der Sitzung, ausser dem Player, der sie abgeschickt hat. Ein Player kann nur Nachrichten abrufen, die auch an ihn geschickt wurden. Es gibt dafür folgende Befehle:
msg$=NETGETMSG$(id$)
ok = NETSENDMSG(idfrom$, idto$, msg$)

Wobei idto$ immer die ID des Players ist, der die Nachricht schickt / empfangen soll.
msg$ ist die gesendete / empfangene Nachricht. Sie ist leer ("") wenn keine Nachricht für diesen Player verfügbar ist.
ok=TRUE/FALSE je nach dem, ob die Nachricht geschickt werden konnte oder nicht.

Seid ihr alle da?



Um festzustellen, wer alles an einer Session angemeldet ist, was für eine ID$ und was für einen Namen die Spieler haben, sind in GLBasic ein paar nützliche Funktionen implementiert worden.
NumPlayers=NETNUMPLAYERS()
playerID$[i]=NETGETPLAYERID$(i)
playername$[i]=NETPLAYERNAME$(playerID$[i])

Der Befehl NETPLAYERNAME$ liefert "NO_DATA" wenn ein Fehler vorliegt.
Man benutzt die Befehle wie im folgenden Code:
   PRINT "Angemedete Spieler:", 100, 50
NumPlayers=NETNUMPLAYERS()
FOR i=0 TO NumPlayers-1
playerID$[i]=NETGETPLAYERID$(i)
playername$[i]=NETPLAYERNAME$(playerID$[i])
PRINT playername$[i] + " (ID:" + playerID$[i]+") " + i, 100, i*20+100
NEXT

See also...