Host/Join mit UDP

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Host/Join mit UDP

BeitragSo, Dez 09, 2007 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich das machen, dass ich sowas wie ein HOST/JOIN-Format habe ?
Also das ich an dem einen PC mir einen HOST erstelle und an den anderen beiden dann in das Spiel von dem ersten enklinke ? Und wie kann ich dann eine Liste aller Spieler erstellen ? Könnt ihr mir da im ansatz Hilfen geben ?

thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragSo, Dez 09, 2007 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Liste von Spieler: Types

Und wenn der Host eine Nachricht von einem neuen Spieler empfängt, einfach neuen Spieler erstellen Smile
Diese Nachricht kann irgendwie aussehen. Lege dir zB ein "Protokoll" fest, wo es heißt:
Wenn das erste Byte in der empfangenen Nachricht 1 ist, dann ist das ein neuer Spieler, der aufgenommen werden will.

Als "Kennwerte" würde ich IP, Spielernummer, Name, was dir einfällt und was sinnvoll ist, speichern.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragSo, Dez 09, 2007 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hä ? Ich check dat net..... mit Types check ich shcon aber wie soll ich heruas finden
1.: Wie viele Spieler überhaubt drinne sind und
2.: Welche Positionen bzw. Texte ich von ihnen empfangen kann ?

thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

The_Nici

BeitragSo, Dez 09, 2007 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
1)Also, wenn ein Spieler das Spiel betritt, sendest du eine UDP-Nachricht solange an den Server, bis dieser eine Bestätigungsnachricht zurückschickt. Der Spieler bekommt ne ID.
2)Im Spiel senden die Spieler ihre Position und den Chat UND ihre ID an den Server. Mit Writeline. Der Server liest diese mit Readline aus, ordnet es der SpielerID zu und positioniert diesen anhand der Koordinaten.

ToeB

BeitragSo, Dez 09, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, danke !!

ich werds ausprobiren !

Aber wie kommen den die anderen Clienten an die Positionen ?

thx und mfg Crack93


[EDIT]

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()
AppTitle "Online Test"

SeedRnd MilliSecs()

SetFont(LoadFont("Arial",13))

Type s
     Field x,y,name$,server,IP,ID
End Type

Global s.s
Global Port = 8000
Global server,x,y,name$,IP,Join,ID = 1

.menu
   Cls
   Color 0,150,0
   Print ">>>Multiplayer"
   Print ">>>Menu"
   Color 255,255,255
   Print "(1) Host"
   Print "(2) Join"
   Print "(3) Quit"
Repeat
   If KeyHit(2) Then Gosub host
   If KeyHit(3) Then Gosub join
   If KeyHit(4) Then End
Forever

.host
   server = 1
   Print ""
   Color 0,150,0
   Print ">>>Host"
   Color 255,255,255
   Print "Hosting...."
   stream = CreateUDPStream(Port)
   Print "Gehostet !"
   name$ = Input(">>>Name : ")
   x = Rand(100,700):y = Rand(100,500)
Gosub game

.join
   server = 0
   Print ""
   Color 0,150,0
   Print ">>>Join"
   Color 255,255,255
   IP = INT_IP(Input(">>>HOST-IP : "))
   stream = CreateUDPStream(Port)
   Print "Gehostet !"
   name$ = Input(">>>Name : ")
   x = Rand(100,700):y = Rand(100,500)
   WriteLine(stream,"[New Player]"+name$)
   SendUDPMsg(stream,IP,Port)
Gosub game

.game
   Repeat
      x = x + (KeyDown(205)-KeyDown(203))*2
      y = y + (KeyDown(208)-KeyDown(200))*2
      If server = 1
         If RecvUDPMsg(stream) Then
            TT$ = ReadLine(stream)
            If Left(TT$,12) = "[New Player]" Then
               s.s = New s
               s\x = Rand(100,700)
               s\y = Rand(100,500)
               s\name$ = Mid(TT$,12,Len(TT$))
               s\IP = UDPMsgIP(stream)
               s\ID = ID:ID = ID + 1
               WriteLine(stream,"OK")
            Else
               ;????????????????????????????????????????????????????????????????
            EndIf
         EndIf
      Else
         ;?????????????????????????????????????????????????????????
      EndIf
      Flip
      Cls
   Until KeyHit(1)
   End

Function INT_IP(IP$)
   A1 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A2 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A3 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A4 = Int(IP$)
   Return (A1 Shl 24) + (A2 Shl 16) + (A3 Shl 8 ) + A4
End Function



Was soll ich jetzt dahin schreiben wo die Fragezeichen sind ?

mfg Crack93
 

T-Moe

BeitragMo, Dez 10, 2007 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Titel ist etwas irrefuehrend, denn UDP ist verbindungslos. Folglich gibt es keine "Join" Methoden
 

Dreamora

BeitragMo, Dez 10, 2007 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Moved

Bitte lies dich ein wenig ins Thema von UDP und Netzwerk Programmierung ein.

Speziell solltest du dich kundig machen wie das mit den "Messages" / "Packets" funktioniert, was Spieler (Client) und MessageIDs sind und dergleichen.

Denn das wirst du wissen müssen bevor du überhaupt anfangen kannst mit UDP zu arbeiten.
Und du solltest daran denken, dass UDP Packete auch einfach verloren gehen können (keine Zustellgarantie)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group