Udp 1gegen 1 ohne probleme aber mehrere spieler gehen nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

dimaster

Betreff: Udp 1gegen 1 ohne probleme aber mehrere spieler gehen nicht

BeitragMi, Feb 23, 2005 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusamme,
ich hab mir mal ein kleines spiel 1 gegen 1 übers internet mit udp geschrieben. Jetzt möchte ich aber dass mehrere spieler dem spiel beitreten können das hab ich so versucht:

Code: [AUSKLAPPEN]
       
        name$ = ReadString(udp)
        x1 = ReadString(udp)
        y1 = ReadString(udp) 
        x2 = ReadString(udp) 
        y2 = ReadString(udp) 
        frm1 = ReadString(udp) 
        frm2 = ReadString(udp) 

       drawimage char,x1,y1,frm1
       drawimage char1,x2,y2,frm2



dat geht aber net also es geht schon aber die spieler flimmern dann immer. wie mach ich das sonst?

gruss dimaster

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragMi, Feb 23, 2005 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wärs mit mehr Code? Ich kann dazu nichts sagen, ausser das UDP vielleicht zu langsam ist. Benutz doch TCP oder so!
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium
 

noir

BeitragMi, Feb 23, 2005 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitzmaker hat Folgendes geschrieben:
Ich kann dazu nichts sagen, ausser das UDP vielleicht zu langsam ist. Benutz doch TCP oder so!


na... da verwechselt du aber was. UDP is schneller, nicht umgekehrt!!
Fragt und man wird euch helfen

Das Alternativ BlitzBasic-Forum: FreeCoder
Einfach chatten: BlitzChat
Code&Text schnell und einfach pasten: FreePasting
  • Zuletzt bearbeitet von noir am So, März 06, 2005 12:25, insgesamt einmal bearbeitet
 

Dreamora

BeitragMi, Feb 23, 2005 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
du brauchst etwas was die messagequeue in eine anweisungsqueue umwandelt und dass dann in einem anderen schritt visualisiert.

da aber nicht immer neue meldungen da sind, musst du in der zwischenzeit versuchen zu schätzen was aufgrund der aktuellen bewegung, geschwindigkeit etc passiert und gegebenenfalls korrigieren ...

dein jetziges funktioniert auch für 2 spieler nur im netzwerk und nicht wirklich im internet.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

dimaster

BeitragMi, Feb 23, 2005 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()

start = LoadImage("start.jpg")
host = LoadImage("host.jpg")
host1 = LoadImage("start1.jpg")
join = LoadImage("join.jpg")
join1 = LoadImage("join1.jpg")
ende = LoadImage("ende.jpg")
ende1 = LoadImage("ende1.jpg")
maus = LoadImage("maus.bmp")


Repeat
Cls
DrawImage start,0,0
DrawImage host,140,120
DrawImage join,140,220
DrawImage ende,140,320

DrawImage maus,MouseX(),MouseY()

If ImagesCollide(maus,MouseX(),MouseY(),0,ende,140,320,0) Then
DrawImage ende1,140,320
DrawImage maus,MouseX(),MouseY()
If MouseHit(1) Then
End
EndIf
EndIf

If ImagesCollide(maus,MouseX(),MouseY(),0,join,140,220,0) Then
DrawImage join1,140,220
DrawImage maus,MouseX(),MouseY()
If MouseHit(1) Then
weiter = 1
EndIf
EndIf

If ImagesCollide(maus,MouseX(),MouseY(),0,host,140,120,0) Then
DrawImage host1,140,120
DrawImage maus,MouseX(),MouseY()
If MouseHit(1) Then
ExecFile("Server.exe")
EndIf
EndIf


If KeyHit(1) Then End

Flip
Until weiter = 1

Graphics 640,480,0,2
name$ = Input("Bitte wähle deinen Namen: ")
;speichern des Clients
Type client
Field name$
End Type

SeedRnd(MilliSecs()) 

server_ip$ = "192.168.123.112" 
server_port = 12890 
client_name$ = name$

udp = CreateUDPStream()
If Not udp Then
  Print "Der UDP Stream konnte nicht erstellt werden."
  End
EndIf


WriteByte(udp,2)   sind.
WriteString(udp,client_name$)
SendUDPMsg udp,INT_IP(server_ip$),server_port 

;tiles
tileset = LoadAnimImage("tileset.bmp",32,32,0,31)
;char1
char = LoadAnimImage("char.bmp",32,32,0,4)
char1 = LoadAnimImage("char1.bmp",32,32,0,4)

px = 10
py = 7
move = 1

Dim map(100,100)

load()

frm = 0

Repeat
SetBuffer BackBuffer()
Cls
If KeyDown(1) Then End

For y = 0 To 100
For x = 0 To 100
DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y)
Next
Next


If KeyDown(208) Then
frm = 2
If map(px,py+1) < 14 Then
py = py + 1
scrolly = scrolly + 32
move = 1
End If
End If

If KeyDown(200) Then
frm = 0
If map(px,py-1) < 14 Then
py = py - 1
scrolly = scrolly - 32
move = 1
End If
End If

If KeyDown(203) Then
frm = 3
If map(px-1,py) < 14 Then
px = px - 1
scrollx = scrollx - 32
move = 1
End If
End If

If KeyDown(205) Then
frm = 1
If map(px+1,py) < 14 Then
px = px + 1
scrollx = scrollx + 32
move = 1
End If
End If

If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x-scrollx,y-scrolly,frm:Delay 10

  If RecvUDPMsg(udp) <> 0
    message = ReadByte(udp)

    Select message

       Case 1
        name$ = ReadString(udp) 
        px1 = ReadString(udp) 
        py1 = ReadString(udp)
        frm1 = ReadString(udp)
        px2 = ReadString(udp) 
        py2 = ReadString(udp)
        frm2 = ReadString(udp)

     
      Case 2
        name$ = ReadString(udp)
        c.client = New client
        c\name$ = name$ 


        Print name$ + " ist dem Chat beigetreten."

      Case 3
        name$ = ReadString(udp) 
        For c.client = Each client
          If c\name$ = name$ Then Delete c
        Next

        ;Nachricht ausgeben
        Print name$ + " hat den Chat verlassen."

    End Select

  EndIf

  If px Or py <> 0
    Print client_name$ + ": " + inp$ 


    WriteByte(udp,1)  Chatmessage handelt
    WriteString(udp,client_name$) 
    WriteString(udp,px)
    WriteString(udp,py)
    WriteString(udp,frm)
    SendUDPMsg udp,INT_IP(server_ip$),server_port   senden
  EndIf

DrawImage char1,px1*32-scrollx,py1*32-scrolly,frm1

Flip
Forever
WriteByte(udp,3) 
WriteString(udp,client_name$)
SendUDPMsg udp,INT_IP(server_ip$),server_port 

CloseUDPStream(udp)
End

Function load()
 karte$ = ReadFile("map1.map")
  For x = 0 To 100
   For y = 0 To 100
    tile = ReadLine(karte$)
    map(x,y) = ReadInt(karte$)
   Next
  Next
CloseFile(karte$)
End Function

;Funktion zum Umwandeln von String IPs in Integer.
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


also das wär so mal der code am anfang ich weiss nicht wiso

gruss dimaster

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group