kleines netzwerkspiel

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

grafe

Betreff: kleines netzwerkspiel

BeitragDi, Nov 25, 2008 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusammen,

ich möchte mich mal mit netzwerkspiel beschäftigen...
...leider hab ich keine ahnung wie das gehen sollte Sad
natürlich habe ich schon viel ausprobiert aber bei mir funktioniert es einfach net. ihr habt doch sicher ein bischen ahnung vom netzwerk und könnt mir sicher helfen

also ich möchte das man mit udp (etwas ganz simples Wink ) ein rechteck an der maus hat und dan kan ein anderer spieler hinzukommen und auch mit der maus ein rechteck rumsteuern^^

ich hoffe ich habe mich verständlich ausgedrückt, sonst sagt es einfach

mfg grafe
SpaceThreat 3D Multiplayer Spaceshooter
 

da_poller

BeitragDi, Nov 25, 2008 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
dann erstmal nen lauffähigen client code und dann das udp zeug einbauen..

einfach jede bewegung an den anderen senden..

TimBo

BeitragDi, Nov 25, 2008 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich kann nicht sagen, dass ich der beste bin,
aber schreibe gerade ein Onlinegame in TCP und habe schon ein kleines minigame in UDP geschrieben.

Zeit hätte ich auch.

ich denke, dass ich sowas simples noch locker hinbekommen sollte.

Wenn du möchtest, geb mir doch deine ICQ MSN SKYPE adresse o.ä
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

grafe

BeitragDi, Nov 25, 2008 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem ist ich habe keine ahnung von netzwerk und könnte ein gaannz kleines beispiel gut gebrauchen Wink


edit:da hab ich timbo doch glat übersehen Rolling Eyes
SpaceThreat 3D Multiplayer Spaceshooter

The_Nici

BeitragMi, Nov 26, 2008 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt massig Beispiele, nur schon allein in der Hilfe. Bitte diese benutzen.
Und Anfangs sollte man kein Netzwerkspiel programmieren.

TimBo

BeitragMi, Nov 26, 2008 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 1024,768,24,2
SetBuffer BackBuffer()
timer=CreateTimer(60)

Type gegner
   Field x,y,ip
End Type

Global server_ip,server_port
Global mein_port

server_ip_string$=Input("bitte Geben sie die IP ein: xxx.xxx.xxx.xxx  ")

server_ip=INT_IP(server_ip_string$)
server_port=8000
mein_port  =8010


Global udp_stream=CreateUDPStream(mein_port)

Global mx,my

Repeat
   mx=MouseX()
   my=MouseY()
   
   Rect mx,my,50,50
   
   empfangen()
   senden()
   
   Locate 0,0
   For g.gegner=Each gegner
      Rect g\x,g\y,50,50
      Print g\ip+"      "+g\x+"      "+g\y
   Next
   
   
   Flip(0):Cls
   WaitTimer(timer)
Until KeyHit(1)

Function empfangen()
   
   Repeat
      
      nachricht = RecvUDPMsg(udp_stream)
      
      If nachricht<>0 Then
         While Not Eof(udp_stream) ;es sind noch Pakete im "postfach"
            ip = ReadInt(udp_stream)
            
            vorhanden = 0
            For g.gegner = Each gegner
               If g\ip=ip Then  vorhanden=1 : Exit;ip schon vorhanden
            Next
            
            If vorhanden = 0 Then
               g.gegner=New gegner
               g\ip=ip
            EndIf
            
            
            
            
            Select ReadByte(udp_stream)
               Case 1
                  
                  g\x=ReadInt(udp_stream)
                  g\y=ReadInt(udp_stream)
                  
            End Select
            
         Wend
      EndIf
      
   Until nachricht=0
   
End Function

Function senden()
   WriteByte udp_stream,1;ich beschrifte das Koordinaten "Paket mit einer 2"
   WriteInt udp_stream,mx
   WriteInt udp_stream,my
   
   SendUDPMsg udp_stream,server_ip,server_port
   
End Function

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

das ist der Client

Code: [AUSKLAPPEN]
Graphics 1024,768,24,2
SetBuffer BackBuffer()
timer=CreateTimer(60)


Global mein_port=8000
Global udp_stream=CreateUDPStream(mein_port)

Type client ;speichert alle Gegneradressen
   Field ip
End Type

Type gegner ;speichert Gegner Informationen
   Field x,y,ip
End Type

Repeat
   
   ;empfangen
   Repeat
      nachricht = RecvUDPMsg(udp_stream)
      
      
      If nachricht<>0 Then
         ;schauen ob es den client schon gibt
         vorhanden = 0
         For c.client = Each client
            If c\ip=nachricht Then  vorhanden=1 : Exit;ip schon vorhanden
         Next
         
         If vorhanden = 0 Then
            c.client=New client
            c\ip=nachricht
            g.gegner=New gegner
            g\ip=nachricht
         EndIf
         
         For g.gegner=Each gegner
            If g\ip=nachricht Then Exit
         Next
         
         While Not Eof(udp_stream)
            Select ReadByte(udp_stream)
               Case 1
                  g\x= ReadInt(udp_stream)
                  g\y= ReadInt(udp_stream)
            End Select
         Wend
      EndIf
   Until nachricht=0
   
   
   ;senden
   For c.client = Each client
      For g.gegner = Each gegner
         If c\ip <> g\ip Then
            WriteInt udp_stream,c\ip
            WriteByte udp_stream,1
            WriteInt udp_stream,g\x
            WriteInt udp_stream,g\y
            SendUDPMsg udp_stream,c\ip,8010
         EndIf
      Next
   Next
   
   For c.client=Each client
      Print "Client:  "+c\ip+"  ist verbunden"
   Next
   
   
   
   Flip(0):Cls
   WaitTimer(timer)
Until KeyHit(1)

das is der Server

Wenn du dich damit ein bisschen auseinandersetzt, wirst Du schnell wissen, nach welchem Schema das aufgebaut ist.
Wenn jemand ein Bug findet, dann meldet ihn bitte.

Edit:
@The_Nici: ich habe auch mit einem Online Game angefangen, ich verstehe nicht, was daran so "schlimm" ist. Man muss es ja nicht übertreiben und gleich ein 100vs100 WoW 2 schreiben ^^
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Quäiny

BeitragDo, Nov 27, 2008 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann man jetzt übers Internet testen oder hab ich das falsch verstanden? Confused
 

DjDETE

BeitragDo, Nov 27, 2008 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, entweder übers Lan-Netzwerk oder an einem Pc mit der LocalIP, also 127.0.0.1
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

Quäiny

BeitragDo, Nov 27, 2008 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
wie könnt ich es übers Internet machen?

The_Nici

BeitragDo, Nov 27, 2008 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
DU musst die ports beim Router öffnen, um Server zu sein.
 

Quäiny

BeitragDo, Nov 27, 2008 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
was ist wenn man keinen router hat, gibs da sonst keine möglichkeit?

The_Nici

BeitragDo, Nov 27, 2008 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann kann man ganz normal zu der IP connecten.

TimBo

BeitragFr, Nov 28, 2008 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
die ip findest du z.B. auf wieistmeineip.de raus
da sich die ip änder solltest du dir eine homepage machen.
meine ist timbo1993.dyndns.org *hust
wenn ich ping timbo1993.dyndns.org mache , kann ich z.b. immer sehen ob ich eine verbindung durchs internet zu meinem pc machen kann .. aber das nur so am rande
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Quäiny

Betreff: Daten werden nicht geschickt

BeitragSa, Nov 29, 2008 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 1024,768,24,2
SetBuffer BackBuffer()
timer=CreateTimer(60)

Type gegner
   Field x,y,ip
End Type

Global server_ip,server_port
Global mein_port


server_ip=int_ip("127.0.0.1")
server_port=8000
mein_port  =8010


Global udp_stream=CreateUDPStream(mein_port)

Global mx,my

Repeat
   mx=MouseX()
   my=MouseY()
   
   Rect mx,my,50,50
   
   empfangen()
   senden()
   
   
     
   
   
   
   Flip(0):Cls
   WaitTimer(timer)
Until KeyHit(1)

Function empfangen()
   
   Repeat
     
      nachricht = RecvUDPMsg(udp_stream)
     
 
          If nachricht<>0 Then
         While Not Eof(udp_stream) ;es sind noch Pakete im "postfach"
            ip = ReadInt(udp_stream)
         
            vorhanden = 0
            For g.gegner = Each gegner
               If g\ip=ip Then  vorhanden=1:Exit ;;<<<1 muss hier hin  ip schon vorhanden
            Next
           
            If vorhanden = 0 Then
               g.gegner=New gegner
               g\ip=ip
            EndIf
           
           
           
            Select ReadByte(udp_stream)
               Case 1
                  g\x=ReadInt(udp_stream)
                  g\y=ReadInt(udp_stream)
                              hallo$=ReadLine$(udp_stream)
                 
            
                     Rect g\x,g\y,50,50         
               Text 0,0,hallo$
               Text 0,20,mein_port
               End Select                  
         Wend
      EndIf
     
   Until nachricht=0
   
End Function

Function senden()
   WriteByte udp_stream,1;ich beschrifte das Koordinaten "Paket mit einer 2"
   WriteInt udp_stream,mx
   WriteInt udp_stream,my
   WriteInt udp_stream,mein_port

   
   SendUDPMsg udp_stream,server_ip,(server_port)
   
End Function

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


Das ist der Client;jetzt kommt der Server

Code: [AUSKLAPPEN]
Graphics 1024,768,24,2
SetBuffer BackBuffer()
timer=CreateTimer(60)


Global server_port=8000
Global udp_stream=CreateUDPStream(server_port)

 

   
Type client ;speichert alle Gegneradressen
   Field ip,port
   
End Type

Type gegner ;speichert Gegner Informationen
   Field x,y,ip
End Type

Repeat
   
   ;empfangen
   Repeat
      nachricht = RecvUDPMsg(udp_stream)
     If nachricht<>0 Then
         ;schauen ob es den client schon gibt
         vorhanden = 0
         For c.client = Each client
            If c\ip=nachricht Then  vorhanden=1 : Exit;ip schon vorhanden
         Next
         
         If vorhanden = 0 Then
            c.client=New client
            c\ip=nachricht
                     g.gegner=New gegner
            g\ip=nachricht
         EndIf
         
         For g.gegner=Each gegner
            If g\ip=nachricht Then Exit
         Next
       
     
       
         Text 0,0,"ip empfangen"
         While Not Eof(udp_stream)
            Select ReadByte(udp_stream)
               Case 1
                  mx= ReadInt(udp_stream)
                  my= ReadInt(udp_stream)
               mein_port=ReadInt(udp_stream)
               Rect mx,my,50,50
                  Text 0,30,mein_port            
               
                           End Select
         Wend
      EndIf
   Until nachricht=0
   
   
   ;senden
   For c.client = Each client
      For g.gegner = Each gegner
       
            WriteInt udp_stream,c\ip
         WriteInt udp_stream,c\port
            WriteByte udp_stream,1
            WriteInt (udp_stream,g\x)
            WriteInt (udp_stream,g\y)
         
         hallo$="hallo"
         WriteLine (udp_stream,hallo$)
         
            SendUDPMsg udp_stream,c\ip,c\port
         
      Next
   Next
   
 
      For c.client=Each client
      Text 0,10, "Client:  "+c\ip+"  ist verbunden"
      
   Next
 
   
   
   Flip(0):Cls
   WaitTimer(timer)
Until KeyHit(1)
[/code]
  • Zuletzt bearbeitet von Quäiny am Sa, Nov 29, 2008 17:32, insgesamt einmal bearbeitet

TimBo

BeitragSa, Nov 29, 2008 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

beim client machst du writeline und beim server kommt readint .. da passt was nicht ^^

Greez
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Quäiny

BeitragSa, Nov 29, 2008 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked überseh ich das jetzt? ich seh kein writeline

TimBo

BeitragSa, Nov 29, 2008 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir deinen Server mal an

Code: [AUSKLAPPEN]
WriteInt udp_stream,c\ip
         
            WriteByte udp_stream,1
            WriteInt (udp_stream,g\x)
            WriteInt (udp_stream,g\y)
         
         hallo$="hallo"
         WriteLine (udp_stream,hallo$)


Wink
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Quäiny

BeitragSa, Nov 29, 2008 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
oke danke ...aber es klappt immernoch nicht. Ich glaube es liegt daran: der schaut ja ob der client shcon vergeben ist
 

Rubber

Betreff: irgendwie komisch das ganze...

BeitragDo, Dez 04, 2008 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich habe mir mal die Freiheit genommen und den Code von TimBo kopiert.

allerdings bekomme ich bei der zeile
Global udp_stream = CreateUDPStream(mein_port)
den Fehler:
"function not found" (bezogen auf CreateUDPStream)

kann mir jemand sagen, woran das liegt?
Wenn Gott mich schon liebt, dann dich erstrecht...

The_Nici

BeitragDo, Dez 04, 2008 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Update deine Blitz-Version. 1.64 unterstützt nur DirectPlay. Aktuell ist 1.99.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group