Multiplayer-Spiel
Übersicht

ToninatorBetreff: Multiplayer-Spiel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo liebe Leute!
Ich habe mich die Tage an der Multiplayer-Programmierung versucht. Dabei habe ich mir zuerst GameNet angeschaut. Ich hatte es aber nicht wirklich zu 100 % verstehen können, weil ich vor allem keine wirklich ausfürhlichen Tutorials dazu finden konnte. In der Hoffnung, damit mehr Glück zu haben, holte ich mir BNetEx, aber auch hier wollte es nicht so wirklich laufen. Bevor ich weiter schreibe, wäre es wohl besser, erst einmal zu schildern, was ich programmieren möchte: Mir schwebt vor, dass Spieler sich zu einem Server verbinden können. Dort soll man auf einer Map herumlaufen und verschiedene Dinge tun können, also sich Nachrichten schreiben, Mobs abschlachten, sich gegenseitig bekämpfen und miteinander handeln. Ich habe es für mich selbst noch nicht so genau spezifiziert, aber so ungefähr könnte man mein Projekt beschreiben. Wissen würde ich gerne, welche der Möglichkeiten, die einem in BlitzMax zur Verfügung stehen, um ein Online-Spiel zu realisieren, ihr mir empfehlen würdet und wie man sich das Wissen darüber am besten aneignet. Außerdem sei gesagt, dass ich zwar kein Anfänger in Sachen Netzwerke bin, aber auch kein Doktor. Komplizierte Sachen, welche sich außerhalb des Programmierens, also am Router oder so, abspielen, würde ich lieber vermeiden wollen. Alles, was über Port-Weiterleitung und herkömmliche IP-Arbeit hinaus geht, wäre wahrscheinlich eher unpraktisch für mich. Es sei noch gesagt, dass ich bei den beiden von mir bereits genannten Möglichkeiten, also GameNet und BNetEx, vor allem die Interaktion zwischen Client und Server nicht so sehr gut verstehen konnte. Insbesondere bei GameNet war es mir nicht so klar, welcher Befehl bzw. welcher Befehlsablauf Daten an den Server sendet und welcher Befehl vom Server gesendete Daten empfängt. Auch wie der Server den Datenverkehr, als das Senden und Empfangen von Daten, regelt, erschließt sich mir bis jetzt nicht direkt. Ich habe mir übrigens dieses Tutorial angeschaut. Ich hoffe, das ich mein Problem ausreichend schildern konnte, und dass mir bitte jemand weiterhelfen kann. |
||
Я люблю тебя, Россия!! <333 |
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi, also ich arbeite auch mit BNetEx.. deswegen werde ich dir mal eine kleine Schritt für Schritt Anleitung schreiben.
Für den Server (TCP): 1. Erstelle dir einen TCP-Stream, [konfiguriere ihn], schalte ihn auf "zuhören": BlitzMax: [AUSKLAPPEN] Local testStream:TTCPStream = New TTCPStream Der lokale Port muss geöffnet sein, damit deine Clients connecten können. 2. Nun muss der Stream dauerhaft auf neue Clients geprüft werden. Am besten startest du diese Routine in einem eigenen Thread: BlitzMax: [AUSKLAPPEN] While True 'Hier prüfst du am besten, ob dein Stream noch online ist, oder noch online sein soll. 3. Nun kannst du den neu erstellten TTCPSTream, den du aus der Clientannahme erhalten hast auslesen, auch die Leseroutine sollte pro Client in einem eigenen Thread gestartet werden: BlitzMax: [AUSKLAPPEN] 'Lese Stream 4. Dem Client kannst du wie folgt eine Nachricht senden: BlitzMax: [AUSKLAPPEN] newStream.WriteInt(12345) Auch hier kannst du alle Stream-Schreibbefehle benutzen. Client: Beim Client geht es im Grunde genauso, nur muss sich dieser verbinden, statt einen Stream zu erstellen, auf dem er ankommende Connections akzeptiert. Also das Verbinden funktioniert so: BlitzMax: [AUSKLAPPEN] Local cStream:TTCPStream = New TTCPStream Diesen Stream kannst du nun genauso wie beim Server den "newStream" zum Senden und Empfangen benutzen. |
||
Ich habe Berthold gebrochen. |
- Zuletzt bearbeitet von Hangman am Do, Okt 02, 2014 10:47, insgesamt einmal bearbeitet
Toninator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für deine ausführliche Antwort, Hangman ![]() ![]() Hier mein Programm (der Client) im gegenwärtigen Zustand: Code: [AUSKLAPPEN] SuperStrict
Framework Vertex.BNetEx Local testStream:TTCPStream = New TTCPStream Local stream_works:Byte = testStream.Init() testStream.SetLocalPort(8888) testStream.SetTimeouts(5000, 5000, 5000) testStream.Listen() Global clients:TList = CreateList() Repeat 'überprüfen, ob neue Clients verbunden sind While Local newStream:TTCPStream = testStream.Accept() If newStream Then newStream.SetTimeouts(5000, 5000, 5000) 'Clients_Lesen_Thread.Run(newStream) EndIf Wend 'Streams nach neuen Nachrichten abhören For Local Stream:TTCPStream = EachIn clients If Stream.RecvAvail() Then While Stream.RecvMsg() While Stream.Eof() Local command$ = ReadString(newStream) Print command$ Stream.WriteString("Ich habe deine Nachricht erhalten") Stream.SendMsg() Wend Wend EndIf Next Delay 5 Until KeyHit(KEY_ESCAPE) End |
||
Я люблю тебя, Россия!! <333 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schuld ist
BlitzMax: [AUSKLAPPEN] Framework Vertex.BNetEx
Wenn du Framework benutzt, musst alle Module die du sonst brauchst mit Import einbinden. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du ein Framework benutzt wird ausschließlich dieses Framework benutzt.
Du musst die benötigten Module noch einbinden oder BNetEx eben als Modul einbinden. MfG, N0X EDIT: Mist, zu spät. |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sry, ich habe mich verschrieben... es muss natürlich While Not stream.Eof() heißen. | ||
Ich habe Berthold gebrochen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group